From 2421c2e022e5685f571a007b5e094fb34908f045 Mon Sep 17 00:00:00 2001 From: Braeden Sowinski Date: Wed, 30 Mar 2022 21:13:35 -0700 Subject: [PATCH] users delete handlers --- controllers/updateController.go | 147 ++++++++++++++++++++++++++++++++ routes/routes.go | 5 ++ 2 files changed, 152 insertions(+) diff --git a/controllers/updateController.go b/controllers/updateController.go index 61dd6bc..d8b6af5 100644 --- a/controllers/updateController.go +++ b/controllers/updateController.go @@ -2101,3 +2101,150 @@ func UpdateLockerCombo(c *fiber.Ctx) error { "result": result, }) } + +func RemoveStudent(c *fiber.Ctx) error { + var data map[string]string + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + + if err := c.BodyParser(&data); err != nil { + cancel() + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "success": false, + "message": "Failed to parse body", + "error": err, + }) + } + + // Ensure Authenticated admin sent request + if !AuthAdmin(c) { + cancel() + return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{ + "success": false, + "message": "Unauthorized: only an admin can perform this action", + }) + } + + // Check student id is included + if data["sid"] == "" { + cancel() + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "success": false, + "message": "missing required fields", + }) + } + + result, deleteErr := studentCollection.DeleteOne(ctx, bson.M{"schooldata.sid": data["sid"]}) + if deleteErr != nil { + cancel() + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "success": false, + "message": "the student could not be deleted", + "error": deleteErr, + }) + } + defer cancel() + + return c.Status(fiber.StatusOK).JSON(fiber.Map{ + "success": true, + "message": "successfully deleted student", + "result": result, + }) +} + +func RemoveTeacher(c *fiber.Ctx) error { + var data map[string]string + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + + if err := c.BodyParser(&data); err != nil { + cancel() + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "success": false, + "message": "Failed to parse body", + "error": err, + }) + } + + // Ensure Authenticated admin sent request + if !AuthAdmin(c) { + cancel() + return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{ + "success": false, + "message": "Unauthorized: only an admin can perform this action", + }) + } + + // Check student id is included + if data["tid"] == "" { + cancel() + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "success": false, + "message": "missing required fields", + }) + } + + result, deleteErr := teacherCollection.DeleteOne(ctx, bson.M{"schooldata.tid": data["tid"]}) + if deleteErr != nil { + cancel() + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "success": false, + "message": "the teacher could not be deleted", + "error": deleteErr, + }) + } + defer cancel() + + return c.Status(fiber.StatusOK).JSON(fiber.Map{ + "success": true, + "message": "successfully deleted teacher", + "result": result, + }) +} + +func RemoveAdmin(c *fiber.Ctx) error { + var data map[string]string + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + + if err := c.BodyParser(&data); err != nil { + cancel() + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "success": false, + "message": "Failed to parse body", + "error": err, + }) + } + + // Ensure Authenticated admin sent request + if !AuthAdmin(c) { + cancel() + return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{ + "success": false, + "message": "Unauthorized: only an admin can perform this action", + }) + } + + // Check student id is included + if data["aid"] == "" { + cancel() + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "success": false, + "message": "missing required fields", + }) + } + + result, deleteErr := adminCollection.DeleteOne(ctx, bson.M{"aid": data["said"]}) + if deleteErr != nil { + cancel() + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "success": false, + "message": "the admin could not be deleted", + "error": deleteErr, + }) + } + defer cancel() + + return c.Status(fiber.StatusOK).JSON(fiber.Map{ + "success": true, + "message": "successfully deleted admin", + "result": result, + }) +} diff --git a/routes/routes.go b/routes/routes.go index 7f6fca6..1bc45b4 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -67,6 +67,11 @@ func Setup(app *fiber.App) { app.Post(routerPrefix+"/admin/renableStudent", controllers.RemoveStudentsDisabled) app.Post(routerPrefix+"/admin/renableTeacher", controllers.RemoveTeachersDisabled) + // Delete Handler + app.Post(routerPrefix+"/remove/student", controllers.RemoveStudent) + app.Post(routerPrefix+"/remove/teacher", controllers.RemoveTeacher) + app.Post(routerPrefix+"/remove/admin", controllers.RemoveAdmin) + // 404 Handler app.Use(func(c *fiber.Ctx) error { return c.SendStatus(404) // => 404 "Not Found"