import { relations } from "drizzle-orm"; import { accountTable, activityTable, apikeyTable, assetTable, columnTable, externalLinkTable, githubIntegrationTable, integrationTable, invitationTable, labelTable, notificationTable, projectTable, sessionTable, taskTable, teamMemberTable, teamTable, timeEntryTable, userTable, verificationTable, workflowRuleTable, workspaceTable, workspaceUserTable, } from "./schema"; export const userTableRelations = relations(userTable, ({ many }) => ({ sessions: many(sessionTable), accounts: many(accountTable), teamMembers: many(teamMemberTable), workspaces: many(workspaceTable), workspaceMemberships: many(workspaceUserTable), assignedTasks: many(taskTable), timeEntries: many(timeEntryTable), activities: many(activityTable), assets: many(assetTable), notifications: many(notificationTable), sentInvitations: many(invitationTable), apikeys: many(apikeyTable), })); export const sessionTableRelations = relations(sessionTable, ({ one }) => ({ user: one(userTable, { fields: [sessionTable.userId], references: [userTable.id], }), })); export const accountTableRelations = relations(accountTable, ({ one }) => ({ user: one(userTable, { fields: [accountTable.userId], references: [userTable.id], }), })); export const verificationTableRelations = relations( verificationTable, () => ({}), ); export const workspaceTableRelations = relations( workspaceTable, ({ many }) => ({ teams: many(teamTable), members: many(workspaceUserTable), projects: many(projectTable), assets: many(assetTable), invitations: many(invitationTable), }), ); export const workspaceUserTableRelations = relations( workspaceUserTable, ({ one }) => ({ workspace: one(workspaceTable, { fields: [workspaceUserTable.workspaceId], references: [workspaceTable.id], }), user: one(userTable, { fields: [workspaceUserTable.userId], references: [userTable.id], }), }), ); export const projectTableRelations = relations( projectTable, ({ one, many }) => ({ workspace: one(workspaceTable, { fields: [projectTable.workspaceId], references: [workspaceTable.id], }), tasks: many(taskTable), assets: many(assetTable), columns: many(columnTable), workflowRules: many(workflowRuleTable), githubIntegration: many(githubIntegrationTable), integrations: many(integrationTable), }), ); export const columnTableRelations = relations(columnTable, ({ one, many }) => ({ project: one(projectTable, { fields: [columnTable.projectId], references: [projectTable.id], }), tasks: many(taskTable), workflowRules: many(workflowRuleTable), })); export const workflowRuleTableRelations = relations( workflowRuleTable, ({ one }) => ({ project: one(projectTable, { fields: [workflowRuleTable.projectId], references: [projectTable.id], }), column: one(columnTable, { fields: [workflowRuleTable.columnId], references: [columnTable.id], }), }), ); export const taskTableRelations = relations(taskTable, ({ one, many }) => ({ project: one(projectTable, { fields: [taskTable.projectId], references: [projectTable.id], }), assignee: one(userTable, { fields: [taskTable.userId], references: [userTable.id], }), column: one(columnTable, { fields: [taskTable.columnId], references: [columnTable.id], }), timeEntries: many(timeEntryTable), activities: many(activityTable), assets: many(assetTable), labels: many(labelTable), externalLinks: many(externalLinkTable), })); export const timeEntryTableRelations = relations(timeEntryTable, ({ one }) => ({ task: one(taskTable, { fields: [timeEntryTable.taskId], references: [taskTable.id], }), user: one(userTable, { fields: [timeEntryTable.userId], references: [userTable.id], }), })); export const activityTableRelations = relations(activityTable, ({ one }) => ({ task: one(taskTable, { fields: [activityTable.taskId], references: [taskTable.id], }), user: one(userTable, { fields: [activityTable.userId], references: [userTable.id], }), })); export const assetTableRelations = relations(assetTable, ({ one }) => ({ workspace: one(workspaceTable, { fields: [assetTable.workspaceId], references: [workspaceTable.id], }), project: one(projectTable, { fields: [assetTable.projectId], references: [projectTable.id], }), task: one(taskTable, { fields: [assetTable.taskId], references: [taskTable.id], }), activity: one(activityTable, { fields: [assetTable.activityId], references: [activityTable.id], }), creator: one(userTable, { fields: [assetTable.createdBy], references: [userTable.id], }), })); export const labelTableRelations = relations(labelTable, ({ one }) => ({ task: one(taskTable, { fields: [labelTable.taskId], references: [taskTable.id], }), })); export const notificationTableRelations = relations( notificationTable, ({ one }) => ({ user: one(userTable, { fields: [notificationTable.userId], references: [userTable.id], }), }), ); export const githubIntegrationTableRelations = relations( githubIntegrationTable, ({ one }) => ({ project: one(projectTable, { fields: [githubIntegrationTable.projectId], references: [projectTable.id], }), }), ); export const teamTableRelations = relations(teamTable, ({ one, many }) => ({ workspace: one(workspaceTable, { fields: [teamTable.workspaceId], references: [workspaceTable.id], }), teamMembers: many(teamMemberTable), })); export const teamMemberTableRelations = relations( teamMemberTable, ({ one }) => ({ team: one(teamTable, { fields: [teamMemberTable.teamId], references: [teamTable.id], }), user: one(userTable, { fields: [teamMemberTable.userId], references: [userTable.id], }), }), ); export const invitationTableRelations = relations( invitationTable, ({ one }) => ({ workspace: one(workspaceTable, { fields: [invitationTable.workspaceId], references: [workspaceTable.id], }), inviter: one(userTable, { fields: [invitationTable.inviterId], references: [userTable.id], }), }), ); export const apikeyTableRelations = relations(apikeyTable, ({ one }) => ({ user: one(userTable, { fields: [apikeyTable.referenceId], references: [userTable.id], }), })); export const integrationTableRelations = relations( integrationTable, ({ one, many }) => ({ project: one(projectTable, { fields: [integrationTable.projectId], references: [projectTable.id], }), externalLinks: many(externalLinkTable), }), ); export const externalLinkTableRelations = relations( externalLinkTable, ({ one }) => ({ task: one(taskTable, { fields: [externalLinkTable.taskId], references: [taskTable.id], }), integration: one(integrationTable, { fields: [externalLinkTable.integrationId], references: [integrationTable.id], }), }), );