diff --git a/db/tables/school-assignments.ts b/db/tables/school-assignments.ts index 5870648..9d0c39a 100644 --- a/db/tables/school-assignments.ts +++ b/db/tables/school-assignments.ts @@ -1,24 +1,31 @@ import { relations } from "drizzle-orm"; -import { integer, primaryKey } from "drizzle-orm/pg-core"; +import { date, foreignKey, integer, serial, time } from "drizzle-orm/pg-core"; +import { assistantSemestersTable } from "./assistant-semesters"; import { mainSchema } from "./schema"; -import { schoolsTable } from "./schools"; import { semestersTable } from "./semesters"; import { assistantUsersTable } from "./users"; export const schoolAssignmentsTable = mainSchema.table( "schoolAssignments", { - schoolId: integer("schoolId").references(() => schoolsTable.id), - semesterId: integer("semesterId") - .references(() => semestersTable.id) - .notNull(), - assistantUserId: integer("userId") - .references(() => assistantUsersTable.id) - .notNull(), + id: serial("id").primaryKey(), + date: date("date").notNull(), + startTime: time("startTime").notNull(), + endTime: time("endTime").notNull(), + assistantId: integer("semesterId") + .notNull() + .references(() => assistantUsersTable.id), + semesterId: integer("assistantId") + .notNull() + .references(() => semestersTable.id), }, (table) => ({ - pk: primaryKey({ - columns: [table.semesterId, table.assistantUserId], + assistantSemesterFk: foreignKey({ + columns: [table.assistantId, table.semesterId], + foreignColumns: [ + assistantSemestersTable.assistantId, + assistantSemestersTable.semesterId, + ], }), }), ); @@ -26,17 +33,23 @@ export const schoolAssignmentsTable = mainSchema.table( export const schoolAssignmentsRelations = relations( schoolAssignmentsTable, ({ one }) => ({ - school: one(schoolsTable, { - fields: [schoolAssignmentsTable.schoolId], - references: [schoolsTable.id], + assistantSemester: one(assistantSemestersTable, { + fields: [ + schoolAssignmentsTable.assistantId, + schoolAssignmentsTable.semesterId, + ], + references: [ + assistantSemestersTable.assistantId, + assistantSemestersTable.semesterId, + ], + }), + assistant: one(assistantUsersTable, { + fields: [schoolAssignmentsTable.assistantId], + references: [assistantUsersTable.id], }), semester: one(semestersTable, { fields: [schoolAssignmentsTable.semesterId], references: [semestersTable.id], }), - assistantUser: one(assistantUsersTable, { - fields: [schoolAssignmentsTable.assistantUserId], - references: [assistantUsersTable.id], - }), }), ); diff --git a/db/tables/school-semester-assistant.ts b/db/tables/school-semester-assistant.ts new file mode 100644 index 0000000..43ea56e --- /dev/null +++ b/db/tables/school-semester-assistant.ts @@ -0,0 +1,52 @@ +import { relations } from "drizzle-orm"; +import { foreignKey, integer, primaryKey } from "drizzle-orm/pg-core"; +import { assistantSemestersTable } from "./assistant-semesters"; +import { mainSchema } from "./schema"; +import { schoolsTable } from "./schools"; + +export const schoolSemesterAssistantsTable = mainSchema.table( + "schoolSemesterAssistants", + { + schoolId: integer("schoolId") + .references(() => schoolsTable.id) + .notNull(), + semesterId: integer("semesterId") + .references(() => assistantSemestersTable.semesterId) + .notNull(), + assistantUserId: integer("assistantUserId") + .references(() => assistantSemestersTable.assistantId) + .notNull(), + }, + (table) => ({ + pk: primaryKey({ + columns: [table.semesterId, table.assistantUserId, table.schoolId], + }), + assistantSemesterFk: foreignKey({ + columns: [table.semesterId, table.assistantUserId], + foreignColumns: [ + assistantSemestersTable.semesterId, + assistantSemestersTable.assistantId, + ], + }), + }), +); + +export const schoolSemesterAssistantsRelations = relations( + schoolSemesterAssistantsTable, + ({ one }) => ({ + school: one(schoolsTable, { + fields: [schoolSemesterAssistantsTable.schoolId], + references: [schoolsTable.id], + }), + assistantSemester: one(assistantSemestersTable, { + fields: [ + schoolSemesterAssistantsTable.semesterId, + schoolSemesterAssistantsTable.assistantUserId, + ], + references: [ + assistantSemestersTable.semesterId, + assistantSemestersTable.assistantId, + ], + }), + }), +); diff --git a/db/tables/schools.ts b/db/tables/schools.ts index 71a2127..2084e28 100644 --- a/db/tables/schools.ts +++ b/db/tables/schools.ts @@ -2,7 +2,7 @@ import { relations } from "drizzle-orm"; import { boolean, integer, serial, text } from "drizzle-orm/pg-core"; import { departmentsTable } from "./departments"; import { mainSchema } from "./schema"; -import { schoolAssignmentsTable } from "./school-assignments"; +import { schoolSemesterAssistantsTable } from "./school-semester-assistant"; export const schoolsTable = mainSchema.table("schools", { id: serial("id").primaryKey(), @@ -19,5 +19,5 @@ export const schoolsRelations = relations(schoolsTable, ({ one, many }) => ({ fields: [schoolsTable.departmentId], references: [departmentsTable.id], }), - semesterAssistants: many(schoolAssignmentsTable), + semesterAssistants: many(schoolSemesterAssistantsTable), })); diff --git a/db/tables/semesters.ts b/db/tables/semesters.ts index d22cd64..a42efe3 100644 --- a/db/tables/semesters.ts +++ b/db/tables/semesters.ts @@ -10,7 +10,7 @@ import { applicationsTable } from "./applications"; import { departmentsTable } from "./departments"; import { meetingsTable } from "./meetings"; import { mainSchema } from "./schema"; -import { schoolAssignmentsTable } from "./school-assignments"; +import { schoolSemesterAssistantsTable } from "./school-semester-assistant"; import { teamSemesterUsersTable } from "./team-semester-user"; export const semestersTable = mainSchema.table("semesters", { @@ -43,7 +43,7 @@ export const semestersRelations = relations( fields: [semestersTable.id], references: [semestersTable.lastSemesterId], }), - schoolAssistants: many(schoolAssignmentsTable), + schoolAssistants: many(schoolSemesterAssistantsTable), teamUsers: many(teamSemesterUsersTable), applications: many(applicationsTable), meetings: many(meetingsTable), diff --git a/db/tables/users.ts b/db/tables/users.ts index f3405c4..b0ba0ab 100644 --- a/db/tables/users.ts +++ b/db/tables/users.ts @@ -5,7 +5,7 @@ import { integer, serial, text } from "drizzle-orm/pg-core"; import { expensesTable } from "@/db/tables/expenses"; import { fieldsOfStudyTable } from "@/db/tables/fields-of-study"; import { teamsTable } from "@/db/tables/teams"; -import { schoolAssignmentsTable } from "./school-assignments"; +import { schoolSemesterAssistantsTable } from "./school-semester-assistant"; import { teamSemesterUsersTable } from "./team-semester-user"; export const usersTable = mainSchema.table("users", { @@ -65,6 +65,6 @@ export const assistantUsersRelation = relations( fields: [assistantUsersTable.id], references: [usersTable.id], }), - schoolSemesters: many(schoolAssignmentsTable), + schoolSemesters: many(schoolSemesterAssistantsTable), }), );