feat: add schema for registry and routes

This commit is contained in:
Mauricio Siu
2024-05-03 12:27:06 -06:00
parent 47146dfedf
commit 832fc184af
10 changed files with 596 additions and 1 deletions

View File

@@ -6,6 +6,7 @@ import { users } from "./user";
import { createInsertSchema } from "drizzle-zod";
import { z } from "zod";
import { certificateType } from "./shared";
import { registry } from "./registry";
export const admins = pgTable("admin", {
adminId: text("adminId")
@@ -39,6 +40,7 @@ export const adminsRelations = relations(admins, ({ one, many }) => ({
references: [auth.id],
}),
users: many(users),
registry: many(registry),
}));
const createSchema = createInsertSchema(admins, {

View File

@@ -1,6 +1,5 @@
export * from "./application";
export * from "./postgres";
export * from "./user";
export * from "./admin";
export * from "./auth";
@@ -20,3 +19,4 @@ export * from "./security";
export * from "./port";
export * from "./redis";
export * from "./shared";
export * from "./registry";

View File

@@ -0,0 +1,87 @@
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";
/**
* 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(),
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 }) => ({
admin: one(admins, {
fields: [registry.adminId],
references: [admins.adminId],
}),
}));
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),
});
export const apiCreateRegistry = createSchema
.pick({})
.extend({
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),
})
.required();
export const apiRemoveRegistry = createSchema
.pick({
registryId: true,
})
.required();
export const apiFindOneRegistry = createSchema
.pick({
registryId: true,
})
.required();
export const apiUpdateRegistry = createSchema
.pick({
password: true,
registryName: true,
username: true,
registryUrl: true,
registryId: true,
})
.required();
export const apiEnableSelfHostedRegistry = createSchema
.pick({
adminId: true,
})
.required();