This commit is contained in:
22
main.go
22
main.go
@@ -22,7 +22,7 @@ func init() {
|
||||
|
||||
type PersistingOrderHandler struct {
|
||||
mu sync.RWMutex
|
||||
Orders []Order `json:"orders"`
|
||||
Orders map[string]Order `json:"orders"`
|
||||
fileName string
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ func (h *PersistingOrderHandler) Load() error {
|
||||
tmp := Order{}
|
||||
for err == nil {
|
||||
if err = enc.Decode(&tmp); err == nil {
|
||||
h.Orders = append(h.Orders, tmp)
|
||||
h.Orders[tmp.ID] = tmp
|
||||
}
|
||||
}
|
||||
enc = nil
|
||||
@@ -62,12 +62,8 @@ func (h *PersistingOrderHandler) Load() error {
|
||||
func (h *PersistingOrderHandler) GetById(id string) (*Order, bool) {
|
||||
h.mu.RLock()
|
||||
defer h.mu.RUnlock()
|
||||
for _, curr := range h.Orders {
|
||||
if curr.ID == id {
|
||||
return &curr, true
|
||||
}
|
||||
}
|
||||
return nil, false
|
||||
order, ok := h.Orders[id]
|
||||
return &order, ok
|
||||
}
|
||||
|
||||
func (h *PersistingOrderHandler) Save() error {
|
||||
@@ -98,14 +94,18 @@ func (h *PersistingOrderHandler) Save() error {
|
||||
func (h *PersistingOrderHandler) GetLatest() []Order {
|
||||
h.mu.RLock()
|
||||
defer h.mu.RUnlock()
|
||||
return h.Orders
|
||||
ret := make([]Order, 0, len(h.Orders))
|
||||
for _, order := range h.Orders {
|
||||
ret = append(ret, order)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (h *PersistingOrderHandler) OrderPlaced(order Order) {
|
||||
// Here you would implement the logic to persist the order
|
||||
log.Printf("Order placed: %s", order.ID)
|
||||
h.mu.Lock()
|
||||
h.Orders = append(h.Orders, order)
|
||||
h.Orders[order.ID] = order
|
||||
h.mu.Unlock()
|
||||
go func() {
|
||||
err := h.Save()
|
||||
@@ -118,7 +118,7 @@ func (h *PersistingOrderHandler) OrderPlaced(order Order) {
|
||||
|
||||
func main() {
|
||||
handler := &PersistingOrderHandler{
|
||||
Orders: make([]Order, 0),
|
||||
Orders: make(map[string]Order),
|
||||
mu: sync.RWMutex{},
|
||||
fileName: "data/order.dbz",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user