diff --git a/packages/db/prisma/migrations/20250116233531_add_orgs_table/migration.sql b/packages/db/prisma/migrations/20250116233531_add_orgs_table/migration.sql new file mode 100644 index 00000000..871c0bfd --- /dev/null +++ b/packages/db/prisma/migrations/20250116233531_add_orgs_table/migration.sql @@ -0,0 +1,18 @@ +-- CreateTable +CREATE TABLE "Org" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "name" TEXT NOT NULL, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" DATETIME NOT NULL +); + +-- CreateTable +CREATE TABLE "UserToOrg" ( + "joinedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "orgId" INTEGER NOT NULL, + "userId" TEXT NOT NULL, + + PRIMARY KEY ("orgId", "userId"), + CONSTRAINT "UserToOrg_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Org" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "UserToOrg_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index 93b35d21..5872c999 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -42,14 +42,37 @@ model Repo { @@unique([external_id, external_codeHostUrl]) } +model Org { + id Int @id @default(autoincrement()) + name String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + members UserToOrg[] +} + +model UserToOrg { + joinedAt DateTime @default(now()) + + /// The linked organization + org Org @relation(fields: [orgId], references: [id], onDelete: Cascade) + orgId Int + + /// The linked user + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String + + @@id([orgId, userId]) +} + // @see : https://authjs.dev/concepts/database-models#user model User { - id String @id @default(cuid()) + id String @id @default(cuid()) name String? - email String? @unique + email String? @unique emailVerified DateTime? image String? accounts Account[] + orgs UserToOrg[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt