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 }