(код без описания)
Условие
Заголовок раздела «Условие»(код без описания)
type OrderService struct { BookingService BookingService UserService UserService}
type UserService interface { LockUser(User) error UnlockUser(User) error}
type User struct { ID string}
type Receipt struct { ID string BookingCode string BookedAt string}
type BookingService interface { BookFlight() (string, *BookingServiceError)}
type BookingServiceError struct { error TryAgain bool}
func (s *OrderService) HandleBookingOrder(user User) *Receipt { receipt := Receipt{ID: uuid.New().String()} if err := s.UserService.LockUser(user); err != nil { log.Logger.Err(err) return nil } for { bookingCode, err := s.BookingService.BookFlight()
switch { case err == nil: receipt.BookedAt = time.Now().Format(time.RFC3339) receipt.BookingCode = bookingCode return &receipt case err.TryAgain: default: log.Logger.Err(err) break } } if err := s.UserService.UnlockUser(user); err != nil { log.Logger.Err(err) return nil }
return &receipt}Решение
Заголовок раздела «Решение»Источник: MTS / МТС (Cloud)
← Провести ревью кода и затем пофиксить. · Все задачи · Go · (код без описания) →