Files
hfb_sys/backend/internal/modules/pickup/service.go
T

110 lines
3.1 KiB
Go

package pickup
import (
"context"
"hfb_sys/backend/internal/auditlog"
)
type Service struct {
repo *Repository
}
func NewService(repo *Repository) *Service {
return &Service{repo: repo}
}
func (s *Service) Create(ctx context.Context, req CreateRequest, adminID uint64, meta auditlog.Meta) (*PickupDTO, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
if req.ListingID == 0 {
return nil, ErrListingUnavailable
}
if req.ProfitAmountCent < 0 {
return nil, ErrInvalidProfit
}
return s.repo.Create(ctx, req, adminID, meta)
}
func (s *Service) Complete(ctx context.Context, pickupID uint64, req CompleteRequest, adminID uint64, meta auditlog.Meta) (*PickupDTO, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
if pickupID == 0 || req.SettleAmountCent <= 0 {
return nil, ErrInvalidAmount
}
if req.ProfitAmountCent != nil && *req.ProfitAmountCent < 0 {
return nil, ErrInvalidProfit
}
return s.repo.Complete(ctx, pickupID, req, adminID, meta)
}
func (s *Service) MarkOfflineSettlement(ctx context.Context, pickupID uint64, req OfflineSettlementRequest, adminID uint64, meta auditlog.Meta) (*PickupDTO, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
if pickupID == 0 {
return nil, ErrPickupNotFound
}
return s.repo.MarkOfflineSettlement(ctx, pickupID, req, adminID, meta)
}
func (s *Service) UpdateProfit(ctx context.Context, pickupID uint64, req UpdateProfitRequest, adminID uint64, meta auditlog.Meta) (*PickupDTO, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
if pickupID == 0 {
return nil, ErrPickupNotFound
}
if req.ProfitAmountCent < 0 {
return nil, ErrInvalidProfit
}
return s.repo.UpdateProfit(ctx, pickupID, req, adminID, meta)
}
func (s *Service) Cancel(ctx context.Context, pickupID uint64, reason string, adminID uint64, meta auditlog.Meta) error {
if s.repo == nil {
return ErrDependencyUnavailable
}
if pickupID == 0 || reason == "" {
return ErrPickupNotPickingUp
}
return s.repo.Cancel(ctx, pickupID, reason, adminID, meta)
}
func (s *Service) FindByID(ctx context.Context, id uint64) (*PickupDTO, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
return s.repo.FindByID(ctx, id)
}
func (s *Service) ListAdmin(ctx context.Context, query AdminPickupQuery) (*PaginatedResult, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
return s.repo.ListAdmin(ctx, query)
}
func (s *Service) ListShopNames(ctx context.Context, platform string) ([]string, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
return s.repo.ListShopNames(ctx, platform)
}
func (s *Service) ListForSeller(ctx context.Context, ownerID uint64, query SellerPickupQuery) (*PaginatedResult, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
return s.repo.ListForSeller(ctx, ownerID, query)
}
func (s *Service) ListAvailableListings(ctx context.Context, query AvailableListingQuery) (*AvailableListingsResult, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
return s.repo.ListAvailableListings(ctx, query)
}