diff --git a/main.go b/main.go index d90c022..8375f97 100644 --- a/main.go +++ b/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", }