import { relations } from "drizzle-orm"; import { pgTable, text } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { z } from "zod"; import { admins } from "./admin"; import { applications } from "./application"; import { compose } from "./compose"; import { mariadb } from "./mariadb"; import { mongo } from "./mongo"; import { mysql } from "./mysql"; import { postgres } from "./postgres"; import { redis } from "./redis"; export const projects = pgTable("project", { projectId: text("projectId") .notNull() .primaryKey() .$defaultFn(() => nanoid()), name: text("name").notNull(), description: text("description"), createdAt: text("createdAt") .notNull() .$defaultFn(() => new Date().toISOString()), adminId: text("adminId") .notNull() .references(() => admins.adminId, { onDelete: "cascade" }), }); export const projectRelations = relations(projects, ({ many, one }) => ({ mysql: many(mysql), postgres: many(postgres), mariadb: many(mariadb), applications: many(applications), mongo: many(mongo), redis: many(redis), compose: many(compose), admin: one(admins, { fields: [projects.adminId], references: [admins.adminId], }), })); const createSchema = createInsertSchema(projects, { projectId: z.string().min(1), name: z.string().min(1), description: z.string().optional(), }); export const apiCreateProject = createSchema.pick({ name: true, description: true, }); export const apiFindOneProject = createSchema .pick({ projectId: true, }) .required(); export const apiRemoveProject = createSchema .pick({ projectId: true, }) .required(); export const apiUpdateProject = createSchema .pick({ name: true, description: true, projectId: true, }) .required();