Skip to content

Commit 0d86d5e

Browse files
committed
✨ Create ContestTaskPair table (#2627)
1 parent 07586d6 commit 0d86d5e

File tree

3 files changed

+52
-13
lines changed

3 files changed

+52
-13
lines changed

prisma/ERD.md

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@ OTHERS OTHERS
126126
}
127127
128128
129+
"contesttaskpair" {
130+
String id "🗝️"
131+
String contestId
132+
String taskTableIndex
133+
String taskId
134+
DateTime createdAt
135+
DateTime updatedAt
136+
}
137+
138+
129139
"tag" {
130140
String id "🗝️"
131141
Boolean is_published
@@ -195,28 +205,27 @@ OTHERS OTHERS
195205
}
196206
197207
"user" o|--|| "Roles" : "enum:role"
198-
"user" o{--}o "session" : "auth_session"
199-
"user" o{--}o "key" : "key"
200-
"user" o{--}o "taskanswer" : "taskAnswer"
201-
"user" o{--}o "workbook" : "workBooks"
208+
"user" o{--}o "session" : ""
209+
"user" o{--}o "key" : ""
210+
"user" o{--}o "taskanswer" : ""
211+
"user" o{--}o "workbook" : ""
202212
"session" o|--|| "user" : "user"
203213
"key" o|--|| "user" : "user"
204214
"task" o|--|| "ContestType" : "enum:contest_type"
205215
"task" o|--|| "TaskGrade" : "enum:grade"
206216
"task" o|--|| "AtcoderProblemsDifficulty" : "enum:atcoder_problems_difficulty"
207-
"task" o{--}o "tasktag" : "tags"
208-
"task" o{--}o "taskanswer" : "task_answers"
209-
"task" o{--}o "workbooktask" : "workBookTasks"
210-
"tag" o{--}o "tasktag" : "tasks"
217+
"task" o{--}o "tasktag" : ""
218+
"task" o{--}o "taskanswer" : ""
219+
"task" o{--}o "workbooktask" : ""
220+
"tag" o{--}o "tasktag" : ""
211221
"tasktag" o|--|o "task" : "task"
212222
"tasktag" o|--|o "tag" : "tag"
213223
"taskanswer" o|--|o "task" : "task"
214224
"taskanswer" o|--|o "user" : "user"
215225
"taskanswer" o|--|o "submissionstatus" : "status"
216-
"submissionstatus" o{--}o "taskanswer" : "task_answer"
217226
"workbook" o|--|| "WorkBookType" : "enum:workBookType"
218227
"workbook" o|--|| "user" : "user"
219-
"workbook" o{--}o "workbooktask" : "workBookTasks"
228+
"workbook" o{--}o "workbooktask" : ""
220229
"workbooktask" o|--|| "workbook" : "workBook"
221230
"workbooktask" o|--|| "task" : "task"
222231
```
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
-- CreateTable
2+
CREATE TABLE "public"."contesttaskpair" (
3+
"id" TEXT NOT NULL,
4+
"contestId" TEXT NOT NULL,
5+
"taskTableIndex" TEXT NOT NULL,
6+
"taskId" TEXT NOT NULL,
7+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
8+
"updatedAt" TIMESTAMP(3) NOT NULL,
9+
10+
CONSTRAINT "contesttaskpair_pkey" PRIMARY KEY ("id")
11+
);
12+
13+
-- CreateIndex
14+
CREATE INDEX "contesttaskpair_contestId_idx" ON "public"."contesttaskpair"("contestId");
15+
16+
-- CreateIndex
17+
CREATE UNIQUE INDEX "contesttaskpair_contestId_taskId_key" ON "public"."contesttaskpair"("contestId", "taskId");

prisma/schema.prisma

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
// https://www.prisma.io/docs/concepts/components/prisma-schema/generators
66
// https://www.prisma.io/docs/orm/prisma-client/deployment/edge/deploy-to-vercel
77
generator client {
8-
provider = "prisma-client-js"
9-
binaryTargets = ["native", "rhel-openssl-3.0.x"]
10-
previewFeatures = ["driverAdapters"]
8+
provider = "prisma-client-js"
9+
binaryTargets = ["native", "rhel-openssl-3.0.x"]
1110
}
1211

1312
// See:
@@ -109,6 +108,20 @@ model Task {
109108
@@map("task")
110109
}
111110

111+
// Handling cases where the same problem is used in different contests.
112+
model ContestTaskPair {
113+
id String @id @default(uuid())
114+
contestId String
115+
taskTableIndex String
116+
taskId String
117+
createdAt DateTime @default(now())
118+
updatedAt DateTime @updatedAt
119+
120+
@@unique([contestId, taskId]) // Prevent duplicate pairs of (contestId, taskId)
121+
@@index([contestId]) // Add index on contestId to speed up queries filtering by contestId
122+
@@map("contesttaskpair")
123+
}
124+
112125
model Tag {
113126
id String @id @unique
114127
is_published Boolean @default(false)

0 commit comments

Comments
 (0)