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