Skip to content
This repository was archived by the owner on Jul 2, 2022. It is now read-only.

Commit 7f91eac

Browse files
author
Tischa
committed
Create migration seed
1 parent 5e81425 commit 7f91eac

File tree

4 files changed

+305
-4
lines changed

4 files changed

+305
-4
lines changed

server/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
2121
"test:e2e": "jest --config ./test/jest-e2e.json",
2222
"prisma:generate": "npx prisma generate",
23-
"prisma:migrate": "npx prisma migrate dev"
23+
"prisma:migrate": "npx prisma migrate dev",
24+
"ts-node": "ts-node --compiler-options \"{\\\"module\\\":\\\"commonjs\\\"}\"",
25+
"seed": "npx prisma db seed --preview-feature"
2426
},
2527
"dependencies": {
2628
"@nestjs/cli": "^7.6.0",
@@ -49,6 +51,7 @@
4951
"eslint": "^7.22.0",
5052
"eslint-config-prettier": "^8.1.0",
5153
"eslint-plugin-prettier": "^3.3.1",
54+
"faker": "^5.5.3",
5255
"jest": "^26.6.3",
5356
"prettier": "^2.2.1",
5457
"prisma": "^2.26.0",
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
-- CreateEnum
2+
CREATE TYPE "Role" AS ENUM ('USER', 'COACH', 'ADMIN');
3+
4+
-- CreateEnum
5+
CREATE TYPE "Status" AS ENUM ('YES', 'MAYBE', 'NO');
6+
7+
-- CreateTable
8+
CREATE TABLE "User" (
9+
"id" SERIAL NOT NULL,
10+
"uuid" TEXT NOT NULL,
11+
"email" TEXT NOT NULL,
12+
"firstname" TEXT NOT NULL,
13+
"lastname" TEXT NOT NULL,
14+
"imageUrl" TEXT,
15+
"role" "Role" NOT NULL DEFAULT E'USER',
16+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
17+
"updatedAt" TIMESTAMP(3) NOT NULL,
18+
19+
PRIMARY KEY ("id")
20+
);
21+
22+
-- CreateTable
23+
CREATE TABLE "Project" (
24+
"id" SERIAL NOT NULL,
25+
"uuid" TEXT NOT NULL,
26+
"name" TEXT NOT NULL,
27+
"description" TEXT,
28+
"client" TEXT,
29+
"templateUrl" TEXT,
30+
"leadCoachId" INTEGER,
31+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
32+
"updatedAt" TIMESTAMP(3) NOT NULL,
33+
34+
PRIMARY KEY ("id")
35+
);
36+
37+
-- CreateTable
38+
CREATE TABLE "UsersOnProjects" (
39+
"userId" INTEGER NOT NULL,
40+
"projectId" INTEGER NOT NULL,
41+
"assignedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
42+
43+
PRIMARY KEY ("userId","projectId")
44+
);
45+
46+
-- CreateTable
47+
CREATE TABLE "Applicant" (
48+
"id" SERIAL NOT NULL,
49+
"uuid" TEXT NOT NULL,
50+
"email" TEXT NOT NULL,
51+
"firstname" TEXT NOT NULL,
52+
"lastname" TEXT NOT NULL,
53+
"callname" TEXT,
54+
"gender" TEXT NOT NULL,
55+
"nationality" TEXT NOT NULL,
56+
"addressId" INTEGER NOT NULL,
57+
"phone" TEXT NOT NULL,
58+
"isAlumni" BOOLEAN NOT NULL,
59+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
60+
"updatedAt" TIMESTAMP(3) NOT NULL,
61+
62+
PRIMARY KEY ("id")
63+
);
64+
65+
-- CreateTable
66+
CREATE TABLE "ApplicantsOnProjects" (
67+
"applicantId" INTEGER NOT NULL,
68+
"projectId" INTEGER NOT NULL,
69+
"assignedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
70+
71+
PRIMARY KEY ("applicantId","projectId")
72+
);
73+
74+
-- CreateTable
75+
CREATE TABLE "Address" (
76+
"id" SERIAL NOT NULL,
77+
"addressLine" TEXT NOT NULL,
78+
"postalCode" TEXT NOT NULL,
79+
"city" TEXT NOT NULL,
80+
"state" TEXT NOT NULL,
81+
"country" TEXT NOT NULL,
82+
83+
PRIMARY KEY ("id")
84+
);
85+
86+
-- CreateTable
87+
CREATE TABLE "Suggestion" (
88+
"id" SERIAL NOT NULL,
89+
"status" "Status" NOT NULL,
90+
"comment" TEXT NOT NULL,
91+
"applicantId" INTEGER NOT NULL,
92+
"suggesterId" INTEGER NOT NULL,
93+
94+
PRIMARY KEY ("id")
95+
);
96+
97+
-- CreateTable
98+
CREATE TABLE "Profile" (
99+
"id" SERIAL NOT NULL,
100+
"name" TEXT NOT NULL,
101+
"image_url" TEXT,
102+
103+
PRIMARY KEY ("id")
104+
);
105+
106+
-- CreateTable
107+
CREATE TABLE "ApplicantProfile" (
108+
"applicantId" INTEGER NOT NULL,
109+
"profileId" INTEGER NOT NULL,
110+
111+
PRIMARY KEY ("applicantId","profileId")
112+
);
113+
114+
-- CreateTable
115+
CREATE TABLE "ProjectProfile" (
116+
"projectId" INTEGER NOT NULL,
117+
"profileId" INTEGER NOT NULL,
118+
119+
PRIMARY KEY ("projectId","profileId")
120+
);
121+
122+
-- CreateTable
123+
CREATE TABLE "Skill" (
124+
"id" SERIAL NOT NULL,
125+
"name" TEXT NOT NULL,
126+
127+
PRIMARY KEY ("id")
128+
);
129+
130+
-- CreateTable
131+
CREATE TABLE "SkillLevel" (
132+
"id" SERIAL NOT NULL,
133+
"name" TEXT NOT NULL,
134+
135+
PRIMARY KEY ("id")
136+
);
137+
138+
-- CreateTable
139+
CREATE TABLE "ApplicantSkill" (
140+
"applicantId" INTEGER NOT NULL,
141+
"skillId" INTEGER NOT NULL,
142+
"levelId" INTEGER NOT NULL,
143+
144+
PRIMARY KEY ("applicantId","skillId")
145+
);
146+
147+
-- CreateTable
148+
CREATE TABLE "ProjectSkill" (
149+
"projectId" INTEGER NOT NULL,
150+
"skillId" INTEGER NOT NULL,
151+
152+
PRIMARY KEY ("projectId","skillId")
153+
);
154+
155+
-- CreateTable
156+
CREATE TABLE "Answer" (
157+
"id" SERIAL NOT NULL,
158+
"text" TEXT NOT NULL,
159+
"questionId" INTEGER NOT NULL,
160+
"applicantId" INTEGER NOT NULL,
161+
162+
PRIMARY KEY ("id")
163+
);
164+
165+
-- CreateTable
166+
CREATE TABLE "Question" (
167+
"id" SERIAL NOT NULL,
168+
"reference" TEXT NOT NULL,
169+
"text" TEXT NOT NULL,
170+
"type" TEXT NOT NULL,
171+
172+
PRIMARY KEY ("id")
173+
);
174+
175+
-- CreateIndex
176+
CREATE UNIQUE INDEX "User.uuid_unique" ON "User"("uuid");
177+
178+
-- CreateIndex
179+
CREATE UNIQUE INDEX "User.email_unique" ON "User"("email");
180+
181+
-- CreateIndex
182+
CREATE UNIQUE INDEX "Project.uuid_unique" ON "Project"("uuid");
183+
184+
-- CreateIndex
185+
CREATE UNIQUE INDEX "Applicant.uuid_unique" ON "Applicant"("uuid");
186+
187+
-- CreateIndex
188+
CREATE UNIQUE INDEX "Applicant.email_unique" ON "Applicant"("email");
189+
190+
-- CreateIndex
191+
CREATE UNIQUE INDEX "Applicant.addressId_unique" ON "Applicant"("addressId");
192+
193+
-- CreateIndex
194+
CREATE UNIQUE INDEX "Skill.name_unique" ON "Skill"("name");
195+
196+
-- CreateIndex
197+
CREATE UNIQUE INDEX "SkillLevel.name_unique" ON "SkillLevel"("name");
198+
199+
-- AddForeignKey
200+
ALTER TABLE "Project" ADD FOREIGN KEY ("leadCoachId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
201+
202+
-- AddForeignKey
203+
ALTER TABLE "UsersOnProjects" ADD FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
204+
205+
-- AddForeignKey
206+
ALTER TABLE "UsersOnProjects" ADD FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
207+
208+
-- AddForeignKey
209+
ALTER TABLE "Applicant" ADD FOREIGN KEY ("addressId") REFERENCES "Address"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
210+
211+
-- AddForeignKey
212+
ALTER TABLE "ApplicantsOnProjects" ADD FOREIGN KEY ("applicantId") REFERENCES "Applicant"("id") ON DELETE CASCADE ON UPDATE CASCADE;
213+
214+
-- AddForeignKey
215+
ALTER TABLE "ApplicantsOnProjects" ADD FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
216+
217+
-- AddForeignKey
218+
ALTER TABLE "Suggestion" ADD FOREIGN KEY ("applicantId") REFERENCES "Applicant"("id") ON DELETE CASCADE ON UPDATE CASCADE;
219+
220+
-- AddForeignKey
221+
ALTER TABLE "Suggestion" ADD FOREIGN KEY ("suggesterId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
222+
223+
-- AddForeignKey
224+
ALTER TABLE "ApplicantProfile" ADD FOREIGN KEY ("applicantId") REFERENCES "Applicant"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
225+
226+
-- AddForeignKey
227+
ALTER TABLE "ApplicantProfile" ADD FOREIGN KEY ("profileId") REFERENCES "Profile"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
228+
229+
-- AddForeignKey
230+
ALTER TABLE "ProjectProfile" ADD FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
231+
232+
-- AddForeignKey
233+
ALTER TABLE "ProjectProfile" ADD FOREIGN KEY ("profileId") REFERENCES "Profile"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
234+
235+
-- AddForeignKey
236+
ALTER TABLE "ApplicantSkill" ADD FOREIGN KEY ("applicantId") REFERENCES "Applicant"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
237+
238+
-- AddForeignKey
239+
ALTER TABLE "ApplicantSkill" ADD FOREIGN KEY ("skillId") REFERENCES "Skill"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
240+
241+
-- AddForeignKey
242+
ALTER TABLE "ApplicantSkill" ADD FOREIGN KEY ("levelId") REFERENCES "SkillLevel"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
243+
244+
-- AddForeignKey
245+
ALTER TABLE "ProjectSkill" ADD FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
246+
247+
-- AddForeignKey
248+
ALTER TABLE "ProjectSkill" ADD FOREIGN KEY ("skillId") REFERENCES "Skill"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
249+
250+
-- AddForeignKey
251+
ALTER TABLE "Answer" ADD FOREIGN KEY ("questionId") REFERENCES "Question"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
252+
253+
-- AddForeignKey
254+
ALTER TABLE "Answer" ADD FOREIGN KEY ("applicantId") REFERENCES "Applicant"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

server/prisma/schema.prisma

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ datasource db {
66

77
generator client {
88
provider = "prisma-client-js"
9-
previewFeatures = ["referentialActions"]
9+
previewFeatures = ["referentialActions", "selectRelationCount"]
1010
}
1111

1212
enum Role {

server/prisma/seed.ts

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,51 @@
1-
import { PrismaClient } from '@prisma/client';
1+
import { PrismaClient, Role } from '@prisma/client';
2+
import * as faker from 'faker';
3+
24
const prisma = new PrismaClient();
35

4-
async function main() {}
6+
async function main() {
7+
console.log('seeding...');
8+
9+
for (let i = 0; i < 10; i++) {
10+
await prisma.user.upsert({
11+
where: { email: faker.internet.email() },
12+
update: {},
13+
create: {
14+
uuid: faker.datatype.uuid(),
15+
email: faker.internet.email(),
16+
firstname: faker.name.firstName(),
17+
lastname: faker.name.lastName(),
18+
role: Math.random() < 0.5 ? Role.COACH : Role.USER
19+
}
20+
});
21+
22+
const genders = ['male', 'female', 'nonbinary'];
23+
24+
await prisma.applicant.upsert({
25+
where: { email: faker.internet.email() },
26+
update: {},
27+
create: {
28+
uuid: faker.datatype.uuid(),
29+
email: faker.internet.email(),
30+
firstname: faker.name.firstName(),
31+
lastname: faker.name.lastName(),
32+
gender: genders[Math.floor(Math.random() * genders.length)],
33+
nationality: 'Belgian',
34+
phone: faker.phone.phoneNumber(),
35+
address: {
36+
create: {
37+
addressLine: faker.address.streetAddress(),
38+
city: faker.address.cityName(),
39+
postalCode: faker.address.zipCode(),
40+
state: faker.address.state(),
41+
country: faker.address.country()
42+
}
43+
},
44+
isAlumni: Math.random() < 0.5
45+
}
46+
});
47+
}
48+
}
549

650
main()
751
.catch((e) => {

0 commit comments

Comments
 (0)