@@ -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 {
@@ -196,6 +196,30 @@ func CreateCourse(c *fiber.Ctx) error {
196196 })
197197}
198198
199+ // Returns a true if user is enrolled in course
200+ func IsEnrolled (c * fiber.Ctx ) error {
201+ course_id := c .Params ("course_id" )
202+ user_id := c .Params ("user_id" )
203+
204+ var count int64
205+
206+ if err := database .DB .Table ("enrollment" ).Where ("account_id = ? AND course_id = ?" , user_id , course_id ).Count (& count ).Error ; err != nil {
207+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "Error retrieving courses" })
208+ }
209+
210+ if count > 0 {
211+ return c .JSON (fiber.Map {
212+ "message" : "User is enrolled in this course" ,
213+ "isEnrolled" : true ,
214+ })
215+ } else {
216+ return c .JSON (fiber.Map {
217+ "message" : "User is not enrolled in this course" ,
218+ "isEnrolled" : false ,
219+ })
220+ }
221+ }
222+
199223// Enroll user into course
200224func Enroll (c * fiber.Ctx ) error {
201225 user_id := c .Params ("user_id" )
@@ -223,6 +247,70 @@ func Enroll(c *fiber.Ctx) error {
223247 })
224248}
225249
250+ // Uneroll user into course
251+ func Unenroll (c * fiber.Ctx ) error {
252+ user_id := c .Params ("user_id" )
253+ course_id := c .Params ("course_id" )
254+
255+ var user entity.Account
256+ // Check if the user exists
257+ if err := database .DB .Where ("id = ?" , user_id ).First (& user ).Error ; err != nil {
258+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "User not found" })
259+ }
260+
261+ var course entity.Course
262+ // Check if the course exists
263+ if err := database .DB .Where ("id = ?" , course_id ).First (& course ).Error ; err != nil {
264+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "Course not found" })
265+ }
266+
267+ // Check if the user is enrolled in the course
268+ if err := database .DB .Model (& user ).Association ("Courses" ).Find (& course ); err != nil {
269+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "User is not enrolled in this course" })
270+ }
271+
272+ // Unenroll user into course
273+ if err := database .DB .Model (& user ).Association ("Courses" ).Delete (& course ); err != nil {
274+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "Error unenrolling into course" })
275+ }
276+
277+ return c .JSON (fiber.Map {
278+ "message" : fmt .Sprintf ("Successfully unenrolled user id %d in course %s" , user .ID , course .Title ),
279+ })
280+ }
281+
282+ func CheckEnrollmentStatus (c * fiber.Ctx ) error {
283+ user_id := c .Params ("user_id" )
284+ course_id := c .Params ("course_id" )
285+
286+ var user entity.Account
287+ // Check if the user exists
288+ if err := database .DB .Where ("id = ?" , user_id ).First (& user ).Error ; err != nil {
289+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "User not found" })
290+ }
291+
292+ var course entity.Course
293+ // Check if the course exists
294+ if err := database .DB .Where ("id = ?" , course_id ).First (& course ).Error ; err != nil {
295+ return c .Status (fiber .StatusNotFound ).JSON (fiber.Map {"error" : "Course not found" })
296+ }
297+
298+ // Check if the user is enrolled in the course
299+ isEnrolled := false
300+ if err := database .DB .Table ("enrollment" ).
301+ Where ("account_id = ? AND course_id = ?" , user_id , course_id ).
302+ Select ("count(*) > 0" ).
303+ Scan (& isEnrolled ).Error ; err != nil {
304+ return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"error" : "Error checking enrollment status" })
305+ }
306+
307+ // Return the enrollment status
308+ return c .JSON (fiber.Map {
309+ "message" : "Enrollment status checked successfully" ,
310+ "isEnrolled" : isEnrolled ,
311+ })
312+ }
313+
226314// Create a module inside a course
227315func CreateModule (c * fiber.Ctx ) error {
228316 creator_id , err := strconv .Atoi (c .Params ("creator_id" ))
@@ -372,7 +460,7 @@ func EditContent(c *fiber.Ctx) error {
372460 if err := os .Remove ("./content" + path ); err != nil {
373461 return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"message" : err .Error ()})
374462 }
375- } else if ! os .IsNotExist (err ){
463+ } else if ! os .IsNotExist (err ) {
376464 return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"message" : err .Error ()})
377465 }
378466
@@ -480,7 +568,7 @@ func EditThumbnail(c *fiber.Ctx) error {
480568 if err := os .Remove (fmt .Sprintf ("./content/%d/thumbnail.png" , course_id )); err != nil {
481569 return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"message" : err .Error ()})
482570 }
483- } else if ! os .IsNotExist (err ){
571+ } else if ! os .IsNotExist (err ) {
484572 return c .Status (fiber .StatusInternalServerError ).JSON (fiber.Map {"message" : err .Error ()})
485573 }
486574
0 commit comments