Skip to content

Commit df5c3f5

Browse files
committed
feat: interview module migration w/ more constraints
1 parent 505ce2c commit df5c3f5

3 files changed

Lines changed: 102 additions & 7 deletions

File tree

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
-- Add migration script here
2+
CREATE TABLE availability (
3+
id SERIAL PRIMARY KEY,
4+
5+
user_id INT NOT NULL,
6+
role_id INT NOT NULL,
7+
campaign_id INT NOT NULL,
8+
9+
start_time TIMESTAMPTZ NOT NULL,
10+
end_time TIMESTAMPTZ NOT NULL,
11+
12+
CONSTRAINT fk_availability_user
13+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
14+
15+
CONSTRAINT fk_availability_role
16+
FOREIGN KEY (role_id) REFERENCES campaign_roles(id) ON DELETE RESTRICT,
17+
18+
CONSTRAINT fk_availability_campaign
19+
FOREIGN KEY (campaign_id) REFERENCES campaigns(id) ON DELETE CASCADE,
20+
21+
CONSTRAINT chk_availability_time
22+
CHECK (end_time > start_time),
23+
24+
CONSTRAINT unique_user_availability
25+
UNIQUE (user_id, campaign_id, start_time, end_time)
26+
);
27+
28+
CREATE TABLE interview_timeslots (
29+
id SERIAL PRIMARY KEY,
30+
31+
campaign_id INT NOT NULL,
32+
33+
start_time TIMESTAMPTZ NOT NULL,
34+
end_time TIMESTAMPTZ NOT NULL,
35+
36+
location TEXT,
37+
description TEXT,
38+
booked BOOLEAN NOT NULL DEFAULT FALSE,
39+
40+
CONSTRAINT fk_timeslot_campaign
41+
FOREIGN KEY (campaign_id) REFERENCES campaigns(id) ON DELETE CASCADE,
42+
43+
CONSTRAINT chk_timeslot_time
44+
CHECK (end_time > start_time)
45+
);
46+
47+
CREATE TABLE interview_timeslot_users (
48+
interview_timeslot_id INT NOT NULL,
49+
user_id INT NOT NULL,
50+
role_id INT NOT NULL,
51+
52+
interviewer BOOLEAN NOT NULL DEFAULT FALSE,
53+
54+
PRIMARY KEY (interview_timeslot_id, user_id),
55+
56+
CONSTRAINT fk_timeslot_user_timeslot
57+
FOREIGN KEY (interview_timeslot_id)
58+
REFERENCES interview_timeslots(id)
59+
ON DELETE CASCADE,
60+
61+
CONSTRAINT fk_timeslot_user_user
62+
FOREIGN KEY (user_id)
63+
REFERENCES users(id)
64+
ON DELETE CASCADE,
65+
66+
CONSTRAINT fk_timeslot_user_role
67+
FOREIGN KEY (role_id)
68+
REFERENCES campaign_roles(id)
69+
ON DELETE RESTRICT
70+
);
71+
72+
CREATE INDEX idx_availability_campaign
73+
ON availability(campaign_id);
74+
75+
CREATE INDEX idx_availability_user
76+
ON availability(user_id);
77+
78+
CREATE INDEX idx_timeslots_campaign
79+
ON interview_timeslots(campaign_id);
80+
81+
CREATE INDEX idx_timeslot_users_user
82+
ON interview_timeslot_users(user_id);

backend/setup-admin-db-dev.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ echo "Working directory: $working_dir"
1212
# IMPORTANT: Replace YOUR_GMAIL with your account gmail.
1313
# Run the database seeding script to set up the admin account.
1414
# Like e.g. cargo run -- --email peter@gmail.com. Replace YOUR_GMAIL with your account gmail.
15-
cargo run -- --email "vietthanh01202@gmail.com"
15+
cargo run -- --email "jaredlucasschulz@gmail.com"
1616

1717
echo "\nAdmin account set up successfully!\n"

frontend-nextjs/tsconfig.json

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
{
22
"compilerOptions": {
33
"target": "ES2017",
4-
"lib": ["dom", "dom.iterable", "esnext"],
4+
"lib": [
5+
"dom",
6+
"dom.iterable",
7+
"esnext"
8+
],
59
"allowJs": true,
610
"skipLibCheck": true,
711
"strict": true,
@@ -19,9 +23,15 @@
1923
}
2024
],
2125
"paths": {
22-
"@/*": ["./src/*"],
23-
"@assets/*": ["./assets/*"],
24-
"@components/*": ["./src/components/*"],
26+
"@/*": [
27+
"./src/*"
28+
],
29+
"@assets/*": [
30+
"./assets/*"
31+
],
32+
"@components/*": [
33+
"./src/components/*"
34+
]
2535
}
2636
},
2737
"include": [
@@ -30,7 +40,10 @@
3040
"**/*.tsx",
3141
".next/types/**/*.ts",
3242
".next/dev/types/**/*.ts",
33-
"**/*.mts"
43+
"**/*.mts",
44+
".next/dev/dev/types/**/*.ts"
3445
],
35-
"exclude": ["node_modules"]
46+
"exclude": [
47+
"node_modules"
48+
]
3649
}

0 commit comments

Comments
 (0)