diff --git a/controllers/updateController.go b/controllers/updateController.go index 4dc6fbd..96ecefb 100644 --- a/controllers/updateController.go +++ b/controllers/updateController.go @@ -3,6 +3,7 @@ package controllers import ( "context" "net/smtp" + "school-management/database" "school-management/models" "time" @@ -10,8 +11,11 @@ import ( "github.com/gofiber/fiber/v2" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" ) +var lockerCollection *mongo.Collection = database.OpenCollection(database.Client, "lockers") + func UpdateStudentName(c *fiber.Ctx) error { var data map[string]string ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) @@ -627,3 +631,64 @@ func UpdateContactPriority(c *fiber.Ctx) error { "message": "not implimented", }) } + +func UpdateLockerCombo(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 locker number is included + if data["lockernumber"] == "" || data["newlockercombo"] == "" { + cancel() + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "success": false, + "message": "missing required fields", + }) + } + + update_time, _ := time.Parse(time.RFC3339, time.Now().Format(time.RFC3339)) + update := bson.M{ + "$set": bson.M{ + "lockercombo": data["newlockercombo"], + "updated_at": update_time, + }, + } + + result, updateErr := lockerCollection.UpdateOne( + ctx, + bson.M{"lockernumber": data["lockernumber"]}, + update, + ) + if updateErr != nil { + cancel() + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "success": false, + "message": "the locker could not be updated", + "error": updateErr, + }) + } + defer cancel() + + return c.Status(fiber.StatusOK).JSON(fiber.Map{ + "success": true, + "message": "successfully updated locker", + "result": result, + }) +} diff --git a/models/lockerModel.go b/models/lockerModel.go index f846e9e..32f26da 100644 --- a/models/lockerModel.go +++ b/models/lockerModel.go @@ -1,10 +1,16 @@ package models -import "go.mongodb.org/mongo-driver/bson/primitive" +import ( + "time" + + "go.mongodb.org/mongo-driver/bson/primitive" +) type Locker struct { - ID primitive.ObjectID `bson:"_id"` - LockerNumber string `json:"lockernumber"` // Example B123 - LockerPasscode string `json:"lockerpasscode"` - LockerType string `json:"lockertype"` // Upper / Lower locker + ID primitive.ObjectID `bson:"_id"` + LockerNumber string `json:"lockernumber"` // Example B123 + LockerCombo string `json:"lockercombo"` + LockerType string `json:"lockertype"` // Upper / Lower locker + Created_at time.Time `json:"created_at"` + Updated_at time.Time `json:"updated_at"` }