refactor(schema): add "OrganizationMembership" model + update "Organization" and "User" to have relations to it@@ -0,0 +1,28 @@
+-- CreateEnum
+CREATE TYPE "OrganizationKind" AS ENUM ('PERSONAL', 'COMPANY');
+
+-- CreateEnum
+CREATE TYPE "OrganizationRole" AS ENUM ('REVIEWER', 'COMITTER', 'ADMIN', 'OWNER');
+
+-- AlterTable
+ALTER TABLE "Organization" ADD COLUMN "kind" "OrganizationKind" NOT NULL DEFAULT E'PERSONAL';
+
+-- CreateTable
+CREATE TABLE "OrganizationMembership" (
+ "id" TEXT NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "expiresAt" TIMESTAMP(3),
+ "revokedAt" TIMESTAMP(3),
+ "organizationId" TEXT NOT NULL,
+ "userId" TEXT NOT NULL,
+ "role" "OrganizationRole" NOT NULL DEFAULT E'REVIEWER',
+
+ CONSTRAINT "OrganizationMembership_pkey" PRIMARY KEY ("id")
+);
+
+-- AddForeignKey
+ALTER TABLE "OrganizationMembership" ADD CONSTRAINT "OrganizationMembership_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "OrganizationMembership" ADD CONSTRAINT "OrganizationMembership_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
@@ -17,6 +17,18 @@ enum GlobalRole {
SUPER_ADMIN
}
+enum OrganizationKind {
+ PERSONAL
+ COMPANY
+}
+
+enum OrganizationRole {
+ REVIEWER
+ COMITTER
+ ADMIN
+ OWNER
+}
+
enum ResourceVisibility {
PUBLIC
UNLISTED
@@ -26,38 +38,57 @@ enum ResourceVisibility {
// models
model Organization {
- id String @id @default(cuid())
- slug String @unique
+ id String @id @default(cuid())
+ slug String @unique
+ kind OrganizationKind @default(PERSONAL)
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
avatarUri String?
displayName String?
- visibility ResourceVisibility @default(PRIVATE)
- websiteUrl String?
+ visibility ResourceVisibility @default(PRIVATE)
+ websiteUrl String?
- repositories Repository[] @relation("ManyRepositoriesToOneOrganization")
+ memberships OrganizationMembership[] @relation("OneOrganizationMembershipToOneOrganization")
+ repositories Repository[] @relation("ManyRepositoriesToOneOrganization")
- owner User @relation("ManyOwnedOrganizationsToOneOwnerUser", fields: [ownerId], references: [id])
+ owner User @relation("ManyOwnedOrganizationsToOneOwnerUser", fields: [ownerId], references: [id])
ownerId String
}
-model Repository {
- id String @id @default(cuid())
- slug String @unique
+model OrganizationMembership {
+ id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
+ expiresAt DateTime?
+ revokedAt DateTime?
- avatarUri String?
- displayName String?
- keywords String[]
+ organization Organization @relation("OneOrganizationMembershipToOneOrganization", fields: [organizationId], references: [id])
+ organizationId String
+
+ user User @relation("OneOrganizationMembershipToOneUser", fields: [userId], references: [id])
+ userId String
+
+ role OrganizationRole @default(REVIEWER)
+}
+
+model Repository {
+ id String @id @default(cuid())
+ slug String @unique
+
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ avatarUri String?
+ displayName String?
+ keywords String[]
shortDescription String?
- visibility ResourceVisibility @default(PRIVATE)
- websiteUrl String?
+ visibility ResourceVisibility @default(PRIVATE)
+ websiteUrl String?
- organization Organization @relation("ManyRepositoriesToOneOrganization", fields: [organizationId], references: [id])
+ organization Organization @relation("ManyRepositoriesToOneOrganization", fields: [organizationId], references: [id])
organizationId String
}
@@ -81,8 +112,8 @@ model User {
id String @id @default(cuid())
role GlobalRole @default(CUSTOMER)
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
username String @unique
email String @unique
@@ -91,5 +122,6 @@ model User {
displayName String?
avatarUri String?
- organizations Organization[] @relation("ManyOwnedOrganizationsToOneOwnerUser")
+ organizations Organization[] @relation("ManyOwnedOrganizationsToOneOwnerUser")
+ organizationMemberships OrganizationMembership[] @relation("OneOrganizationMembershipToOneUser")
}