Files
backend_fiesta/controllers/userController.go
2026-05-25 11:52:26 +05:30

231 lines
5.3 KiB
Go

package controllers
import (
"net/http"
"strconv"
"nearle/models"
"nearle/services"
"github.com/gofiber/fiber/v2"
)
type UserController struct {
userService services.UserService
}
func NewUserController(userService services.UserService) *UserController {
return &UserController{userService: userService}
}
func (ctl *UserController) GetAllUsers(c *fiber.Ctx) error {
roleID, _ := strconv.Atoi(c.Query("roleid", "0"))
tenantID, _ := strconv.Atoi(c.Query("tenantid", "0"))
pageno, _ := strconv.Atoi(c.Query("pageno", "1"))
pagesize, _ := strconv.Atoi(c.Query("pagesize", "10"))
keyword := c.Query("keyword", "")
users, err := ctl.userService.GetAllUsers(roleID, tenantID, pageno, pagesize, keyword)
if err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{
"code": http.StatusInternalServerError,
"message": err.Error(),
"status": false,
})
}
return c.JSON(fiber.Map{
"code": http.StatusOK,
"message": "Success",
"status": true,
"details": users,
})
}
func (ctl *UserController) GetUserInfo(c *fiber.Ctx) error {
uid, err := strconv.Atoi(c.Query("userid"))
if err != nil || uid <= 0 {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"code": http.StatusBadRequest,
"message": "Invalid userid",
"status": false,
})
}
user, err := ctl.userService.GetUserByID(uid)
if err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{
"code": http.StatusInternalServerError,
"message": err.Error(),
"status": false,
})
}
return c.JSON(fiber.Map{
"code": http.StatusOK,
"message": "Success",
"status": true,
"details": user,
})
}
func (ctl *UserController) Login(c *fiber.Ctx) error {
var user models.User
if err := c.BodyParser(&user); err != nil {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"code": http.StatusBadRequest,
"message": "Invalid request body",
"status": false,
})
}
info, err := ctl.userService.Login(user)
if err != nil {
return c.Status(http.StatusConflict).JSON(fiber.Map{
"status": false,
"code": http.StatusConflict,
"message": "User not found",
})
}
return c.JSON(fiber.Map{
"code": http.StatusOK,
"message": "Success",
"status": true,
"details": info,
})
}
func (ctl *UserController) TenantLogin(c *fiber.Ctx) error {
var user models.User
if err := c.BodyParser(&user); err != nil {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"status": false,
"code": http.StatusBadRequest,
"message": "Invalid request body",
})
}
info, err := ctl.userService.TenantLogin(user)
if err != nil {
return c.Status(http.StatusConflict).JSON(fiber.Map{
"status": false,
"code": http.StatusConflict,
"message": err.Error(),
})
}
return c.JSON(fiber.Map{
"code": http.StatusOK,
"message": "Success",
"status": true,
"details": info,
})
}
func (ctl *UserController) UpdateStaff(c *fiber.Ctx) error {
var user models.User
if err := c.BodyParser(&user); err != nil {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"status": false,
"code": http.StatusBadRequest,
"message": "Invalid request body",
})
}
if err := ctl.userService.UpdateStaff(user); err != nil {
return c.JSON(fiber.Map{
"status": false,
"code": http.StatusConflict,
"message": err.Error(),
})
}
return c.JSON(fiber.Map{
"status": true,
"code": http.StatusAccepted,
"message": "User update successful",
})
}
func (ctl *UserController) AppLogin(c *fiber.Ctx) error {
var user models.User
if err := c.BodyParser(&user); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"code": 400,
"status": false,
"message": "Invalid request body",
})
}
_, resp, err := ctl.userService.AppLogin(user)
if err != nil {
// Use resp.Code if present, fallback to 409
code := http.StatusConflict
if v, ok := resp["code"].(int); ok {
code = v
}
return c.Status(code).JSON(resp)
}
// ✅ Always return resp
return c.Status(http.StatusOK).JSON(resp)
}
func (ctl *UserController) CreateUser(c *fiber.Ctx) error {
var user models.User
// Parse request body
if err := c.BodyParser(&user); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"code": http.StatusBadRequest,
"status": false,
"message": "Invalid request body",
})
}
// Call service
info, err := ctl.userService.CreateUser(user)
if err != nil {
return c.Status(http.StatusConflict).JSON(fiber.Map{
"code": http.StatusConflict,
"status": false,
"message": "Failed",
})
}
return c.Status(http.StatusCreated).JSON(fiber.Map{
"code": http.StatusCreated,
"status": true,
"message": "Success",
"details": info,
})
}
func (ctl *UserController) TenantWebLogin(c *fiber.Ctx) error {
var user models.User
if err := c.BodyParser(&user); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"status": false,
"code": fiber.StatusBadRequest,
"message": "Invalid request body",
})
}
info, resp := ctl.userService.TenantWebLogin(user)
// Ensure the response map contains the correct status code
code, ok := resp["code"].(int)
if !ok {
code = fiber.StatusInternalServerError
}
// Include tenant user info if login successful (code 200)
if code == fiber.StatusOK {
resp["details"] = info
}
return c.Status(code).JSON(resp)
}