From 4bdd1283f1b027763d66e9b9b1223a1e2e705953 Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Thu, 22 Jan 2026 18:00:12 +0100 Subject: [PATCH 01/11] added date table --- db/tables/date.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 db/tables/date.ts diff --git a/db/tables/date.ts b/db/tables/date.ts new file mode 100644 index 0000000..b8877e6 --- /dev/null +++ b/db/tables/date.ts @@ -0,0 +1,23 @@ +import { date, foreignKey, integer, time } from "drizzle-orm/pg-core"; +import { assistantSemestersTable } from "./assistant-semesters"; +import { mainSchema } from "./schema"; + +export const datesTable = mainSchema.table( + "dates", + { + date: date("date").notNull(), + startTime: time("startTime").notNull(), + endTime: time("endTime").notNull(), + assistantId: integer("semesterId").notNull(), + semesterId: integer("assistantId").notNull(), + }, + (table) => ({ + assistantSemesterFk: foreignKey({ + columns: [table.assistantId, table.semesterId], + foreignColumns: [ + assistantSemestersTable.assistantId, + assistantSemestersTable.semesterId, + ], + }), + }), +); From a83e1650db01ac01517d96e11745d8d6fcb440e6 Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Thu, 22 Jan 2026 18:48:39 +0100 Subject: [PATCH 02/11] added pk and relations to dates table --- db/tables/date.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/db/tables/date.ts b/db/tables/date.ts index b8877e6..41c8518 100644 --- a/db/tables/date.ts +++ b/db/tables/date.ts @@ -1,10 +1,12 @@ -import { date, foreignKey, integer, time } from "drizzle-orm/pg-core"; +import { relations } from "drizzle-orm"; +import { date, foreignKey, integer, serial, time } from "drizzle-orm/pg-core"; import { assistantSemestersTable } from "./assistant-semesters"; import { mainSchema } from "./schema"; export const datesTable = mainSchema.table( "dates", { + id: serial("id").primaryKey(), date: date("date").notNull(), startTime: time("startTime").notNull(), endTime: time("endTime").notNull(), @@ -21,3 +23,7 @@ export const datesTable = mainSchema.table( }), }), ); + +export const datesRelations = relations(datesTable, ({ one }) => ({ + assistantSemester: one(assistantSemestersTable), +})); From 5e0fcc62d01be1e017495777938f94e4991af8d9 Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Mon, 26 Jan 2026 16:39:36 +0100 Subject: [PATCH 03/11] changed name from dates to schoolAssignments --- db/tables/{date.ts => schoolAssignment.ts} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename db/tables/{date.ts => schoolAssignment.ts} (83%) diff --git a/db/tables/date.ts b/db/tables/schoolAssignment.ts similarity index 83% rename from db/tables/date.ts rename to db/tables/schoolAssignment.ts index 41c8518..4da7836 100644 --- a/db/tables/date.ts +++ b/db/tables/schoolAssignment.ts @@ -3,7 +3,7 @@ import { date, foreignKey, integer, serial, time } from "drizzle-orm/pg-core"; import { assistantSemestersTable } from "./assistant-semesters"; import { mainSchema } from "./schema"; -export const datesTable = mainSchema.table( +export const schoolAssignmentsTable = mainSchema.table( "dates", { id: serial("id").primaryKey(), @@ -24,6 +24,6 @@ export const datesTable = mainSchema.table( }), ); -export const datesRelations = relations(datesTable, ({ one }) => ({ +export const schoolAssignmentsRelations = relations(schoolAssignmentsTable, ({ one }) => ({ assistantSemester: one(assistantSemestersTable), })); From f851c6f682f60796c891a145c971312f8724f657 Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Mon, 26 Jan 2026 16:47:41 +0100 Subject: [PATCH 04/11] renamed previous school-assignments table to avoid conflict --- db/tables/school-assignments.ts | 42 ++++++++++---------------- db/tables/school-semester-assistant.ts | 42 ++++++++++++++++++++++++++ db/tables/schoolAssignment.ts | 29 ------------------ db/tables/schools.ts | 4 +-- db/tables/semesters.ts | 4 +-- db/tables/users.ts | 4 +-- 6 files changed, 64 insertions(+), 61 deletions(-) create mode 100644 db/tables/school-semester-assistant.ts delete mode 100644 db/tables/schoolAssignment.ts diff --git a/db/tables/school-assignments.ts b/db/tables/school-assignments.ts index 5870648..7076b0c 100644 --- a/db/tables/school-assignments.ts +++ b/db/tables/school-assignments.ts @@ -1,24 +1,25 @@ 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", + "dates", { - 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(), + semesterId: integer("assistantId").notNull(), }, (table) => ({ - pk: primaryKey({ - columns: [table.semesterId, table.assistantUserId], + assistantSemesterFk: foreignKey({ + columns: [table.assistantId, table.semesterId], + foreignColumns: [ + assistantSemestersTable.assistantId, + assistantSemestersTable.semesterId, + ], }), }), ); @@ -26,17 +27,6 @@ export const schoolAssignmentsTable = mainSchema.table( export const schoolAssignmentsRelations = relations( schoolAssignmentsTable, ({ one }) => ({ - school: one(schoolsTable, { - fields: [schoolAssignmentsTable.schoolId], - references: [schoolsTable.id], - }), - semester: one(semestersTable, { - fields: [schoolAssignmentsTable.semesterId], - references: [semestersTable.id], - }), - assistantUser: one(assistantUsersTable, { - fields: [schoolAssignmentsTable.assistantUserId], - references: [assistantUsersTable.id], - }), + assistantSemester: one(assistantSemestersTable), }), ); diff --git a/db/tables/school-semester-assistant.ts b/db/tables/school-semester-assistant.ts new file mode 100644 index 0000000..8831780 --- /dev/null +++ b/db/tables/school-semester-assistant.ts @@ -0,0 +1,42 @@ +import { relations } from "drizzle-orm"; +import { integer, primaryKey } from "drizzle-orm/pg-core"; +import { mainSchema } from "./schema"; +import { schoolsTable } from "./schools"; +import { semestersTable } from "./semesters"; +import { assistantUsersTable } from "./users"; + +export const schoolSemesterAssistantsTable = mainSchema.table( + "schoolAssignments", + { + schoolId: integer("schoolId").references(() => schoolsTable.id), + semesterId: integer("semesterId") + .references(() => semestersTable.id) + .notNull(), + assistantUserId: integer("userId") + .references(() => assistantUsersTable.id) + .notNull(), + }, + (table) => ({ + pk: primaryKey({ + columns: [table.semesterId, table.assistantUserId], + }), + }), +); + +export const schoolSemesterAssistantsRelations = relations( + schoolSemesterAssistantsTable, + ({ one }) => ({ + school: one(schoolsTable, { + fields: [schoolSemesterAssistantsTable.schoolId], + references: [schoolsTable.id], + }), + semester: one(semestersTable, { + fields: [schoolSemesterAssistantsTable.semesterId], + references: [semestersTable.id], + }), + assistantUser: one(assistantUsersTable, { + fields: [schoolSemesterAssistantsTable.assistantUserId], + references: [assistantUsersTable.id], + }), + }), +); diff --git a/db/tables/schoolAssignment.ts b/db/tables/schoolAssignment.ts deleted file mode 100644 index 4da7836..0000000 --- a/db/tables/schoolAssignment.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { relations } from "drizzle-orm"; -import { date, foreignKey, integer, serial, time } from "drizzle-orm/pg-core"; -import { assistantSemestersTable } from "./assistant-semesters"; -import { mainSchema } from "./schema"; - -export const schoolAssignmentsTable = mainSchema.table( - "dates", - { - id: serial("id").primaryKey(), - date: date("date").notNull(), - startTime: time("startTime").notNull(), - endTime: time("endTime").notNull(), - assistantId: integer("semesterId").notNull(), - semesterId: integer("assistantId").notNull(), - }, - (table) => ({ - assistantSemesterFk: foreignKey({ - columns: [table.assistantId, table.semesterId], - foreignColumns: [ - assistantSemestersTable.assistantId, - assistantSemestersTable.semesterId, - ], - }), - }), -); - -export const schoolAssignmentsRelations = relations(schoolAssignmentsTable, ({ one }) => ({ - assistantSemester: one(assistantSemestersTable), -})); 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), }), ); From fbcc8ffafedc67a044afd0bbf0a9247fb4d3627d Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Mon, 26 Jan 2026 16:58:26 +0100 Subject: [PATCH 05/11] Updated strings and PK for schoolSemesterAssistants table --- db/tables/school-assignments.ts | 2 +- db/tables/school-semester-assistant.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/db/tables/school-assignments.ts b/db/tables/school-assignments.ts index 7076b0c..a27efb9 100644 --- a/db/tables/school-assignments.ts +++ b/db/tables/school-assignments.ts @@ -4,7 +4,7 @@ import { assistantSemestersTable } from "./assistant-semesters"; import { mainSchema } from "./schema"; export const schoolAssignmentsTable = mainSchema.table( - "dates", + "schoolAssignments", { id: serial("id").primaryKey(), date: date("date").notNull(), diff --git a/db/tables/school-semester-assistant.ts b/db/tables/school-semester-assistant.ts index 8831780..d1260d3 100644 --- a/db/tables/school-semester-assistant.ts +++ b/db/tables/school-semester-assistant.ts @@ -6,7 +6,7 @@ import { semestersTable } from "./semesters"; import { assistantUsersTable } from "./users"; export const schoolSemesterAssistantsTable = mainSchema.table( - "schoolAssignments", + "schoolSemesterAssistants", { schoolId: integer("schoolId").references(() => schoolsTable.id), semesterId: integer("semesterId") @@ -18,7 +18,7 @@ export const schoolSemesterAssistantsTable = mainSchema.table( }, (table) => ({ pk: primaryKey({ - columns: [table.semesterId, table.assistantUserId], + columns: [table.semesterId, table.assistantUserId, table.schoolId], }), }), ); From 743b92485621aaf92c60d3e6d4d0095ba63d742d Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Mon, 26 Jan 2026 18:22:10 +0100 Subject: [PATCH 06/11] added relations for assistant and semester in schoolassignments table --- db/tables/school-assignments.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/db/tables/school-assignments.ts b/db/tables/school-assignments.ts index a27efb9..db7c92e 100644 --- a/db/tables/school-assignments.ts +++ b/db/tables/school-assignments.ts @@ -2,6 +2,8 @@ import { relations } from "drizzle-orm"; import { date, foreignKey, integer, serial, time } from "drizzle-orm/pg-core"; import { assistantSemestersTable } from "./assistant-semesters"; import { mainSchema } from "./schema"; +import { semestersTable } from "./semesters"; +import { assistantUsersTable } from "./users"; export const schoolAssignmentsTable = mainSchema.table( "schoolAssignments", @@ -28,5 +30,13 @@ export const schoolAssignmentsRelations = relations( schoolAssignmentsTable, ({ one }) => ({ assistantSemester: one(assistantSemestersTable), + assistant: one(assistantUsersTable, { + fields: [schoolAssignmentsTable.assistantId], + references: [assistantUsersTable.id], + }), + semester: one(semestersTable, { + fields: [schoolAssignmentsTable.semesterId], + references: [semestersTable.id], + }), }), ); From 20acbee392c4a455f9604e4a7d010f346ce4f1f2 Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Mon, 26 Jan 2026 18:39:14 +0100 Subject: [PATCH 07/11] added references to assistant and semester in school assignment table --- db/tables/school-assignments.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/db/tables/school-assignments.ts b/db/tables/school-assignments.ts index db7c92e..9d0c39a 100644 --- a/db/tables/school-assignments.ts +++ b/db/tables/school-assignments.ts @@ -12,8 +12,12 @@ export const schoolAssignmentsTable = mainSchema.table( date: date("date").notNull(), startTime: time("startTime").notNull(), endTime: time("endTime").notNull(), - assistantId: integer("semesterId").notNull(), - semesterId: integer("assistantId").notNull(), + assistantId: integer("semesterId") + .notNull() + .references(() => assistantUsersTable.id), + semesterId: integer("assistantId") + .notNull() + .references(() => semestersTable.id), }, (table) => ({ assistantSemesterFk: foreignKey({ @@ -29,7 +33,16 @@ export const schoolAssignmentsTable = mainSchema.table( export const schoolAssignmentsRelations = relations( schoolAssignmentsTable, ({ one }) => ({ - assistantSemester: one(assistantSemestersTable), + assistantSemester: one(assistantSemestersTable, { + fields: [ + schoolAssignmentsTable.assistantId, + schoolAssignmentsTable.semesterId, + ], + references: [ + assistantSemestersTable.assistantId, + assistantSemestersTable.semesterId, + ], + }), assistant: one(assistantUsersTable, { fields: [schoolAssignmentsTable.assistantId], references: [assistantUsersTable.id], From cd17440a511934e17ccc00bc57b103f5997ef310 Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Mon, 9 Feb 2026 17:12:05 +0100 Subject: [PATCH 08/11] added composite FK from schoolsemesterassistant to assistantsemester --- db/tables/school-semester-assistant.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/db/tables/school-semester-assistant.ts b/db/tables/school-semester-assistant.ts index d1260d3..357f387 100644 --- a/db/tables/school-semester-assistant.ts +++ b/db/tables/school-semester-assistant.ts @@ -1,25 +1,30 @@ import { relations } from "drizzle-orm"; -import { integer, primaryKey } from "drizzle-orm/pg-core"; +import { foreignKey, integer, primaryKey } from "drizzle-orm/pg-core"; import { mainSchema } from "./schema"; import { schoolsTable } from "./schools"; import { semestersTable } from "./semesters"; import { assistantUsersTable } from "./users"; +import { assistantSemestersTable } from "./assistant-semesters"; export const schoolSemesterAssistantsTable = mainSchema.table( "schoolSemesterAssistants", { schoolId: integer("schoolId").references(() => schoolsTable.id), semesterId: integer("semesterId") - .references(() => semestersTable.id) + .references(() => assistantSemestersTable.semesterId) .notNull(), assistantUserId: integer("userId") - .references(() => assistantUsersTable.id) + .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], + }), }), ); From 3e66fb3cd4085a3d2da44f231a3e4efa182a090e Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Mon, 9 Feb 2026 18:36:33 +0100 Subject: [PATCH 09/11] pnpm check --- db/tables/school-semester-assistant.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/db/tables/school-semester-assistant.ts b/db/tables/school-semester-assistant.ts index 357f387..7dd2725 100644 --- a/db/tables/school-semester-assistant.ts +++ b/db/tables/school-semester-assistant.ts @@ -1,10 +1,10 @@ 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"; import { semestersTable } from "./semesters"; import { assistantUsersTable } from "./users"; -import { assistantSemestersTable } from "./assistant-semesters"; export const schoolSemesterAssistantsTable = mainSchema.table( "schoolSemesterAssistants", @@ -21,9 +21,12 @@ export const schoolSemesterAssistantsTable = mainSchema.table( pk: primaryKey({ columns: [table.semesterId, table.assistantUserId, table.schoolId], }), - assistantSemesterFK: foreignKey({ + assistantSemesterFk: foreignKey({ columns: [table.semesterId, table.assistantUserId], - foreignColumns: [assistantSemestersTable.semesterId, assistantSemestersTable.assistantId], + foreignColumns: [ + assistantSemestersTable.semesterId, + assistantSemestersTable.assistantId, + ], }), }), ); From c87a33a4efb71406ffd89a779e1df3f776e276f8 Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Mon, 9 Feb 2026 19:01:28 +0100 Subject: [PATCH 10/11] made fk to assistantsemester composite key in schoolsemesterassistantrelations --- db/tables/school-semester-assistant.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/db/tables/school-semester-assistant.ts b/db/tables/school-semester-assistant.ts index 7dd2725..a9a7eff 100644 --- a/db/tables/school-semester-assistant.ts +++ b/db/tables/school-semester-assistant.ts @@ -3,13 +3,13 @@ import { foreignKey, integer, primaryKey } 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 schoolSemesterAssistantsTable = mainSchema.table( "schoolSemesterAssistants", { - schoolId: integer("schoolId").references(() => schoolsTable.id), + schoolId: integer("schoolId") + .references(() => schoolsTable.id) + .notNull(), semesterId: integer("semesterId") .references(() => assistantSemestersTable.semesterId) .notNull(), @@ -38,13 +38,15 @@ export const schoolSemesterAssistantsRelations = relations( fields: [schoolSemesterAssistantsTable.schoolId], references: [schoolsTable.id], }), - semester: one(semestersTable, { - fields: [schoolSemesterAssistantsTable.semesterId], - references: [semestersTable.id], - }), - assistantUser: one(assistantUsersTable, { - fields: [schoolSemesterAssistantsTable.assistantUserId], - references: [assistantUsersTable.id], + assistantSemester: one(assistantSemestersTable, { + fields: [ + schoolSemesterAssistantsTable.semesterId, + schoolSemesterAssistantsTable.assistantUserId, + ], + references: [ + assistantSemestersTable.semesterId, + assistantSemestersTable.assistantId, + ], }), }), ); From 1b07836ffbcd630f1008d54bc87142b5adb9f7f1 Mon Sep 17 00:00:00 2001 From: Tobias Hegge Date: Thu, 12 Feb 2026 17:49:45 +0100 Subject: [PATCH 11/11] typo: userId -> assistantUserId --- db/tables/school-semester-assistant.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/tables/school-semester-assistant.ts b/db/tables/school-semester-assistant.ts index a9a7eff..43ea56e 100644 --- a/db/tables/school-semester-assistant.ts +++ b/db/tables/school-semester-assistant.ts @@ -13,7 +13,7 @@ export const schoolSemesterAssistantsTable = mainSchema.table( semesterId: integer("semesterId") .references(() => assistantSemestersTable.semesterId) .notNull(), - assistantUserId: integer("userId") + assistantUserId: integer("assistantUserId") .references(() => assistantSemestersTable.assistantId) .notNull(), },