Sobes.tech
Senior

Unde trebuie să se afle validarea de business (de exemplu, verificarea datelor, limita de rezervare de 10 zile)? În handler sau în serviciu?

sobes.tech AI

Răspuns de la AI

Бизнес-валидация, такая как проверка дат или ограничение бронирования на 10 дней, должна находиться в сервисном слое, а не в хендлере. Хендлер отвечает за прием и передачу данных, обработку HTTP-запросов, а сервис — за бизнес-логику и правила. Это позволяет централизовать бизнес-правила, облегчить тестирование и повторное использование логики.

Пример:

func (s *BookingService) CreateBooking(req BookingRequest) error {
    if req.EndDate.Sub(req.StartDate).Hours()/24 > 10 {
        return errors.New("бронирование не может превышать 10 дней")
    }
    // другая бизнес-логика
    return s.repo.Save(req)
}

// В хендлере просто вызываем сервис
func (h *Handler) CreateBookingHandler(w http.ResponseWriter, r *http.Request) {
    var req BookingRequest
    // парсим запрос
    err := h.service.CreateBooking(req)
    if err != nil {
        // обработка ошибки
    }
}