| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 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) GetOrder(id string) (*model.Order, error) {
- 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)
- }
|