| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package repository
- import (
- "sync"
- "time"
- "job-cheng-xing/model"
- )
- type MemoryRepo struct {
- mu sync.RWMutex
- orders map[string]*model.Order
- }
- func NewMemoryRepo() *MemoryRepo {
- return &MemoryRepo{orders: make(map[string]*model.Order)}
- }
- func (r *MemoryRepo) Create(order *model.Order) error {
- r.mu.Lock()
- defer r.mu.Unlock()
- if _, exists := r.orders[order.ID]; exists {
- return model.NewAppError("conflict", "订单已存在", 409)
- }
- clone := *order
- r.orders[order.ID] = &clone
- return nil
- }
- func (r *MemoryRepo) FindByID(id string) (*model.Order, error) {
- r.mu.RLock()
- defer r.mu.RUnlock()
- order, ok := r.orders[id]
- if !ok {
- return nil, model.ErrNotFound
- }
- clone := *order
- return &clone, nil
- }
- func (r *MemoryRepo) Update(id string, oldStatus model.OrderStatus, newOrder *model.Order) error {
- r.mu.Lock()
- defer r.mu.Unlock()
- current, ok := r.orders[id]
- if !ok {
- return model.ErrNotFound
- }
- if current.Status != oldStatus {
- return model.ErrStatusConflict
- }
- current.Status = newOrder.Status
- if newOrder.ProviderID != nil {
- current.ProviderID = newOrder.ProviderID
- }
- current.UpdatedAt = time.Now()
- return nil
- }
|