package ru.ip.example.service.impl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.ip.example.domain.AddSeriesDto; import ru.ip.example.domain.SeazonDto; import ru.ip.example.domain.entity.SeazonEntity; import ru.ip.example.domain.entity.SeriesEntity; import ru.ip.example.mapper.SeazonMapper; import ru.ip.example.repository.SeazonRepository; import ru.ip.example.repository.SeriesRepository; import ru.ip.example.service.SeazonService; import java.util.ArrayList; import java.util.List; import java.util.Optional; @Service @RequiredArgsConstructor public class SeazonServiceImpl implements SeazonService { private final SeazonRepository seazonRepository; private final SeazonMapper seazonMapper; private final SeriesRepository seriesRepository; @Transactional(readOnly = true) @Override public List findAll() { Iterable seazons = seazonRepository.findAll(); List seazonDtos = new ArrayList<>(); for(SeazonEntity seazon : seazons) { seazonDtos.add(seazonMapper.toDto(seazon)); } return seazonDtos; } @Transactional(readOnly = true) @Override public SeazonDto findById(Integer id) { SeazonEntity seazon = seazonRepository.findById(id).orElseThrow(); return seazonMapper.toDto(seazon); } @Transactional @Override public SeazonDto save(SeazonDto dto) { SeazonEntity entity = seazonMapper.toEntity(dto); SeazonEntity savedEntity = seazonRepository.save(entity); return seazonMapper.toDto(savedEntity); } @Transactional @Override public SeazonDto update(Integer id, SeazonDto dto) { SeazonEntity entity = seazonMapper.toEntity(dto); entity.setId(id); SeazonEntity savedEntity = seazonRepository.save(entity); return seazonMapper.toDto(savedEntity); } @Transactional @Override public void delete(Integer id) { Optional seazon = seazonRepository.findById(id); seazon.ifPresent(seazonRepository::delete); } @Transactional @Override public SeazonDto addSeries(AddSeriesDto dto) { var series = seriesRepository.findById(dto.getSeriesId()); var seazon = seazonRepository.findById(dto.getSeazonId()); if (series.isPresent() && seazon.isPresent() && !seazon.get().getSeries().contains(series.get())) { seazon.get().getSeries().add(series.get()); SeazonEntity seazonEntity = seazonRepository.save(seazon.get()); return seazonMapper.toDto(seazonEntity); } return seazonMapper.toDto(seazon.get()); } }