Sobes.tech
Junior — Senior
50

Какой вывод получит программа №35

Компании, где спрашивали:

МТС CloudМТС Cloud
Условие задачи

Определите, какой текст будет напечатан в консоли после выполнения программы. Укажите, присутствуют ли в коде ошибки.

import java.net.IDN;

type OrderSrv struct {
    FlightSrv      BookingService
    AccountSrv     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, *BookingSrvError)
}

type BookingSrvError struct {
    error
    TryAgain bool
}

func (s *OrderSrv) HandleBookingOrder(user User) *Receipt {
    receiptInfo := Receipt{ID: uuid.New().String()}

    if err := s.AccountSrv.LockUser(user); err != nil {
        log.Logger.Err(err)
        return nil
    }
    for {
        flightCode, err := s.FlightSrv.BookFlight()

        switch {
        case err == nil:
            receiptInfo.BookedAt = time.Now().Format(time.RFC3339)
            receiptInfo.BookingCode = flightCode
            return &receiptInfo
        case err.TryAgain:
        default:
            log.Logger.Err(err)
            break
        }
    }

    if err := s.AccountSrv.UnlockUser(user); err != nil {
        log.Logger.Err(err)
        return nil
    }
    return &receiptInfo
}