From 0154f9c0aa0dcb5124fa96d93a666f6aae8190b7 Mon Sep 17 00:00:00 2001 From: Avnyr Date: Thu, 15 May 2025 20:57:13 +0200 Subject: [PATCH] feat: add project collaborators schema Introduced `projectCollaborators` schema to define project-user relationships. Includes indices and a unique constraint for `projectId` and `userId`. Added corresponding type definitions for select and insert operations. --- .../database/schema/projectCollaborators.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 backend/src/database/schema/projectCollaborators.ts diff --git a/backend/src/database/schema/projectCollaborators.ts b/backend/src/database/schema/projectCollaborators.ts new file mode 100644 index 0000000..d469bad --- /dev/null +++ b/backend/src/database/schema/projectCollaborators.ts @@ -0,0 +1,25 @@ +import { pgTable, uuid, timestamp, index, uniqueIndex } from 'drizzle-orm/pg-core'; +import { projects } from './projects'; +import { users } from './users'; + +/** + * Project Collaborators relation table schema + */ +export const projectCollaborators = pgTable('project_collaborators', { + id: uuid('id').primaryKey().defaultRandom(), + projectId: uuid('projectId').notNull().references(() => projects.id, { onDelete: 'cascade' }), + userId: uuid('userId').notNull().references(() => users.id, { onDelete: 'cascade' }), + createdAt: timestamp('createdAt', { withTimezone: true }).defaultNow().notNull() +}, (table) => { + return { + projectIdIdx: index('pc_projectId_idx').on(table.projectId), + userIdIdx: index('pc_userId_idx').on(table.userId), + projectUserUniqueIdx: uniqueIndex('pc_project_user_unique_idx').on(table.projectId, table.userId) + }; +}); + +/** + * ProjectCollaborators type definitions + */ +export type ProjectCollaborator = typeof projectCollaborators.$inferSelect; +export type NewProjectCollaborator = typeof projectCollaborators.$inferInsert; \ No newline at end of file