11package cashier
22
33import (
4+ "errors"
45 "fmt"
56 "hackbar-copilot/internal/domain/checkout"
67 "hackbar-copilot/internal/domain/order"
8+ usecaseutils "hackbar-copilot/internal/usecase/utils"
79 "time"
810
911 "github.com/google/uuid"
@@ -28,13 +30,17 @@ func (c *cashier) Checkout(
2830 orderIDsMap [id ] = true
2931 }
3032
31- for order , err := range c .order .Latest (order .IgnoreCheckedOut ()) {
33+ for order_ , err := range c .order .Latest (order .IgnoreCheckedOut ()) {
3234 if err != nil {
3335 return checkout.Checkout {}, err
3436 }
35- if /* specified order */ orderIDsMap [order .ID ] {
36- newCheckout .TotalPrice += order .Price
37- delete (orderIDsMap , order .ID )
37+ if /* specified order */ orderIDsMap [order_ .ID ] {
38+ newCheckout .TotalPrice += order_ .Price
39+ delete (orderIDsMap , order_ .ID )
40+ _ , err := updateOrderStatus (c .order , order_ .ID , order .StatusCheckedOut , newCheckout .Timestamp )
41+ if err != nil {
42+ return checkout.Checkout {}, err
43+ }
3844 }
3945 }
4046 for notFoundOrderID := range orderIDsMap {
@@ -51,3 +57,25 @@ func (c *cashier) Checkout(
5157 }
5258 return newCheckout , nil
5359}
60+
61+ func updateOrderStatus (order_ order.SaveFindListListener , id order.ID , status order.Status , timestamp time.Time ) (order.Order , error ) {
62+ o , err := order_ .Find (id )
63+ if err != nil {
64+ if errors .Is (err , order .ErrNotFound ) {
65+ return order.Order {}, usecaseutils .ErrNotFound
66+ }
67+ return order.Order {}, err
68+ }
69+
70+ o .Status = status
71+ o .Timestamps = append (o .Timestamps , order.StatusUpdateTimestamp {
72+ Status : status ,
73+ Timestamp : timestamp ,
74+ })
75+
76+ err = order_ .Save (o )
77+ if err != nil {
78+ return order.Order {}, err
79+ }
80+ return o , nil
81+ }
0 commit comments