package ru.ulstu.meeting; import jakarta.transaction.Transactional; import jakarta.validation.constraints.NotNull; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import ru.ulstu.news.model.News; import ru.ulstu.news.service.NewsService; @Service public class MeetingService { private final MeetingRepository meetingRepository; private final NewsService newsService; public MeetingService(MeetingRepository meetingRepository, NewsService newsService) { this.meetingRepository = meetingRepository; this.newsService = newsService; } @Transactional public Meeting create(Meeting meeting) { meeting = meetingRepository.save(meeting); News news = newsService.create("Объявление о заседании семинара", meeting); meeting.setNews(news); return save(meeting); } public Meeting save(Meeting meeting) { if (meeting.getNewsId() != null) { meeting.setNews(newsService.getById(meeting.getNewsId())); } return (meeting.getId() != null && (meeting.getId() != 0)) ? meetingRepository.save(meeting) : create(meeting); } public Meeting getById(@NotNull Integer id) { return meetingRepository .findById(id) .orElseThrow(() -> new RuntimeException("Запись о заседании не найдена")); } @Transactional public void delete(Integer id) { Meeting meeting = meetingRepository.getById(id); if (meeting.getNews() != null) { newsService.delete(meeting.getNews().getId()); } meetingRepository.deleteById(id); } public Page getMeetings(Pageable pageable) { return meetingRepository.findByOrderByDateDesc(pageable); } }