Skip to content

Commit 3d814b0

Browse files
Mt/scrum-57-child-133-update-timetable-endpoints-for-favorites (#68)
1 parent 8479c79 commit 3d814b0

File tree

1 file changed

+23
-36
lines changed

1 file changed

+23
-36
lines changed

course-matrix/backend/src/controllers/timetablesController.ts

Lines changed: 23 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,31 @@ export default {
1818
const user_id = (req as any).user.id;
1919

2020
//Retrieve timetable title
21-
const { timetable_title, semester } = req.body;
22-
if (!timetable_title) {
23-
return res.status(400).json({ error: "timetable title is required" });
24-
}
25-
26-
if (!semester) {
21+
const { timetable_title, semester, favorite = false } = req.body;
22+
if (!timetable_title || !semester) {
2723
return res
2824
.status(400)
29-
.json({ error: "timetable semester is required" });
25+
.json({ error: "timetable title and semester are required" });
3026
}
3127

3228
//Create query to insert the user_id and timetable_title into the db
3329
let insertTimetable = supabase
3430
.schema("timetable")
3531
.from("timetables")
36-
.insert([{ user_id, timetable_title, semester }])
37-
.select();
32+
.insert([
33+
{
34+
user_id,
35+
timetable_title,
36+
semester,
37+
favorite,
38+
},
39+
])
40+
.select()
41+
.single();
3842

3943
const { data: timetableData, error: timetableError } =
4044
await insertTimetable;
45+
4146
if (timetableError) {
4247
return res.status(400).json({ error: timetableError.message });
4348
}
@@ -91,11 +96,11 @@ export default {
9196
const { id } = req.params;
9297

9398
//Retrieve timetable title
94-
const { timetable_title, semester } = req.body;
95-
if (!timetable_title && !semester) {
99+
const { timetable_title, semester, favorite } = req.body;
100+
if (!timetable_title && !semester && favorite === undefined) {
96101
return res.status(400).json({
97102
error:
98-
"New timetable title or semester is required when updating a timetable",
103+
"New timetable title or semester or updated favorite status is required when updating a timetable",
99104
});
100105
}
101106

@@ -112,26 +117,15 @@ export default {
112117
.eq("user_id", user_id)
113118
.maybeSingle();
114119

115-
const timetable_user_id = timetableUserData?.user_id;
116-
117-
if (timetableUserError)
118-
return res.status(400).json({ error: timetableUserError.message });
119-
120-
//Validate timetable validity:
121-
if (!timetableUserData || timetableUserData.length === 0) {
122-
return res.status(404).json({ error: "Calendar id not found" });
123-
}
124-
125-
//Validate user access
126-
if (user_id !== timetable_user_id) {
120+
if (timetableUserError || !timetableUserData)
127121
return res
128-
.status(401)
129-
.json({ error: "Unauthorized access to timetable events" });
130-
}
122+
.status(400)
123+
.json({ error: "Timetable not found or unauthorized" });
131124

132125
let updateData: any = {};
133126
if (timetable_title) updateData.timetable_title = timetable_title;
134127
if (semester) updateData.semester = semester;
128+
if (favorite !== undefined) updateData.favorite = favorite;
135129

136130
//Update timetable title, for authenticated user only
137131
let updateTimetableQuery = supabase
@@ -140,7 +134,8 @@ export default {
140134
.update(updateData)
141135
.eq("id", id)
142136
.eq("user_id", user_id)
143-
.select();
137+
.select()
138+
.single();
144139

145140
const { data: timetableData, error: timetableError } =
146141
await updateTimetableQuery;
@@ -180,7 +175,6 @@ export default {
180175
.eq("id", id)
181176
.eq("user_id", user_id)
182177
.maybeSingle();
183-
const timetable_user_id = timetableUserData?.user_id;
184178

185179
if (timetableUserError)
186180
return res.status(400).json({ error: timetableUserError.message });
@@ -190,13 +184,6 @@ export default {
190184
return res.status(404).json({ error: "Calendar id not found" });
191185
}
192186

193-
//Validate user access
194-
if (user_id !== timetable_user_id) {
195-
return res
196-
.status(401)
197-
.json({ error: "Unauthorized access to timetable events" });
198-
}
199-
200187
// Delete only if the timetable belongs to the authenticated user
201188
let deleteTimetableQuery = supabase
202189
.schema("timetable")

0 commit comments

Comments
 (0)