Files
IP-test/src/main/java/ru/ip/example/service/impl/SeazonServiceImpl.java
2025-05-18 10:12:33 +04:00

86 lines
2.7 KiB
Java

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<SeazonDto> findAll() {
Iterable<SeazonEntity> seazons = seazonRepository.findAll();
List<SeazonDto> 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<SeazonEntity> 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());
}
}