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 }