package handlers import ( "log/slog" "github.com/SamuelTariku/FortuneBet-Backend/internal/domain" "github.com/SamuelTariku/FortuneBet-Backend/internal/services/user" "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response" customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator" "github.com/gofiber/fiber/v2" ) type CreateCashierReq struct { FirstName string `json:"first_name" example:"John"` LastName string `json:"last_name" example:"Doe"` Email string `json:"email" example:"john.doe@example.com"` PhoneNumber string `json:"phone_number" example:"1234567890"` Password string `json:"password" example:"password123"` } func CreateCashier(logger *slog.Logger, userSvc *user.Service, validator *customvalidator.CustomValidator) fiber.Handler { return func(c *fiber.Ctx) error { userId := c.Locals("user_id").(int64) var req CreateCashierReq if err := c.BodyParser(&req); err != nil { logger.Error("RegisterUser failed", "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Invalid request", }) } valErrs, ok := validator.Validate(c, req) if !ok { response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil) return nil } user := domain.CreateUserReq{ FirstName: req.FirstName, LastName: req.LastName, Email: req.Email, PhoneNumber: req.PhoneNumber, Password: req.Password, Role: string(domain.RoleCashier), } _, err := userSvc.CreateUser(c.Context(), user, userId, 0) if err != nil { logger.Error("CreateCashier failed", "error", err) response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create cashier", nil, nil) return nil } response.WriteJSON(c, fiber.StatusOK, "Cashier created successfully", nil, nil) return nil } } func GetAllCashiers(logger *slog.Logger, userSvc *user.Service, validator *customvalidator.CustomValidator) fiber.Handler { return func(c *fiber.Ctx) error { filter := user.Filter{ Role: string(domain.RoleCashier), BranchId: int64(c.QueryInt("branch_id")), Page: c.QueryInt("page", 1), PageSize: c.QueryInt("page_size", 10), } valErrs, ok := validator.Validate(c, filter) if !ok { response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil) return nil } cashiers, err := userSvc.GetAllUsers(c.Context(), filter) if err != nil { logger.Error("GetAllCashiers failed", "error", err) response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get cashiers", nil, nil) return nil } response.WriteJSON(c, fiber.StatusOK, "Cashiers retrieved successfully", cashiers, nil) return nil } }