73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
package orderService
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
|
|
"git.ma-al.com/goc_daniel/b2b/app/model"
|
|
"git.ma-al.com/goc_daniel/b2b/app/repos/cartsRepo"
|
|
"git.ma-al.com/goc_daniel/b2b/app/repos/ordersRepo"
|
|
"git.ma-al.com/goc_daniel/b2b/app/service/addressesService"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/query/filters"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/query/find"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
|
|
)
|
|
|
|
type OrderService struct {
|
|
ordersRepo ordersRepo.UIOrdersRepo
|
|
cartsRepo cartsRepo.UICartsRepo
|
|
addressesService *addressesService.AddressesService
|
|
}
|
|
|
|
func New() *OrderService {
|
|
return &OrderService{
|
|
ordersRepo: ordersRepo.New(),
|
|
cartsRepo: cartsRepo.New(),
|
|
addressesService: addressesService.New(),
|
|
}
|
|
}
|
|
|
|
func (s *OrderService) Find(user *model.Customer, p find.Paging, filt *filters.FiltersList) (find.Found[model.CustomerOrder], error) {
|
|
if !user.HasPermission(perms.ViewAllOrders) {
|
|
// append filter to view only this user's orders
|
|
idStr := strconv.FormatUint(uint64(user.ID), 10)
|
|
filt.Append(filters.Where("b2b_customer_orders.user_id = " + idStr))
|
|
}
|
|
|
|
return s.ordersRepo.Find(user.ID, p, filt)
|
|
}
|
|
|
|
func (s *OrderService) PlaceNewOrder(user_id uint, cart_id uint, country_id uint, address_info string) error {
|
|
_, err := s.addressesService.ValidateAddressJson(address_info, country_id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
amt, err := s.cartsRepo.UserHasCart(user_id, cart_id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if amt <= 0 {
|
|
return responseErrors.ErrUserHasNoSuchCart
|
|
}
|
|
|
|
cart, err := s.cartsRepo.RetrieveCart(user_id, cart_id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(cart.Products) == 0 {
|
|
return responseErrors.ErrEmptyCart
|
|
}
|
|
|
|
// all checks passed
|
|
return s.ordersRepo.PlaceNewOrder(user_id, cart_id, country_id, address_info)
|
|
}
|
|
|
|
func (s *OrderService) ChangeOrderAddress(user *model.Customer, order_id uint, country_id uint, address_info string) error {
|
|
return nil
|
|
}
|
|
|
|
func (s *OrderService) ChangeOrderStatus(user *model.Customer, order_id uint, status string) error {
|
|
return nil
|
|
}
|