Skip to content

Commit f38b624

Browse files
authored
Merge pull request #11 from sandboxnu/dev-db
feat: set up dev database
2 parents bdf8579 + 55b0e10 commit f38b624

4 files changed

Lines changed: 288 additions & 1 deletion

File tree

docker-compose.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
services:
2+
db:
3+
image: postgres:17
4+
container_name: sarge_dev_db
5+
restart: unless-stopped
6+
environment:
7+
POSTGRES_USER: ${DB_USER}
8+
POSTGRES_PASSWORD: ${DB_PASSWORD}
9+
POSTGRES_DB: ${DB_NAME}
10+
ports:
11+
- '5432:5432'
12+
volumes:
13+
- postgres_data:/var/lib/postgresql/data
14+
15+
volumes:
16+
postgres_data:

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
"version": "0.1.0",
44
"private": true,
55
"scripts": {
6-
"dev": "next dev",
6+
"dev:db": "docker-compose up -d",
7+
"dev:migrate": "npx prisma migrate dev",
8+
"dev:start": "next dev",
9+
"dev": "npm run dev:db && npm run dev:migrate && npm run dev:start",
710
"build": "next build",
811
"start": "next start",
912
"lint": "eslint . --max-warnings=0",
Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
-- CreateTable
2+
CREATE TABLE "public"."Organization" (
3+
"id" TEXT NOT NULL,
4+
"name" TEXT NOT NULL,
5+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
6+
"updatedAt" TIMESTAMP(3) NOT NULL,
7+
8+
CONSTRAINT "Organization_pkey" PRIMARY KEY ("id")
9+
);
10+
11+
-- CreateTable
12+
CREATE TABLE "public"."User" (
13+
"id" TEXT NOT NULL,
14+
"name" TEXT NOT NULL,
15+
"email" TEXT NOT NULL,
16+
"orgId" TEXT NOT NULL,
17+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
18+
"updatedAt" TIMESTAMP(3) NOT NULL,
19+
20+
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
21+
);
22+
23+
-- CreateTable
24+
CREATE TABLE "public"."Role" (
25+
"id" TEXT NOT NULL,
26+
"role" TEXT NOT NULL,
27+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
28+
"updatedAt" TIMESTAMP(3) NOT NULL,
29+
30+
CONSTRAINT "Role_pkey" PRIMARY KEY ("id")
31+
);
32+
33+
-- CreateTable
34+
CREATE TABLE "public"."UserRole" (
35+
"id" TEXT NOT NULL,
36+
"userId" TEXT NOT NULL,
37+
"roleId" TEXT NOT NULL,
38+
39+
CONSTRAINT "UserRole_pkey" PRIMARY KEY ("id")
40+
);
41+
42+
-- CreateTable
43+
CREATE TABLE "public"."Tag" (
44+
"id" TEXT NOT NULL,
45+
"tag" TEXT NOT NULL,
46+
47+
CONSTRAINT "Tag_pkey" PRIMARY KEY ("id")
48+
);
49+
50+
-- CreateTable
51+
CREATE TABLE "public"."Position" (
52+
"id" TEXT NOT NULL,
53+
"title" TEXT NOT NULL,
54+
"orgId" TEXT NOT NULL,
55+
"tags" TEXT[],
56+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
57+
"updatedAt" TIMESTAMP(3) NOT NULL,
58+
"createdBy" TEXT NOT NULL,
59+
60+
CONSTRAINT "Position_pkey" PRIMARY KEY ("id")
61+
);
62+
63+
-- CreateTable
64+
CREATE TABLE "public"."Candidate" (
65+
"id" TEXT NOT NULL,
66+
"name" TEXT NOT NULL,
67+
"email" TEXT NOT NULL,
68+
"orgId" TEXT NOT NULL,
69+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
70+
71+
CONSTRAINT "Candidate_pkey" PRIMARY KEY ("id")
72+
);
73+
74+
-- CreateTable
75+
CREATE TABLE "public"."CandidatePoolEntry" (
76+
"id" TEXT NOT NULL,
77+
"candidateId" TEXT NOT NULL,
78+
"positionId" TEXT NOT NULL,
79+
"status" TEXT NOT NULL,
80+
"tags" TEXT[],
81+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
82+
"updatedAt" TIMESTAMP(3) NOT NULL,
83+
84+
CONSTRAINT "CandidatePoolEntry_pkey" PRIMARY KEY ("id")
85+
);
86+
87+
-- CreateTable
88+
CREATE TABLE "public"."AssessmentTemplate" (
89+
"id" TEXT NOT NULL,
90+
"title" TEXT NOT NULL,
91+
"description" TEXT NOT NULL,
92+
"orgId" TEXT NOT NULL,
93+
94+
CONSTRAINT "AssessmentTemplate_pkey" PRIMARY KEY ("id")
95+
);
96+
97+
-- CreateTable
98+
CREATE TABLE "public"."TaskTemplate" (
99+
"id" TEXT NOT NULL,
100+
"title" TEXT NOT NULL,
101+
"content" VARCHAR(500) NOT NULL,
102+
"public_test_cases" JSONB NOT NULL,
103+
"private_test_cases" JSONB NOT NULL,
104+
"orgId" TEXT NOT NULL,
105+
106+
CONSTRAINT "TaskTemplate_pkey" PRIMARY KEY ("id")
107+
);
108+
109+
-- CreateTable
110+
CREATE TABLE "public"."Task" (
111+
"id" TEXT NOT NULL,
112+
"assessmentId" TEXT NOT NULL,
113+
"taskTemplateId" TEXT NOT NULL,
114+
"candidateCode" TEXT NOT NULL,
115+
"lastUpdated" TIMESTAMP(3) NOT NULL,
116+
117+
CONSTRAINT "Task_pkey" PRIMARY KEY ("id")
118+
);
119+
120+
-- CreateTable
121+
CREATE TABLE "public"."Assessment" (
122+
"id" TEXT NOT NULL,
123+
"candidateId" TEXT NOT NULL,
124+
"positionId" TEXT NOT NULL,
125+
"assessmentTemplateId" TEXT NOT NULL,
126+
"assignedAt" TIMESTAMP(3) NOT NULL,
127+
"isSubmitted" BOOLEAN NOT NULL,
128+
"uniqueLink" TEXT NOT NULL,
129+
130+
CONSTRAINT "Assessment_pkey" PRIMARY KEY ("id")
131+
);
132+
133+
-- CreateTable
134+
CREATE TABLE "public"."Review" (
135+
"id" TEXT NOT NULL,
136+
"assessmentId" TEXT NOT NULL,
137+
"reviewerId" TEXT NOT NULL,
138+
"rating" INTEGER NOT NULL,
139+
"content" TEXT NOT NULL,
140+
"reviewedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
141+
142+
CONSTRAINT "Review_pkey" PRIMARY KEY ("id")
143+
);
144+
145+
-- CreateTable
146+
CREATE TABLE "public"."Comment" (
147+
"id" TEXT NOT NULL,
148+
"taskId" TEXT NOT NULL,
149+
"content" TEXT NOT NULL,
150+
"reviewerId" TEXT NOT NULL,
151+
"reviewedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
152+
153+
CONSTRAINT "Comment_pkey" PRIMARY KEY ("id")
154+
);
155+
156+
-- CreateIndex
157+
CREATE UNIQUE INDEX "Organization_id_key" ON "public"."Organization"("id");
158+
159+
-- CreateIndex
160+
CREATE UNIQUE INDEX "User_id_key" ON "public"."User"("id");
161+
162+
-- CreateIndex
163+
CREATE UNIQUE INDEX "User_email_key" ON "public"."User"("email");
164+
165+
-- CreateIndex
166+
CREATE UNIQUE INDEX "Role_id_key" ON "public"."Role"("id");
167+
168+
-- CreateIndex
169+
CREATE UNIQUE INDEX "Role_role_key" ON "public"."Role"("role");
170+
171+
-- CreateIndex
172+
CREATE INDEX "UserRole_roleId_idx" ON "public"."UserRole"("roleId");
173+
174+
-- CreateIndex
175+
CREATE UNIQUE INDEX "UserRole_userId_key" ON "public"."UserRole"("userId");
176+
177+
-- CreateIndex
178+
CREATE UNIQUE INDEX "Tag_id_key" ON "public"."Tag"("id");
179+
180+
-- CreateIndex
181+
CREATE UNIQUE INDEX "Position_id_key" ON "public"."Position"("id");
182+
183+
-- CreateIndex
184+
CREATE UNIQUE INDEX "Candidate_id_key" ON "public"."Candidate"("id");
185+
186+
-- CreateIndex
187+
CREATE UNIQUE INDEX "Candidate_email_key" ON "public"."Candidate"("email");
188+
189+
-- CreateIndex
190+
CREATE UNIQUE INDEX "CandidatePoolEntry_id_key" ON "public"."CandidatePoolEntry"("id");
191+
192+
-- CreateIndex
193+
CREATE UNIQUE INDEX "CandidatePoolEntry_candidateId_positionId_key" ON "public"."CandidatePoolEntry"("candidateId", "positionId");
194+
195+
-- CreateIndex
196+
CREATE UNIQUE INDEX "AssessmentTemplate_id_key" ON "public"."AssessmentTemplate"("id");
197+
198+
-- CreateIndex
199+
CREATE UNIQUE INDEX "TaskTemplate_id_key" ON "public"."TaskTemplate"("id");
200+
201+
-- CreateIndex
202+
CREATE UNIQUE INDEX "Task_id_key" ON "public"."Task"("id");
203+
204+
-- CreateIndex
205+
CREATE UNIQUE INDEX "Assessment_id_key" ON "public"."Assessment"("id");
206+
207+
-- CreateIndex
208+
CREATE UNIQUE INDEX "Review_id_key" ON "public"."Review"("id");
209+
210+
-- CreateIndex
211+
CREATE UNIQUE INDEX "Comment_id_key" ON "public"."Comment"("id");
212+
213+
-- AddForeignKey
214+
ALTER TABLE "public"."User" ADD CONSTRAINT "User_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "public"."Organization"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
215+
216+
-- AddForeignKey
217+
ALTER TABLE "public"."UserRole" ADD CONSTRAINT "UserRole_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
218+
219+
-- AddForeignKey
220+
ALTER TABLE "public"."UserRole" ADD CONSTRAINT "UserRole_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "public"."Role"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
221+
222+
-- AddForeignKey
223+
ALTER TABLE "public"."Position" ADD CONSTRAINT "Position_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "public"."Organization"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
224+
225+
-- AddForeignKey
226+
ALTER TABLE "public"."Candidate" ADD CONSTRAINT "Candidate_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "public"."Organization"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
227+
228+
-- AddForeignKey
229+
ALTER TABLE "public"."CandidatePoolEntry" ADD CONSTRAINT "CandidatePoolEntry_candidateId_fkey" FOREIGN KEY ("candidateId") REFERENCES "public"."Candidate"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
230+
231+
-- AddForeignKey
232+
ALTER TABLE "public"."CandidatePoolEntry" ADD CONSTRAINT "CandidatePoolEntry_positionId_fkey" FOREIGN KEY ("positionId") REFERENCES "public"."Position"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
233+
234+
-- AddForeignKey
235+
ALTER TABLE "public"."AssessmentTemplate" ADD CONSTRAINT "AssessmentTemplate_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "public"."Organization"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
236+
237+
-- AddForeignKey
238+
ALTER TABLE "public"."TaskTemplate" ADD CONSTRAINT "TaskTemplate_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "public"."Organization"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
239+
240+
-- AddForeignKey
241+
ALTER TABLE "public"."Task" ADD CONSTRAINT "Task_assessmentId_fkey" FOREIGN KEY ("assessmentId") REFERENCES "public"."Assessment"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
242+
243+
-- AddForeignKey
244+
ALTER TABLE "public"."Task" ADD CONSTRAINT "Task_taskTemplateId_fkey" FOREIGN KEY ("taskTemplateId") REFERENCES "public"."TaskTemplate"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
245+
246+
-- AddForeignKey
247+
ALTER TABLE "public"."Assessment" ADD CONSTRAINT "Assessment_candidateId_fkey" FOREIGN KEY ("candidateId") REFERENCES "public"."Candidate"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
248+
249+
-- AddForeignKey
250+
ALTER TABLE "public"."Assessment" ADD CONSTRAINT "Assessment_positionId_fkey" FOREIGN KEY ("positionId") REFERENCES "public"."Position"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
251+
252+
-- AddForeignKey
253+
ALTER TABLE "public"."Assessment" ADD CONSTRAINT "Assessment_assessmentTemplateId_fkey" FOREIGN KEY ("assessmentTemplateId") REFERENCES "public"."AssessmentTemplate"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
254+
255+
-- AddForeignKey
256+
ALTER TABLE "public"."Review" ADD CONSTRAINT "Review_assessmentId_fkey" FOREIGN KEY ("assessmentId") REFERENCES "public"."Assessment"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
257+
258+
-- AddForeignKey
259+
ALTER TABLE "public"."Review" ADD CONSTRAINT "Review_reviewerId_fkey" FOREIGN KEY ("reviewerId") REFERENCES "public"."User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
260+
261+
-- AddForeignKey
262+
ALTER TABLE "public"."Comment" ADD CONSTRAINT "Comment_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "public"."Task"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
263+
264+
-- AddForeignKey
265+
ALTER TABLE "public"."Comment" ADD CONSTRAINT "Comment_reviewerId_fkey" FOREIGN KEY ("reviewerId") REFERENCES "public"."User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Please do not edit this file manually
2+
# It should be added in your version-control system (e.g., Git)
3+
provider = "postgresql"

0 commit comments

Comments
 (0)