149 lines
4.0 KiB
Go
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
|
|
}
|