Applications need a Server

This commit is contained in:
headlessdev 2025-04-12 13:19:52 +02:00
parent 0506731a12
commit 43b7b3b270
12 changed files with 200 additions and 105 deletions

View File

@ -2,6 +2,7 @@ import { NextResponse, NextRequest } from "next/server";
import { PrismaClient } from '@/lib/generated/prisma'
interface AddRequest {
serverId: number;
name: string;
description: string;
icon: string;
@ -14,10 +15,11 @@ const prisma = new PrismaClient();
export async function POST(request: NextRequest) {
try {
const body: AddRequest = await request.json();
const { name, description, icon, publicURL, localURL } = body;
const { serverId, name, description, icon, publicURL, localURL } = body;
const application = await prisma.application.create({
data: {
serverId,
name,
description,
icon,

View File

@ -19,11 +19,29 @@ export async function POST(request: NextRequest) {
orderBy: { name: 'asc' }
});
const serverIds = applications
.map(app => app.serverId)
.filter((id): id is number => id !== null);
const servers = await prisma.server.findMany({
where: {
id: {
in: serverIds
}
}
});
const applicationsWithServers = applications.map(app => ({
...app,
server: servers.find(s => s.id === app.serverId)?.name || 'No server'
}));
const totalCount = await prisma.application.count();
const maxPage = Math.ceil(totalCount / ITEMS_PER_PAGE);
return NextResponse.json({
applications,
applications: applicationsWithServers,
servers,
maxPage
});
} catch (error: any) {

View File

@ -1,6 +1,6 @@
"use client";
import { AppSidebar } from "@/components/app-sidebar"
import { AppSidebar } from "@/components/app-sidebar";
import {
Breadcrumb,
BreadcrumbItem,
@ -8,15 +8,15 @@ import {
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@/components/ui/breadcrumb"
import { Separator } from "@/components/ui/separator"
} from "@/components/ui/breadcrumb";
import { Separator } from "@/components/ui/separator";
import {
SidebarInset,
SidebarProvider,
SidebarTrigger,
} from "@/components/ui/sidebar"
import { Button } from "@/components/ui/button"
import { Plus, Link, Home, Trash2 } from "lucide-react" // Importiere Icons
} from "@/components/ui/sidebar";
import { Button } from "@/components/ui/button";
import { Plus, Link, Home, Trash2 } from "lucide-react";
import {
Card,
CardContent,
@ -24,7 +24,7 @@ import {
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
} from "@/components/ui/card";
import {
Pagination,
PaginationContent,
@ -33,7 +33,7 @@ import {
PaginationLink,
PaginationNext,
PaginationPrevious,
} from "@/components/ui/pagination"
} from "@/components/ui/pagination";
import {
AlertDialog,
AlertDialogAction,
@ -44,10 +44,17 @@ import {
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
} from "@/components/ui/alert-dialog"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Textarea } from "@/components/ui/textarea"
} from "@/components/ui/alert-dialog";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Textarea } from "@/components/ui/textarea";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { useState, useEffect } from "react";
import axios from 'axios';
@ -58,14 +65,22 @@ export default function Dashboard() {
const [icon, setIcon] = useState("");
const [publicURL, setPublicURL] = useState("");
const [localURL, setLocalURL] = useState("");
const [serverId, setServerId] = useState<number | null>(null);
const [currentPage, setCurrentPage] = useState(1);
const [maxPage, setMaxPage] = useState(1);
const [applications, setApplications] = useState([]);
const [servers, setServers] = useState([]);
const add = async () => {
try {
const response = await axios.post('/api/applications/add', { name, description, icon, publicURL, localURL });
await axios.post('/api/applications/add', {
name,
description,
icon,
publicURL,
localURL,
serverId
});
getApplications();
} catch (error: any) {
console.log(error.response.data);
@ -76,6 +91,7 @@ export default function Dashboard() {
try {
const response = await axios.post('/api/applications/get', { page: currentPage });
setApplications(response.data.applications);
setServers(response.data.servers);
setMaxPage(response.data.maxPage);
} catch (error: any) {
console.log(error.response);
@ -86,13 +102,8 @@ export default function Dashboard() {
getApplications();
}, [currentPage]);
const handlePrevious = () => {
setCurrentPage(prev => Math.max(1, prev - 1));
}
const handleNext = () => {
setCurrentPage(prev => Math.min(maxPage, prev + 1));
}
const handlePrevious = () => setCurrentPage(prev => Math.max(1, prev - 1));
const handleNext = () => setCurrentPage(prev => Math.min(maxPage, prev + 1));
const deleteApplication = async (id: number) => {
try {
@ -129,8 +140,11 @@ export default function Dashboard() {
</div>
</header>
<div className="pl-4 pr-4">
<div className="flex justify-between">
<div className="flex justify-between items-center">
<span className="text-2xl font-semibold">Your Applications</span>
{servers.length === 0 ? (
<p className="text-muted-foreground">You must first add a server.</p>
) : (
<AlertDialog>
<AlertDialogTrigger asChild>
<Button variant="outline" size="icon">
@ -143,34 +157,52 @@ export default function Dashboard() {
<AlertDialogDescription>
<div className="space-y-4 pt-4">
<div className="grid w-full items-center gap-1.5">
<Label htmlFor="name">Name</Label>
<Input id="name" type="text" placeholder="e.g. Portainer" onChange={(e) => setName(e.target.value)}/>
<Label>Name</Label>
<Input placeholder="e.g. Portainer" onChange={(e) => setName(e.target.value)}/>
</div>
<div className="grid w-full items-center gap-1.5">
<Label htmlFor="description">Description <span className="text-stone-600">(optional)</span></Label>
<Textarea id="description" placeholder="e.g. Portainer is a self-hosted, open-source platform for managing Docker containers." onChange={(e) => setDescription(e.target.value)}/>
<Label>Server</Label>
<Select onValueChange={(v) => setServerId(Number(v))} required>
<SelectTrigger className="w-full">
<SelectValue placeholder="Select server" />
</SelectTrigger>
<SelectContent>
{servers.map((server) => (
<SelectItem key={server.id} value={String(server.id)}>
{server.name}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
<div className="grid w-full items-center gap-1.5">
<Label htmlFor="icon">Icon</Label>
<Input id="icon" type="text" placeholder="e.g. https://www.portainer.io/hubfs/portainer-logo-black.svg" onChange={(e) => setIcon(e.target.value)}/>
<Label>Description <span className="text-stone-600">(optional)</span></Label>
<Textarea placeholder="Application description" onChange={(e) => setDescription(e.target.value)}/>
</div>
<div className="grid w-full items-center gap-1.5">
<Label htmlFor="publicURL">Public URL</Label>
<Input id="publicURL" type="text" placeholder="e.g. https://portainer.lastname.com" onChange={(e) => setPublicURL(e.target.value)}/>
<Label>Icon URL <span className="text-stone-600">(optional)</span></Label>
<Input placeholder="https://example.com/icon.png" onChange={(e) => setIcon(e.target.value)}/>
</div>
<div className="grid w-full items-center gap-1.5">
<Label htmlFor="localURL">Local URL <span className="text-stone-600">(optional)</span></Label>
<Input id="localURL" type="text" placeholder="e.g. http://localhost:3000" onChange={(e) => setLocalURL(e.target.value)}/>
<Label>Public URL</Label>
<Input placeholder="https://example.com" onChange={(e) => setPublicURL(e.target.value)}/>
</div>
<div className="grid w-full items-center gap-1.5">
<Label>Local URL <span className="text-stone-600">(optional)</span></Label>
<Input placeholder="http://localhost:3000" onChange={(e) => setLocalURL(e.target.value)}/>
</div>
</div>
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel>Cancel</AlertDialogCancel>
<Button onClick={add}>Add</Button>
<Button onClick={add} disabled={!name || !publicURL || !serverId}>
Add
</Button>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
)}
</div>
<br />
{applications.map((app) => (
@ -187,7 +219,10 @@ export default function Dashboard() {
</div>
<div className="ml-4">
<CardTitle className="text-2xl font-bold">{app.name}</CardTitle>
<CardDescription className="text-md">{app.description}</CardDescription>
<CardDescription className="text-md">
{app.description}<br />
Server: {app.server || 'No server'}
</CardDescription>
</div>
</div>
<div className="flex flex-col items-end justify-start space-y-2 w-[270px]">
@ -236,11 +271,9 @@ export default function Dashboard() {
isActive={currentPage > 1}
/>
</PaginationItem>
<PaginationItem>
<PaginationLink isActive>{currentPage}</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationNext
href="#"

View File

@ -91,6 +91,7 @@ exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
exports.Prisma.ApplicationScalarFieldEnum = {
id: 'id',
serverId: 'serverId',
name: 'name',
description: 'description',
icon: 'icon',
@ -174,13 +175,13 @@ const config = {
}
}
},
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel application {\n id Int @id @default(autoincrement())\n name String\n description String?\n icon String\n publicURL String\n localURL String?\n createdAt DateTime @default(now())\n}\n\nmodel server {\n id Int @id @default(autoincrement())\n name String\n os String?\n ip String?\n url String?\n}\n",
"inlineSchemaHash": "ddf72260e19ee586841a252bd3c8cf4f117ce15f0dc9aef0f129fd5d226787c0",
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel application {\n id Int @id @default(autoincrement())\n serverId Int @default(1)\n name String\n description String?\n icon String\n publicURL String\n localURL String?\n createdAt DateTime @default(now())\n}\n\nmodel server {\n id Int @id @default(autoincrement())\n name String\n os String?\n ip String?\n url String?\n}\n",
"inlineSchemaHash": "f689d07c314e551dbb544b300c2eaf202c8b2a3439248ed3dbdc3eb508f94dc1",
"copyEngine": true
}
config.dirname = '/'
config.runtimeDataModel = JSON.parse("{\"models\":{\"application\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":{\"name\":\"autoincrement\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"icon\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"publicURL\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"localURL\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"server\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":{\"name\":\"autoincrement\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"os\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ip\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{},\"types\":{}}")
config.runtimeDataModel = JSON.parse("{\"models\":{\"application\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":{\"name\":\"autoincrement\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"serverId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":1,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"icon\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"publicURL\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"localURL\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"server\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":{\"name\":\"autoincrement\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"os\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ip\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{},\"types\":{}}")
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
config.engineWasm = undefined
config.compilerWasm = undefined

View File

@ -119,6 +119,7 @@ exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
exports.Prisma.ApplicationScalarFieldEnum = {
id: 'id',
serverId: 'serverId',
name: 'name',
description: 'description',
icon: 'icon',

View File

@ -974,14 +974,17 @@ export namespace Prisma {
export type ApplicationAvgAggregateOutputType = {
id: number | null
serverId: number | null
}
export type ApplicationSumAggregateOutputType = {
id: number | null
serverId: number | null
}
export type ApplicationMinAggregateOutputType = {
id: number | null
serverId: number | null
name: string | null
description: string | null
icon: string | null
@ -992,6 +995,7 @@ export namespace Prisma {
export type ApplicationMaxAggregateOutputType = {
id: number | null
serverId: number | null
name: string | null
description: string | null
icon: string | null
@ -1002,6 +1006,7 @@ export namespace Prisma {
export type ApplicationCountAggregateOutputType = {
id: number
serverId: number
name: number
description: number
icon: number
@ -1014,14 +1019,17 @@ export namespace Prisma {
export type ApplicationAvgAggregateInputType = {
id?: true
serverId?: true
}
export type ApplicationSumAggregateInputType = {
id?: true
serverId?: true
}
export type ApplicationMinAggregateInputType = {
id?: true
serverId?: true
name?: true
description?: true
icon?: true
@ -1032,6 +1040,7 @@ export namespace Prisma {
export type ApplicationMaxAggregateInputType = {
id?: true
serverId?: true
name?: true
description?: true
icon?: true
@ -1042,6 +1051,7 @@ export namespace Prisma {
export type ApplicationCountAggregateInputType = {
id?: true
serverId?: true
name?: true
description?: true
icon?: true
@ -1139,6 +1149,7 @@ export namespace Prisma {
export type ApplicationGroupByOutputType = {
id: number
serverId: number
name: string
description: string | null
icon: string
@ -1168,6 +1179,7 @@ export namespace Prisma {
export type applicationSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
id?: boolean
serverId?: boolean
name?: boolean
description?: boolean
icon?: boolean
@ -1178,6 +1190,7 @@ export namespace Prisma {
export type applicationSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
id?: boolean
serverId?: boolean
name?: boolean
description?: boolean
icon?: boolean
@ -1188,6 +1201,7 @@ export namespace Prisma {
export type applicationSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
id?: boolean
serverId?: boolean
name?: boolean
description?: boolean
icon?: boolean
@ -1198,6 +1212,7 @@ export namespace Prisma {
export type applicationSelectScalar = {
id?: boolean
serverId?: boolean
name?: boolean
description?: boolean
icon?: boolean
@ -1206,13 +1221,14 @@ export namespace Prisma {
createdAt?: boolean
}
export type applicationOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "description" | "icon" | "publicURL" | "localURL" | "createdAt", ExtArgs["result"]["application"]>
export type applicationOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "serverId" | "name" | "description" | "icon" | "publicURL" | "localURL" | "createdAt", ExtArgs["result"]["application"]>
export type $applicationPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
name: "application"
objects: {}
scalars: $Extensions.GetPayloadResult<{
id: number
serverId: number
name: string
description: string | null
icon: string
@ -1643,6 +1659,7 @@ export namespace Prisma {
*/
interface applicationFieldRefs {
readonly id: FieldRef<"application", 'Int'>
readonly serverId: FieldRef<"application", 'Int'>
readonly name: FieldRef<"application", 'String'>
readonly description: FieldRef<"application", 'String'>
readonly icon: FieldRef<"application", 'String'>
@ -3060,6 +3077,7 @@ export namespace Prisma {
export const ApplicationScalarFieldEnum: {
id: 'id',
serverId: 'serverId',
name: 'name',
description: 'description',
icon: 'icon',
@ -3175,6 +3193,7 @@ export namespace Prisma {
OR?: applicationWhereInput[]
NOT?: applicationWhereInput | applicationWhereInput[]
id?: IntFilter<"application"> | number
serverId?: IntFilter<"application"> | number
name?: StringFilter<"application"> | string
description?: StringNullableFilter<"application"> | string | null
icon?: StringFilter<"application"> | string
@ -3185,6 +3204,7 @@ export namespace Prisma {
export type applicationOrderByWithRelationInput = {
id?: SortOrder
serverId?: SortOrder
name?: SortOrder
description?: SortOrderInput | SortOrder
icon?: SortOrder
@ -3198,6 +3218,7 @@ export namespace Prisma {
AND?: applicationWhereInput | applicationWhereInput[]
OR?: applicationWhereInput[]
NOT?: applicationWhereInput | applicationWhereInput[]
serverId?: IntFilter<"application"> | number
name?: StringFilter<"application"> | string
description?: StringNullableFilter<"application"> | string | null
icon?: StringFilter<"application"> | string
@ -3208,6 +3229,7 @@ export namespace Prisma {
export type applicationOrderByWithAggregationInput = {
id?: SortOrder
serverId?: SortOrder
name?: SortOrder
description?: SortOrderInput | SortOrder
icon?: SortOrder
@ -3226,6 +3248,7 @@ export namespace Prisma {
OR?: applicationScalarWhereWithAggregatesInput[]
NOT?: applicationScalarWhereWithAggregatesInput | applicationScalarWhereWithAggregatesInput[]
id?: IntWithAggregatesFilter<"application"> | number
serverId?: IntWithAggregatesFilter<"application"> | number
name?: StringWithAggregatesFilter<"application"> | string
description?: StringNullableWithAggregatesFilter<"application"> | string | null
icon?: StringWithAggregatesFilter<"application"> | string
@ -3289,6 +3312,7 @@ export namespace Prisma {
}
export type applicationCreateInput = {
serverId?: number
name: string
description?: string | null
icon: string
@ -3299,6 +3323,7 @@ export namespace Prisma {
export type applicationUncheckedCreateInput = {
id?: number
serverId?: number
name: string
description?: string | null
icon: string
@ -3308,6 +3333,7 @@ export namespace Prisma {
}
export type applicationUpdateInput = {
serverId?: IntFieldUpdateOperationsInput | number
name?: StringFieldUpdateOperationsInput | string
description?: NullableStringFieldUpdateOperationsInput | string | null
icon?: StringFieldUpdateOperationsInput | string
@ -3318,6 +3344,7 @@ export namespace Prisma {
export type applicationUncheckedUpdateInput = {
id?: IntFieldUpdateOperationsInput | number
serverId?: IntFieldUpdateOperationsInput | number
name?: StringFieldUpdateOperationsInput | string
description?: NullableStringFieldUpdateOperationsInput | string | null
icon?: StringFieldUpdateOperationsInput | string
@ -3328,6 +3355,7 @@ export namespace Prisma {
export type applicationCreateManyInput = {
id?: number
serverId?: number
name: string
description?: string | null
icon: string
@ -3337,6 +3365,7 @@ export namespace Prisma {
}
export type applicationUpdateManyMutationInput = {
serverId?: IntFieldUpdateOperationsInput | number
name?: StringFieldUpdateOperationsInput | string
description?: NullableStringFieldUpdateOperationsInput | string | null
icon?: StringFieldUpdateOperationsInput | string
@ -3347,6 +3376,7 @@ export namespace Prisma {
export type applicationUncheckedUpdateManyInput = {
id?: IntFieldUpdateOperationsInput | number
serverId?: IntFieldUpdateOperationsInput | number
name?: StringFieldUpdateOperationsInput | string
description?: NullableStringFieldUpdateOperationsInput | string | null
icon?: StringFieldUpdateOperationsInput | string
@ -3467,6 +3497,7 @@ export namespace Prisma {
export type applicationCountOrderByAggregateInput = {
id?: SortOrder
serverId?: SortOrder
name?: SortOrder
description?: SortOrder
icon?: SortOrder
@ -3477,10 +3508,12 @@ export namespace Prisma {
export type applicationAvgOrderByAggregateInput = {
id?: SortOrder
serverId?: SortOrder
}
export type applicationMaxOrderByAggregateInput = {
id?: SortOrder
serverId?: SortOrder
name?: SortOrder
description?: SortOrder
icon?: SortOrder
@ -3491,6 +3524,7 @@ export namespace Prisma {
export type applicationMinOrderByAggregateInput = {
id?: SortOrder
serverId?: SortOrder
name?: SortOrder
description?: SortOrder
icon?: SortOrder
@ -3501,6 +3535,7 @@ export namespace Prisma {
export type applicationSumOrderByAggregateInput = {
id?: SortOrder
serverId?: SortOrder
}
export type IntWithAggregatesFilter<$PrismaModel = never> = {
@ -3601,6 +3636,14 @@ export namespace Prisma {
id?: SortOrder
}
export type IntFieldUpdateOperationsInput = {
set?: number
increment?: number
decrement?: number
multiply?: number
divide?: number
}
export type StringFieldUpdateOperationsInput = {
set?: string
}
@ -3613,14 +3656,6 @@ export namespace Prisma {
set?: Date | string
}
export type IntFieldUpdateOperationsInput = {
set?: number
increment?: number
decrement?: number
multiply?: number
divide?: number
}
export type NestedIntFilter<$PrismaModel = never> = {
equals?: number | IntFieldRefInput<$PrismaModel>
in?: number[] | ListIntFieldRefInput<$PrismaModel>

View File

@ -92,6 +92,7 @@ exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
exports.Prisma.ApplicationScalarFieldEnum = {
id: 'id',
serverId: 'serverId',
name: 'name',
description: 'description',
icon: 'icon',
@ -175,8 +176,8 @@ const config = {
}
}
},
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel application {\n id Int @id @default(autoincrement())\n name String\n description String?\n icon String\n publicURL String\n localURL String?\n createdAt DateTime @default(now())\n}\n\nmodel server {\n id Int @id @default(autoincrement())\n name String\n os String?\n ip String?\n url String?\n}\n",
"inlineSchemaHash": "ddf72260e19ee586841a252bd3c8cf4f117ce15f0dc9aef0f129fd5d226787c0",
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../lib/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel application {\n id Int @id @default(autoincrement())\n serverId Int @default(1)\n name String\n description String?\n icon String\n publicURL String\n localURL String?\n createdAt DateTime @default(now())\n}\n\nmodel server {\n id Int @id @default(autoincrement())\n name String\n os String?\n ip String?\n url String?\n}\n",
"inlineSchemaHash": "f689d07c314e551dbb544b300c2eaf202c8b2a3439248ed3dbdc3eb508f94dc1",
"copyEngine": true
}
@ -197,7 +198,7 @@ if (!fs.existsSync(path.join(__dirname, 'schema.prisma'))) {
config.isBundled = true
}
config.runtimeDataModel = JSON.parse("{\"models\":{\"application\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":{\"name\":\"autoincrement\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"icon\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"publicURL\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"localURL\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"server\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":{\"name\":\"autoincrement\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"os\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ip\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{},\"types\":{}}")
config.runtimeDataModel = JSON.parse("{\"models\":{\"application\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":{\"name\":\"autoincrement\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"serverId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":1,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"icon\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"publicURL\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"localURL\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"server\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":{\"name\":\"autoincrement\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"os\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ip\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{},\"types\":{}}")
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
config.engineWasm = undefined
config.compilerWasm = undefined

View File

@ -1,5 +1,5 @@
{
"name": "prisma-client-07d58c262f4c41e54bcbbc55d879a689e13512206b7e87b3b603872e2010444b",
"name": "prisma-client-f7cc69aeb506e155eedcc5da662a564d36a835b479dc7bc47312d45e3e955ebe",
"main": "index.js",
"types": "index.d.ts",
"browser": "index-browser.js",

View File

@ -119,6 +119,7 @@ exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
exports.Prisma.ApplicationScalarFieldEnum = {
id: 'id',
serverId: 'serverId',
name: 'name',
description: 'description',
icon: 'icon',

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "application" ADD COLUMN "serverId" INTEGER NOT NULL DEFAULT 1;

View File

@ -16,6 +16,7 @@ datasource db {
model application {
id Int @id @default(autoincrement())
serverId Int @default(1)
name String
description String?
icon String