From f5a2a31dd09b9dca6e6272e4f2d380804a3dc319 Mon Sep 17 00:00:00 2001 From: mzfarshad Date: Mon, 4 May 2026 22:09:48 +0330 Subject: [PATCH] refactor service layer --- domain/shoppingbasket/entity/entity.go | 10 ++++++ domain/shoppingbasket/service/param.go | 45 +++++++++++++----------- domain/shoppingbasket/service/service.go | 23 ++++++++---- 3 files changed, 51 insertions(+), 27 deletions(-) diff --git a/domain/shoppingbasket/entity/entity.go b/domain/shoppingbasket/entity/entity.go index b1a53f52..acbaa7e1 100644 --- a/domain/shoppingbasket/entity/entity.go +++ b/domain/shoppingbasket/entity/entity.go @@ -35,3 +35,13 @@ const ( CartStatusExpired CartStatus = "expired" CartStatusCheckedOut CartStatus = "checked_out" ) + +func (c CartStatus) IsValid() bool { + switch c { + case CartStatusExpired, CartStatusActive, CartStatusCheckedOut: + return true + + default: + return false + } +} diff --git a/domain/shoppingbasket/service/param.go b/domain/shoppingbasket/service/param.go index f8c589b9..d4061f17 100644 --- a/domain/shoppingbasket/service/param.go +++ b/domain/shoppingbasket/service/param.go @@ -3,31 +3,34 @@ package service import ( "git.gocasts.ir/ebhomengo/niki/domain/shoppingbasket/entity" "git.gocasts.ir/ebhomengo/niki/types" + "time" ) type AddToCartRequest struct { - UserID types.ID `json:"user_id"` - ProductID types.ID `json:"product_id"` - Quantity int `json:"quantity"` - Price types.Price `json:"price"` - Name string `json:"name"` -} - -type GetCartResponse struct { - UserID types.ID `json:"user_id"` - Items []entity.Item `json:"items"` - TotalPrice types.Price `json:"total_price"` - CreatedAt int64 `json:"created_at"` - ExpireAt int64 `json:"expire_at"` -} - -type RemoveFromCartRequest struct { - UserID types.ID `json:"user_id"` - ProductID types.ID `json:"product_id"` -} - -type UpdateQuantityRequest struct { UserID types.ID `json:"user_id"` ProductID types.ID `json:"product_id"` Quantity int `json:"quantity"` + Price float64 `json:"price"` + Name string `json:"name"` +} + +type GetCartResponse struct { + ID types.ID `json:"id"` + UserID types.ID `json:"user_id"` + Items []entity.Item `json:"items"` + TotalPrice float64 `json:"total_price"` + Status string `json:"status"` + CreatedAt time.Time `json:"created_at"` + ExpireAt time.Time `json:"expire_at"` +} + +type RemoveFromCartRequest struct { + CartID types.ID `json:"cart_id"` + ItemID types.ID `json:"item_id"` +} + +type UpdateQuantityRequest struct { + CartID types.ID `json:"cart_id"` + ItemID types.ID `json:"item_id"` + Quantity int `json:"quantity"` } diff --git a/domain/shoppingbasket/service/service.go b/domain/shoppingbasket/service/service.go index 90eb7e08..5a2ea74d 100644 --- a/domain/shoppingbasket/service/service.go +++ b/domain/shoppingbasket/service/service.go @@ -40,7 +40,7 @@ func (s Service) AddToBasket(ctx context.Context, req AddToCartRequest) error { Quantity: req.Quantity, Price: req.Price, Name: req.Name, - AddedAt: time.Now().UnixNano(), + AddedAt: time.Now().UTC(), }) } @@ -58,9 +58,11 @@ func (s Service) GetCart(ctx context.Context, userID types.ID) (GetCartResponse, } return GetCartResponse{ + ID: res.ID, UserID: res.UserID, Items: res.Items, TotalPrice: res.TotalPrice, + Status: string(res.Status), CreatedAt: res.CreatedAt, ExpireAt: res.ExpireAt, }, nil @@ -74,7 +76,7 @@ func (s Service) RemoveFromCart(ctx context.Context, req RemoveFromCartRequest) return err } - return s.repo.DeleteItem(ctx, req.UserID, req.ProductID) + return s.repo.DeleteItem(ctx, req.CartID, req.ItemID) } func (s Service) UpdateQuantity(ctx context.Context, req UpdateQuantityRequest) error { @@ -86,13 +88,13 @@ func (s Service) UpdateQuantity(ctx context.Context, req UpdateQuantityRequest) } if req.Quantity == 0 { - return s.repo.DeleteItem(ctx, req.UserID, req.ProductID) + return s.repo.DeleteItem(ctx, req.CartID, req.ItemID) } - return s.repo.UpdateQuantity(ctx, req.UserID, req.ProductID, req.Quantity) + return s.repo.UpdateQuantity(ctx, req.CartID, req.ItemID, req.Quantity) } -func (s Service) ClearCart(ctx context.Context, userID types.ID) error { +func (s Service) ClearCart(ctx context.Context, cartID, userID types.ID) error { const op = "shoppingbaskerapp.service.ClearCart" if userID < 1 { @@ -101,5 +103,14 @@ func (s Service) ClearCart(ctx context.Context, userID types.ID) error { WithMessage("invalid user id") } - return s.repo.DeleteCart(ctx, userID) + return s.repo.DeleteCart(ctx, cartID, userID) +} + +func (s Service) UpdateCartStatus(ctx context.Context, cartID types.ID, status entity.CartStatus) error { + const op = "shoppingbaskerapp.service.ClearCart" + if !status.IsValid() { + return richerror.New(op).WithKind(richerror.KindInvalid).WithMessage("invalid status") + } + + return s.repo.UpdateStatus(ctx, cartID, status) }