Files
graff-mate-server/src/db/schema/apps.ts
T
2025-06-20 12:13:46 +05:00

68 lines
1.7 KiB
TypeScript

import {
pgTable,
primaryKey,
timestamp,
uniqueIndex,
uuid,
varchar,
} from "drizzle-orm/pg-core";
import { companiesTable } from "./companies";
import { relations } from "drizzle-orm";
import { serversTable } from "./servers";
export const appsTable = pgTable(
"apps",
{
id: uuid("id").defaultRandom().primaryKey(),
name: varchar("name").notNull(),
fileName: varchar("filename").notNull(),
companyId: uuid("company_id")
.notNull()
.references(() => companiesTable.id, { onDelete: "cascade" }),
createdAt: timestamp("created_at", { withTimezone: true })
.notNull()
.defaultNow(),
updatedAt: timestamp("updated_at", { withTimezone: true })
.notNull()
.defaultNow()
.$onUpdate(() => new Date()),
},
(table) => ({
uniqueFileNameServerId: uniqueIndex("unique_file_name_server_id").on(
table.fileName
),
})
);
export const appsRelations = relations(appsTable, ({ one, many }) => ({
company: one(companiesTable, {
fields: [appsTable.companyId],
references: [companiesTable.id],
}),
appsToServers: many(appsToServers),
}));
export const appsToServers = pgTable(
"apps_to_servers",
{
appId: uuid("app_id")
.notNull()
.references(() => appsTable.id, { onDelete: "cascade" }),
serverId: uuid("server_id")
.notNull()
.references(() => serversTable.id, { onDelete: "cascade" }),
},
(t) => [primaryKey({ columns: [t.appId, t.serverId] })]
);
export const appsToServersRelations = relations(appsToServers, ({ one }) => ({
app: one(appsTable, {
fields: [appsToServers.appId],
references: [appsTable.id],
}),
server: one(serversTable, {
fields: [appsToServers.serverId],
references: [serversTable.id],
}),
}));