@@ -48,18 +48,45 @@ func Courses(c *fiber.Ctx) error {
4848
4949// Course function retrieves an indiviudal course from its id
5050func 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