272 lines
6.4 KiB
Go
272 lines
6.4 KiB
Go
package controllers
|
|
|
|
import (
|
|
"nearle/models"
|
|
"nearle/services"
|
|
"net/http"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type CustomerController struct {
|
|
customerService services.CustomerService
|
|
}
|
|
|
|
func NewCustomerController(customerService services.CustomerService) *CustomerController {
|
|
return &CustomerController{customerService: customerService}
|
|
}
|
|
|
|
func (ctl *CustomerController) GetCustomer(c *fiber.Ctx) error {
|
|
cid, _ := strconv.Atoi(c.Query("customerid"))
|
|
cno := c.Query("contactno")
|
|
|
|
result, err := ctl.customerService.GetCustomer(cid, cno)
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{
|
|
"code": 500,
|
|
"message": err.Error(),
|
|
"status": false,
|
|
"details": fiber.Map{},
|
|
})
|
|
}
|
|
|
|
return c.Status(http.StatusOK).JSON(fiber.Map{
|
|
"code": http.StatusOK,
|
|
"message": "Success",
|
|
"status": true,
|
|
"details": result,
|
|
})
|
|
}
|
|
|
|
func (ctl *CustomerController) UpdateCustomer(c *fiber.Ctx) error {
|
|
var data models.Customers
|
|
|
|
if err := c.BodyParser(&data); err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
|
|
"status": false,
|
|
"code": http.StatusBadRequest,
|
|
"message": "Invalid request body",
|
|
})
|
|
}
|
|
|
|
result := ctl.customerService.UpdateCustomer(data)
|
|
|
|
if !result.Status {
|
|
return c.Status(http.StatusConflict).JSON(fiber.Map{
|
|
"status": false,
|
|
"code": http.StatusConflict,
|
|
"message": result.Message,
|
|
})
|
|
}
|
|
|
|
return c.Status(http.StatusAccepted).JSON(fiber.Map{
|
|
"status": true,
|
|
"code": http.StatusAccepted,
|
|
"message": result.Message,
|
|
})
|
|
}
|
|
|
|
func (ctl *CustomerController) GetCustomerLocations(c *fiber.Ctx) error {
|
|
cid, err := strconv.Atoi(c.Query("customerid"))
|
|
if err != nil || cid == 0 {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
|
|
"code": http.StatusBadRequest,
|
|
"status": false,
|
|
"message": "Invalid customerid",
|
|
"details": []interface{}{},
|
|
})
|
|
}
|
|
|
|
result := ctl.customerService.GetCustomerLocations(cid)
|
|
return c.Status(result.Code).JSON(result)
|
|
}
|
|
|
|
func (ctl *CustomerController) CreateCustomerLocation(c *fiber.Ctx) error {
|
|
var data models.Customerlocations
|
|
|
|
if err := c.BodyParser(&data); err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
|
|
"status": false,
|
|
"code": http.StatusBadRequest,
|
|
"message": "Invalid request body",
|
|
})
|
|
}
|
|
|
|
id, err := ctl.customerService.CreateCustomerLocation(data)
|
|
|
|
if id == -1 {
|
|
// Duplicate address
|
|
return c.Status(http.StatusConflict).JSON(fiber.Map{
|
|
"status": false,
|
|
"code": http.StatusConflict,
|
|
"message": "Address already exists",
|
|
})
|
|
}
|
|
|
|
if err != nil || id == 0 {
|
|
return c.Status(http.StatusConflict).JSON(fiber.Map{
|
|
"status": false,
|
|
"code": http.StatusConflict,
|
|
"message": "Failed",
|
|
})
|
|
}
|
|
|
|
result := ctl.customerService.GetCustomerLocations(id)
|
|
return c.Status(result.Code).JSON(result)
|
|
}
|
|
|
|
|
|
func (ctl *CustomerController) CreateCustomerRequest(c *fiber.Ctx) error {
|
|
var req models.CustomerRequest
|
|
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
|
|
"code": http.StatusBadRequest,
|
|
"message": "Invalid request body",
|
|
"status": false,
|
|
})
|
|
}
|
|
|
|
now := time.Now()
|
|
req.Created = now
|
|
req.Updated = now
|
|
|
|
createdReq, err := ctl.customerService.CreateCustomerRequest(req)
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{
|
|
"code": http.StatusInternalServerError,
|
|
"message": "Failed to create customer request",
|
|
"status": false,
|
|
})
|
|
}
|
|
|
|
return c.Status(http.StatusCreated).JSON(fiber.Map{
|
|
"code": http.StatusCreated,
|
|
"message": "Customer request created successfully",
|
|
"status": true,
|
|
"data": createdReq,
|
|
})
|
|
}
|
|
|
|
func (ctl *CustomerController) GetCustomerRequests(c *fiber.Ctx) error {
|
|
customerIDStr := c.Query("customerid")
|
|
pageNoStr := c.Query("pageno", "1")
|
|
pageSizeStr := c.Query("pagesize", "10")
|
|
|
|
pageNo, _ := strconv.Atoi(pageNoStr)
|
|
pageSize, _ := strconv.Atoi(pageSizeStr)
|
|
|
|
requests, total, err := ctl.customerService.GetCustomerRequests(customerIDStr, pageNo, pageSize)
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{
|
|
"code": 500,
|
|
"message": err.Error(),
|
|
"status": false,
|
|
})
|
|
}
|
|
|
|
return c.Status(http.StatusOK).JSON(fiber.Map{
|
|
"code": 200,
|
|
"message": "Customer requests fetched successfully",
|
|
"status": true,
|
|
"data": requests,
|
|
"total": total,
|
|
})
|
|
}
|
|
|
|
func (ctl *CustomerController) GetTenantCustomers(c *fiber.Ctx) error {
|
|
tid, _ := strconv.Atoi(c.Query("tenantid"))
|
|
lid, _ := strconv.Atoi(c.Query("locationid"))
|
|
pageno, _ := strconv.Atoi(c.Query("pageno"))
|
|
pagesize, _ := strconv.Atoi(c.Query("pagesize"))
|
|
keyword := c.Query("keyword")
|
|
|
|
result := ctl.customerService.GetTenantCustomers(tid, lid, pageno, pagesize, keyword)
|
|
|
|
return c.JSON(fiber.Map{
|
|
"code": http.StatusOK,
|
|
"message": "Success",
|
|
"status": true,
|
|
"details": result,
|
|
})
|
|
}
|
|
|
|
func (ctl *CustomerController) SearchCustomer(c *fiber.Ctx) error {
|
|
keyword := c.Query("keyword")
|
|
tid, _ := strconv.Atoi(c.Query("tenantid"))
|
|
|
|
result := ctl.customerService.SearchCustomer(keyword, tid)
|
|
|
|
return c.JSON(fiber.Map{
|
|
"code": http.StatusOK,
|
|
"message": "Success",
|
|
"status": true,
|
|
"details": result,
|
|
})
|
|
}
|
|
|
|
func (ctl *CustomerController) CreateCustomer(c *fiber.Ctx) error {
|
|
var data models.Customers
|
|
|
|
if err := c.BodyParser(&data); err != nil {
|
|
return err
|
|
}
|
|
|
|
result, err := ctl.customerService.CreateCustomer(data)
|
|
if err != nil {
|
|
return c.JSON(fiber.Map{
|
|
"status": false,
|
|
"code": http.StatusConflict,
|
|
"message": err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.JSON(fiber.Map{
|
|
"status": true,
|
|
"code": http.StatusCreated,
|
|
"message": "Successful",
|
|
"details": result,
|
|
})
|
|
}
|
|
|
|
func (ctl *CustomerController) CustomerLogin(c *fiber.Ctx) error {
|
|
var body struct {
|
|
Contactno string `json:"contactno"`
|
|
}
|
|
|
|
if err := c.BodyParser(&body); err != nil {
|
|
return c.JSON(fiber.Map{
|
|
"code": http.StatusBadRequest,
|
|
"status": false,
|
|
"message": "Invalid request",
|
|
"error": err.Error(),
|
|
})
|
|
}
|
|
|
|
customer, err := ctl.customerService.LoginCustomer(body.Contactno)
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{
|
|
"status": false,
|
|
"message": "Failed to login",
|
|
"error": err.Error(),
|
|
})
|
|
}
|
|
|
|
if customer == nil {
|
|
return c.JSON(fiber.Map{
|
|
"code": http.StatusConflict,
|
|
"status": false,
|
|
"message": "Account not found",
|
|
})
|
|
}
|
|
|
|
return c.JSON(fiber.Map{
|
|
"code": http.StatusOK,
|
|
"status": true,
|
|
"message": "Success",
|
|
"details": customer,
|
|
})
|
|
}
|