| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package service
- import (
- "time"
- "job-cheng-xing/model"
- "job-cheng-xing/repository"
- "github.com/google/uuid"
- )
- type OrderService struct {
- repo repository.OrderRepository
- }
- func NewOrderService(repo repository.OrderRepository) *OrderService {
- return &OrderService{repo: repo}
- }
- func (s *OrderService) CreateOrder(req model.CreateOrderRequest) (*model.Order, error) {
- now := time.Now()
- order := &model.Order{
- ID: "ord_" + uuid.NewString()[:8],
- Status: model.StatusPending,
- ServiceTime: req.ServiceTime,
- Duration: req.Duration,
- Address: req.Address,
- ProviderID: nil,
- CreatedAt: now,
- UpdatedAt: now,
- }
- if err := s.repo.Create(order); err != nil {
- return nil, err
- }
- return order, nil
- }
- func (s *OrderService) AcceptOrder(id, providerID string) (*model.Order, error) {
- order, err := s.repo.FindByID(id)
- if err != nil {
- return nil, err
- }
- if order.Status == model.StatusCanceled {
- return nil, model.ErrInvalidState("接单")
- }
- if order.Status != model.StatusPending {
- return nil, model.ErrConflict
- }
- pid := providerID
- updated := &model.Order{
- Status: model.StatusAccepted,
- ProviderID: &pid,
- UpdatedAt: time.Now(),
- }
- if err := s.repo.Update(id, model.StatusPending, updated); err != nil {
- return nil, err
- }
- return s.repo.FindByID(id)
- }
- func (s *OrderService) CancelOrder(id string) (*model.Order, error) {
- order, err := s.repo.FindByID(id)
- if err != nil {
- return nil, err
- }
- if order.Status == model.StatusCanceled {
- return nil, model.ErrInvalidState("取消")
- }
- updated := &model.Order{
- Status: model.StatusCanceled,
- UpdatedAt: time.Now(),
- }
- if err := s.repo.Update(id, order.Status, updated); err != nil {
- return nil, err
- }
- return s.repo.FindByID(id)
- }
|