Files
backend_fiesta/services/customerService.go
2026-05-25 11:52:26 +05:30

149 lines
4.0 KiB
Go

package services
import (
"errors"
"nearle/models"
"nearle/repositories"
"net/http"
"strconv"
)
type CustomerService interface {
GetCustomer(cid int, cno string) (*models.CustomerInfo, error)
UpdateCustomer(input models.Customers) models.Result
GetCustomerLocations(cid int) models.CustomerLocationResult
CreateCustomerLocation(input models.Customerlocations) (int, error)
CreateCustomerRequest(req models.CustomerRequest) (models.CustomerRequest, error)
GetCustomerRequests(customerIDStr string, pageNo, pageSize int) ([]models.CustomerRequest, int64, error)
GetTenantCustomers(tid, lid, pageno, pagesize int, keyword string) []models.CustomerInfo
SearchCustomer(keyword string, tid int) []models.CustomerInfo
CreateCustomer(input models.Customers) (models.CustomerInfo, error)
LoginCustomer(contactNo string) (*models.Customers, error)
}
type customerService struct {
repo repositories.CustomerRepository
}
func NewCustomerService(repo repositories.CustomerRepository) CustomerService {
return &customerService{repo: repo}
}
func (s *customerService) GetCustomer(cid int, cno string) (*models.CustomerInfo, error) {
return s.repo.GetCustomer(cid, cno)
}
func (s *customerService) UpdateCustomer(input models.Customers) models.Result {
err := s.repo.UpdateCustomer(input)
if err != nil {
return models.Result{
Code: http.StatusConflict,
Status: false,
Message: "Update Customer Failed",
}
}
return models.Result{
Code: http.StatusAccepted,
Status: true,
Message: "Customer update successful",
}
}
func (s *customerService) CreateCustomerLocation(input models.Customerlocations) (int, error) {
return s.repo.CreateCustomerLocation(input)
}
func (s *customerService) GetCustomerLocations(cid int) models.CustomerLocationResult {
data, err := s.repo.GetCustomerLocations(cid)
if err != nil {
return models.CustomerLocationResult{
Code: http.StatusInternalServerError,
Status: false,
Message: "Failed to fetch customer locations",
Details: []models.Customerlocations{},
}
}
return models.CustomerLocationResult{
Code: http.StatusOK,
Status: true,
Message: "Successful",
Details: data,
}
}
func (s *customerService) CreateCustomerRequest(req models.CustomerRequest) (models.CustomerRequest, error) {
err := s.repo.CreateCustomerRequest(&req)
if err != nil {
return models.CustomerRequest{}, err
}
return req, nil
}
func (s *customerService) GetCustomerRequests(customerIDStr string, pageNo, pageSize int) ([]models.CustomerRequest, int64, error) {
if pageNo < 1 {
pageNo = 1
}
if pageSize < 1 {
pageSize = 10
}
var customerID int
var err error
if customerIDStr != "" {
customerID, err = strconv.Atoi(customerIDStr)
if err != nil {
return nil, 0, errors.New("invalid customerid")
}
}
return s.repo.GetCustomerRequests(customerID, pageNo, pageSize)
}
func (s *customerService) GetTenantCustomers(tid, lid, pageno, pagesize int, keyword string) []models.CustomerInfo {
return s.repo.GetTenantCustomers(tid, lid, pageno, pagesize, keyword)
}
func (s *customerService) SearchCustomer(keyword string, tid int) []models.CustomerInfo {
return s.repo.SearchCustomer(keyword, tid)
}
func (s *customerService) CreateCustomer(input models.Customers) (models.CustomerInfo, error) {
cid := s.repo.CheckCustomer(input.Contactno)
if cid != 0 {
input.Customerid = cid
tcid := s.repo.CheckTenantCustomer(input.Customerid, input.Tenantid)
if tcid != 0 {
return models.CustomerInfo{}, errors.New("Customer Already available")
}
s.repo.CreateTenantCustomer(input)
} else {
cid = s.repo.CreateCustomer(input)
}
result, err := s.repo.GetCustomer(cid, "")
if err != nil {
return models.CustomerInfo{}, err
}
return *result, nil
}
func (s *customerService) LoginCustomer(contactNo string) (*models.Customers, error) {
customer, err := s.repo.GetCustomerByContactNo(contactNo)
if err != nil {
return nil, err
}
if customer.Customerid == 0 {
return nil, nil // handle "not found" in controller
}
return customer, nil
}