@@ -61,7 +61,7 @@ func Course(c *fiber.Ctx) error {
6161 Preload ("Modules" ).
6262 Preload ("Modules.Content" , func (db * gorm.DB ) * gorm.DB {
6363 return db .Order ("id ASC" )
64- }).
64+ }).
6565 Preload ("Tags" ).
6666 Where ("id = ?" , courseID ).
6767 First (& course ).Error ; err != nil {
@@ -223,6 +223,70 @@ func Enroll(c *fiber.Ctx) error {
223223 })
224224}
225225
226+ // Uneroll user into course
227+ func Unenroll (c * fiber.Ctx ) error {
228+ user_id := c .Params ("user_id" )
229+ course_id := c .Params ("course_id" )
230+
231+ var user entity.Account
232+ // Check if the user exists
233+ if err := database .DB .Where ("id = ?" , user_id ).First (& user ).Error ; err != nil {
234+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "User not found" })
235+ }
236+
237+ var course entity.Course
238+ // Check if the course exists
239+ if err := database .DB .Where ("id = ?" , course_id ).First (& course ).Error ; err != nil {
240+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "Course not found" })
241+ }
242+
243+ // Check if the user is enrolled in the course
244+ if err := database .DB .Model (& user ).Association ("Courses" ).Find (& course ); err != nil {
245+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "User is not enrolled in this course" })
246+ }
247+
248+ // Unenroll user into course
249+ if err := database .DB .Model (& user ).Association ("Courses" ).Delete (& course ); err != nil {
250+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "Error unenrolling into course" })
251+ }
252+
253+ return c .JSON (fiber.Map {
254+ "message" : fmt .Sprintf ("Successfully unenrolled user id %d in course %s" , user .ID , course .Title ),
255+ })
256+ }
257+
258+ func CheckEnrollmentStatus (c * fiber.Ctx ) error {
259+ user_id := c .Params ("user_id" )
260+ course_id := c .Params ("course_id" )
261+
262+ var user entity.Account
263+ // Check if the user exists
264+ if err := database .DB .Where ("id = ?" , user_id ).First (& user ).Error ; err != nil {
265+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "User not found" })
266+ }
267+
268+ var course entity.Course
269+ // Check if the course exists
270+ if err := database .DB .Where ("id = ?" , course_id ).First (& course ).Error ; err != nil {
271+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "Course not found" })
272+ }
273+
274+ // Check if the user is enrolled in the course
275+ isEnrolled := false
276+ if err := database .DB .Table ("enrollment" ).
277+ Where ("account_id = ? AND course_id = ?" , user_id , course_id ).
278+ Select ("count(*) > 0" ).
279+ Scan (& isEnrolled ).Error ; err != nil {
280+ return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"error" : "Error checking enrollment status" })
281+ }
282+
283+ // Return the enrollment status
284+ return c .JSON (fiber.Map {
285+ "message" : "Enrollment status checked successfully" ,
286+ "isEnrolled" : isEnrolled ,
287+ })
288+ }
289+
226290// Create a module inside a course
227291func CreateModule (c * fiber.Ctx ) error {
228292 creator_id , err := strconv .Atoi (c .Params ("creator_id" ))
@@ -372,7 +436,7 @@ func EditContent(c *fiber.Ctx) error {
372436 if err := os .Remove ("./content" + path ); err != nil {
373437 return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"message" : err .Error ()})
374438 }
375- } else if ! os .IsNotExist (err ){
439+ } else if ! os .IsNotExist (err ) {
376440 return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"message" : err .Error ()})
377441 }
378442
@@ -480,7 +544,7 @@ func EditThumbnail(c *fiber.Ctx) error {
480544 if err := os .Remove (fmt .Sprintf ("./content/%d/thumbnail.png" , course_id )); err != nil {
481545 return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"message" : err .Error ()})
482546 }
483- } else if ! os .IsNotExist (err ){
547+ } else if ! os .IsNotExist (err ) {
484548 return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"message" : err .Error ()})
485549 }
486550
0 commit comments