Sobes.tech
Back to questions
Senior
2

Где должна находиться бизнес-валидация (например, проверка дат, лимит бронирования на 10 дней)? В хендлере или в сервисе?

Companies where asked
2gis2gis

Answer from AI

sobes.tech 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 {
        // обработка ошибки
    }
}