package handlers import ( "strconv" "github.com/SamuelTariku/FortuneBet-Backend/internal/domain" "github.com/SamuelTariku/FortuneBet-Backend/internal/services/user" "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response" "github.com/gofiber/fiber/v2" ) type CreateManagerReq 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"` } // CreateManagers godoc // @Summary Create Managers // @Description Create Managers // @Tags manager // @Accept json // @Produce json // @Param manger body CreateManagerReq true "Create manager" // @Success 200 {object} response.APIResponse // @Failure 400 {object} response.APIResponse // @Failure 401 {object} response.APIResponse // @Failure 500 {object} response.APIResponse // @Router /managers [post] func (h *Handler) CreateManager(c *fiber.Ctx) error { var req CreateManagerReq if err := c.BodyParser(&req); err != nil { h.logger.Error("RegisterUser failed", "error", err) return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil) } valErrs, ok := h.validator.Validate(c, req) if !ok { return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil) } user := domain.CreateUserReq{ FirstName: req.FirstName, LastName: req.LastName, Email: req.Email, PhoneNumber: req.PhoneNumber, Password: req.Password, Role: string(domain.RoleBranchManager), } _, err := h.userSvc.CreateUser(c.Context(), user) if err != nil { h.logger.Error("CreateManagers failed", "error", err) return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create Managers", nil, nil) } return response.WriteJSON(c, fiber.StatusOK, "Managers created successfully", nil, nil) } // GetAllManagers godoc // @Summary Get all Managers // @Description Get all Managers // @Tags manager // @Accept json // @Produce json // @Param page query int false "Page number" // @Param page_size query int false "Page size" // @Success 200 {object} response.APIResponse // @Failure 400 {object} response.APIResponse // @Failure 401 {object} response.APIResponse // @Failure 500 {object} response.APIResponse // @Router /managers [get] func (h *Handler) GetAllManagers(c *fiber.Ctx) error { filter := user.Filter{ Role: string(domain.RoleBranchManager), BranchId: user.ValidBranchId{ Value: int64(c.QueryInt("branch_id")), Valid: true, }, Page: c.QueryInt("page", 1), PageSize: c.QueryInt("page_size", 10), } valErrs, ok := h.validator.Validate(c, filter) if !ok { return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil) } Managers, err := h.userSvc.GetAllUsers(c.Context(), filter) if err != nil { h.logger.Error("GetAllManagers failed", "error", err) return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get Managers", nil, nil) } return response.WriteJSON(c, fiber.StatusOK, "Managers retrieved successfully", Managers, nil) } // UpdateManagers godoc // @Summary Update Managers // @Description Update Managers // @Tags Managers // @Accept json // @Produce json // @Param Managers body updateUserReq true "Update Managers" // @Success 200 {object} response.APIResponse // @Failure 400 {object} response.APIResponse // @Failure 401 {object} response.APIResponse // @Failure 500 {object} response.APIResponse // @Router /managers/{id} [put] func (h *Handler) UpdateManagers(c *fiber.Ctx) error { var req updateUserReq if err := c.BodyParser(&req); err != nil { h.logger.Error("UpdateManagers failed", "error", err) return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", nil, nil) } valErrs, ok := h.validator.Validate(c, req) if !ok { return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil) } ManagersIdStr := c.Params("id") ManagersId, err := strconv.ParseInt(ManagersIdStr, 10, 64) if err != nil { h.logger.Error("UpdateManagers failed", "error", err) return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Managers ID", nil, nil) } err = h.userSvc.UpdateUser(c.Context(), domain.UpdateUserReq{ UserId: ManagersId, FirstName: domain.ValidString{ Value: req.FirstName, Valid: req.FirstName != "", }, LastName: domain.ValidString{ Value: req.LastName, Valid: req.LastName != "", }, Suspended: domain.ValidBool{ Value: req.Suspended, Valid: true, }, }, ) if err != nil { h.logger.Error("UpdateManagers failed", "error", err) return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to update Managers", nil, nil) } return response.WriteJSON(c, fiber.StatusOK, "Managers updated successfully", nil, nil) }