mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
99 lines
2.8 KiB
TypeScript
99 lines
2.8 KiB
TypeScript
import { createInsertSchema } from "drizzle-zod";
|
|
import { nanoid } from "nanoid";
|
|
import { relations, sql } from "drizzle-orm";
|
|
import { boolean, pgEnum, pgTable, text, timestamp } from "drizzle-orm/pg-core";
|
|
import { auth } from "./auth";
|
|
import { admins } from "./admin";
|
|
import { z } from "zod";
|
|
import { applications } from "./application";
|
|
/**
|
|
* This is an example of how to use the multi-project schema feature of Drizzle ORM. Use the same
|
|
* database instance for multiple projects.
|
|
*
|
|
* @see https://orm.drizzle.team/docs/goodies#multi-project-schema
|
|
*/
|
|
export const registryType = pgEnum("RegistryType", ["selfHosted", "cloud"]);
|
|
|
|
export const registry = pgTable("registry", {
|
|
registryId: text("registryId")
|
|
.notNull()
|
|
.primaryKey()
|
|
.$defaultFn(() => nanoid()),
|
|
registryName: text("registryName").notNull(),
|
|
imagePrefix: text("imagePrefix"),
|
|
username: text("username").notNull(),
|
|
password: text("password").notNull(),
|
|
registryUrl: text("registryUrl").notNull(),
|
|
createdAt: text("createdAt")
|
|
.notNull()
|
|
.$defaultFn(() => new Date().toISOString()),
|
|
registryType: registryType("selfHosted").notNull().default("cloud"),
|
|
adminId: text("adminId")
|
|
.notNull()
|
|
.references(() => admins.adminId, { onDelete: "cascade" }),
|
|
});
|
|
|
|
export const registryRelations = relations(registry, ({ one, many }) => ({
|
|
admin: one(admins, {
|
|
fields: [registry.adminId],
|
|
references: [admins.adminId],
|
|
}),
|
|
applications: many(applications),
|
|
}));
|
|
|
|
const createSchema = createInsertSchema(registry, {
|
|
registryName: z.string().min(1),
|
|
username: z.string().min(1),
|
|
password: z.string().min(1),
|
|
registryUrl: z.string().min(1),
|
|
adminId: z.string().min(1),
|
|
registryId: z.string().min(1),
|
|
registryType: z.enum(["selfHosted", "cloud"]),
|
|
imagePrefix: z.string().nullable().optional(),
|
|
});
|
|
|
|
export const apiCreateRegistry = createSchema
|
|
.pick({})
|
|
.extend({
|
|
registryName: z.string().min(1),
|
|
username: z.string().min(1),
|
|
password: z.string().min(1),
|
|
registryUrl: z.string(),
|
|
registryType: z.enum(["selfHosted", "cloud"]),
|
|
imagePrefix: z.string().nullable().optional(),
|
|
})
|
|
.required();
|
|
|
|
export const apiTestRegistry = createSchema.pick({}).extend({
|
|
registryName: z.string().min(1),
|
|
username: z.string().min(1),
|
|
password: z.string().min(1),
|
|
registryUrl: z.string(),
|
|
registryType: z.enum(["selfHosted", "cloud"]),
|
|
imagePrefix: z.string().nullable().optional(),
|
|
});
|
|
|
|
export const apiRemoveRegistry = createSchema
|
|
.pick({
|
|
registryId: true,
|
|
})
|
|
.required();
|
|
|
|
export const apiFindOneRegistry = createSchema
|
|
.pick({
|
|
registryId: true,
|
|
})
|
|
.required();
|
|
|
|
export const apiUpdateRegistry = createSchema.partial().extend({
|
|
registryId: z.string().min(1),
|
|
});
|
|
|
|
export const apiEnableSelfHostedRegistry = createSchema
|
|
.pick({
|
|
registryUrl: true,
|
|
username: true,
|
|
password: true,
|
|
})
|
|
.required();
|