58 lines
1.9 KiB
Java
58 lines
1.9 KiB
Java
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<Meeting> getMeetings(Pageable pageable) {
|
||
return meetingRepository.findByOrderByDateDesc(pageable);
|
||
}
|
||
}
|