Skip to content

Commit bd7a495

Browse files
committed
updated course api to handler all courses retrival
1 parent 9ae0b0b commit bd7a495

File tree

1 file changed

+59
-32
lines changed

1 file changed

+59
-32
lines changed

backend/internal/handlers/courses.go

Lines changed: 59 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,45 @@ func Courses(c *fiber.Ctx) error {
4848

4949
// Course function retrieves an indiviudal course from its id
5050
func Course(c *fiber.Ctx) error {
51-
course_id := c.Params("course_id")
51+
courseID := c.Params("course_id")
5252

53+
var courses []entity.Course
5354
var course entity.Course
54-
// Check if the course exists
55-
if err := database.DB.Preload("Students").Preload("Modules").Preload("Modules.Content").Preload("Tags").Where("id = ?", course_id).First(&course).Error; err != nil {
56-
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Course not found"})
57-
}
5855

59-
return c.JSON(fiber.Map{
60-
"message": "Course successfully retrieved",
61-
"course": course,
62-
})
56+
if courseID != "" {
57+
// Check if the specific course exists
58+
if err := database.DB.
59+
Preload("Students").
60+
Preload("Modules").
61+
Preload("Modules.Content").
62+
Preload("Tags").
63+
Where("id = ?", courseID).
64+
First(&course).Error; err != nil {
65+
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Course not found"})
66+
}
67+
68+
// Return the specific course
69+
return c.JSON(fiber.Map{
70+
"message": "Course successfully retrieved",
71+
"course": course,
72+
})
73+
} else {
74+
// Load all courses
75+
if err := database.DB.
76+
Preload("Students").
77+
Preload("Modules").
78+
Preload("Modules.Content").
79+
Preload("Tags").
80+
Find(&courses).Error; err != nil {
81+
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Could not load courses"})
82+
}
83+
84+
// Return all courses
85+
return c.JSON(fiber.Map{
86+
"message": "All courses successfully retrieved",
87+
"courses": courses,
88+
})
89+
}
6390
}
6491

6592
// Modules function retrieves the modules of a course
@@ -265,7 +292,7 @@ func CreateContent(c *fiber.Ctx) error {
265292
if module.Course.CreatorID != creator_id {
266293
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "User is not the course creator"})
267294
}
268-
295+
269296
// Create content database entry
270297
content := entity.Content{
271298
Title: title,
@@ -306,56 +333,56 @@ func EditContent(c *fiber.Ctx) error {
306333
if module.Course.CreatorID != creator_id {
307334
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "User is not the course creator"})
308335
}
309-
336+
310337
title := c.FormValue("title")
311338
if title != "" {
312-
if err := database.DB.Model(&content).Update("title", title).Error; err != nil{
339+
if err := database.DB.Model(&content).Update("title", title).Error; err != nil {
313340
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": err.Error()})
314341
}
315342
}
316343

317344
body := c.FormValue("body")
318345
if body != "" {
319-
if err := database.DB.Model(&content).Update("body", body).Error; err != nil{
346+
if err := database.DB.Model(&content).Update("body", body).Error; err != nil {
320347
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": err.Error()})
321348
}
322349
}
323-
324-
file, err := c.FormFile("file");
350+
351+
file, err := c.FormFile("file")
325352
if err != nil {
326-
if err.Error() != "there is no uploaded file associated with the given key"{
353+
if err.Error() != "there is no uploaded file associated with the given key" {
327354
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid file"})
328355
}
329356
}
330357

331358
if file != nil {
332-
var fileExtension = file.Filename[strings.LastIndex(file.Filename, "."):]
359+
var fileExtension = file.Filename[strings.LastIndex(file.Filename, "."):]
333360

334-
if err := os.MkdirAll(fmt.Sprintf("./content/%d/", module.Course.ID), 0777); err != nil{
361+
if err := os.MkdirAll(fmt.Sprintf("./content/%d/", module.Course.ID), 0777); err != nil {
335362
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": err.Error()})
336363
}
337-
338-
path := fmt.Sprintf("/%d/%s", module.Course.ID, strconv.FormatUint(uint64(content.ID), 10) + fileExtension)
364+
365+
path := fmt.Sprintf("/%d/%s", module.Course.ID, strconv.FormatUint(uint64(content.ID), 10)+fileExtension)
339366

340367
//Remove previous attachment if there is one
341-
if _, err := os.Stat("./content"+path); os.IsExist(err){
342-
if err := os.Remove("./content"+path); err != nil{
368+
if _, err := os.Stat("./content" + path); os.IsExist(err) {
369+
if err := os.Remove("./content" + path); err != nil {
343370
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": err.Error()})
344371
}
345372
}
346-
347-
if err := c.SaveFile(file, "./content"+path); err != nil{
373+
374+
if err := c.SaveFile(file, "./content"+path); err != nil {
348375
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": err.Error()})
349376
}
350-
377+
351378
// Add the path
352-
if err := database.DB.Model(&content).Update("path", path).Error; err != nil{
379+
if err := database.DB.Model(&content).Update("path", path).Error; err != nil {
353380
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": err.Error()})
354381
}
355382

356383
// Add the type
357384
filetype := file.Header.Get("Content-Type")
358-
if err := database.DB.Model(&content).Update("type", filetype).Error; err != nil{
385+
if err := database.DB.Model(&content).Update("type", filetype).Error; err != nil {
359386
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": err.Error()})
360387
}
361388
}
@@ -388,19 +415,19 @@ func DeleteFile(c *fiber.Ctx) error {
388415
if module.Course.CreatorID != creator_id {
389416
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "User is not the course creator"})
390417
}
391-
418+
392419
//Delete file
393-
if _, err := os.Stat("./content"+content.Path); os.IsExist(err){
394-
if err := os.Remove("./content"+content.Path); err != nil{
420+
if _, err := os.Stat("./content" + content.Path); os.IsExist(err) {
421+
if err := os.Remove("./content" + content.Path); err != nil {
395422
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": err.Error()})
396423
}
397424
}
398425

399426
//Update database entry
400-
if err := database.DB.Model(&content).Update("path", "").Error; err != nil{
427+
if err := database.DB.Model(&content).Update("path", "").Error; err != nil {
401428
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": err.Error()})
402429
}
403-
430+
404431
return c.JSON(fiber.Map{
405432
"message": "Successfully deleted file",
406433
})

0 commit comments

Comments
 (0)