Skip to content

Commit 606d8ae

Browse files
committed
feat(checkout): update status checkedout
1 parent 3f8dc54 commit 606d8ae

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

internal/usecase/cashier/cashier.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (d Dependencies) validate() {
4343
}
4444

4545
type cashier struct {
46-
order order.Lister
46+
order order.SaveFindListListener
4747
checkout checkout.SaveLister
4848
cashout cashout.RegisterLister
4949
}

internal/usecase/cashier/checkout.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package cashier
22

33
import (
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

Comments
 (0)