/
java56
/
Hotels
Обзор
Документация
Войти
/
java56
/
Hotels
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/org/mikhail/service/HotelService.java
111 строк
4 KB
Mikhail Gorbatenkov
45 - edit a hotel service
03 фев 2025, 13:16
03 фев 2025, 13:16
c7e9b73
Код
Авторство
О чём код?
package org.mikhail.service; import io.quarkus.panache.common.Page; import io.quarkus.panache.common.Sort; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.transaction.Transactional; import lombok.extern.slf4j.Slf4j; import org.mikhail.dto.HotelDTO; import org.mikhail.dto.response.HotelResponseDTO; import org.mikhail.entity.AddressEntity; import org.mikhail.entity.HotelEntity; import org.mikhail.entity.SortOrder; import org.mikhail.exceptions.AddressLinkedToHotelException; import org.mikhail.exceptions.AddressNotFoundException; import org.mikhail.exceptions.HotelNotFoundException; import org.mikhail.mapper.HotelMapper; import org.mikhail.repository.AddressRepository; import org.mikhail.repository.HotelRepository; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @Slf4j @ApplicationScoped public class HotelService { private final HotelRepository hotelRepository; private final AddressRepository addressRepository; private final HotelMapper hotelMapper; @Inject public HotelService(HotelRepository hotelRepository, AddressRepository addressRepository, HotelMapper hotelMapper) { this.hotelRepository = hotelRepository; this.addressRepository = addressRepository; this.hotelMapper = hotelMapper; } /** * Добавление отеля в базу данных * * @param hotelDTO объект для передачи данных * @return объект, содержащий информацию о созданном отеле */ @Transactional public HotelResponseDTO addHotel(HotelDTO hotelDTO) { AddressEntity address = addressRepository.findById(hotelDTO.getAddressId()); if (address == null) { throw new AddressNotFoundException("Адрес отеля не найден."); } Optional<HotelEntity> existingHotel = hotelRepository.findByAddress(address); if (existingHotel.isPresent()) { throw new AddressLinkedToHotelException("Этот адрес уже привязан к другому отелю."); } HotelEntity hotel = hotelMapper.toEntity(hotelDTO); hotel.setAddress(address); hotelRepository.persist(hotel); return new HotelResponseDTO(hotel.getId(), hotel.getName()); } /** * Удаление отеля по идентификатору * * @param id идентификатор отеля * @return сообщение, уведомляющее об успешном удалении отеля */ @Transactional public String deleteHotel(Long id) { HotelEntity hotel = hotelRepository.findById(id); if (hotel == null) { throw new HotelNotFoundException("Отель с id = " + id + " не найден."); } hotelRepository.delete(hotel); return "Отель успешно удален"; } /** * Получение списка всех отелей * * @return список отелей, имеющихся в базе данных */ public List<HotelDTO> getAllHotels() { return hotelRepository.listAll() .stream() .map(hotelMapper::toDto) .collect(Collectors.toList()); } /** * Получение списка отелей с пагинацией и сортировкой * * @param page номер страницы (начиная с 0) * @param size количество элементов на странице * @param sortOrder порядок сортировки * @return список отелей с учетом пагинации и сортировки */ public List<HotelDTO> getHotelsPaged(int page, int size, SortOrder sortOrder) { String sortField = "name"; return hotelRepository.findAll(Sort.by(sortField, sortOrder.getDirection())) .page(Page.of(page, size)) .stream() .map(hotelMapper::toDto) .collect(Collectors.toList()); } }