db addition

This commit is contained in:
2025-05-18 09:47:22 +04:00
parent f2dedcc85b
commit 9754ee3bbd
18 changed files with 94 additions and 276 deletions

10
pom.xml
View File

@@ -35,6 +35,16 @@
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency> <dependency>
<groupId>org.springdoc</groupId> <groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>

View File

@@ -1,5 +1,11 @@
package ru.ip.example.domain.entity; package ru.ip.example.domain.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
@@ -7,9 +13,13 @@ import lombok.ToString;
import java.util.List; import java.util.List;
@Data @Data
@Entity
@Table(name = "film")
@EqualsAndHashCode(onlyExplicitlyIncluded = true) @EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class FilmEntity { public class FilmEntity {
@Id
@GeneratedValue
@EqualsAndHashCode.Include @EqualsAndHashCode.Include
private Integer id; private Integer id;
@@ -20,5 +30,7 @@ public class FilmEntity {
private Integer releaseYear; private Integer releaseYear;
@ToString.Exclude @ToString.Exclude
@OneToMany
@JoinColumn(name = "film_id", referencedColumnName = "id")
private List<SeazonEntity> seazons; private List<SeazonEntity> seazons;
} }

View File

@@ -1,5 +1,11 @@
package ru.ip.example.domain.entity; package ru.ip.example.domain.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
@@ -7,14 +13,20 @@ import lombok.ToString;
import java.util.List; import java.util.List;
@Data @Data
@Entity
@Table(name = "seazon")
@EqualsAndHashCode(onlyExplicitlyIncluded = true) @EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class SeazonEntity { public class SeazonEntity {
@Id
@GeneratedValue
@EqualsAndHashCode.Include @EqualsAndHashCode.Include
private Integer id; private Integer id;
private Integer number; private Integer number;
@ToString.Exclude @ToString.Exclude
@OneToMany
@JoinColumn(name = "seazon_id", referencedColumnName = "id")
private List<SeriesEntity> series; private List<SeriesEntity> series;
} }

View File

@@ -1,14 +1,22 @@
package ru.ip.example.domain.entity; package ru.ip.example.domain.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Objects; import java.util.Objects;
@Data @Data
@Entity
@Table(name = "series")
@EqualsAndHashCode(onlyExplicitlyIncluded = true) @EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class SeriesEntity { public class SeriesEntity {
@Id
@GeneratedValue
@EqualsAndHashCode.Include @EqualsAndHashCode.Include
private Integer id; private Integer id;

View File

@@ -1,12 +1,20 @@
package ru.ip.example.domain.entity; package ru.ip.example.domain.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@Data @Data
@Entity
@Table(name = "subscribe")
@EqualsAndHashCode(onlyExplicitlyIncluded = true) @EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class SubscribeEntity { public class SubscribeEntity {
@Id
@GeneratedValue
@EqualsAndHashCode.Include @EqualsAndHashCode.Include
private Integer id; private Integer id;

View File

@@ -1,15 +1,8 @@
package ru.ip.example.repository; package ru.ip.example.repository;
import org.springframework.data.repository.CrudRepository;
import ru.ip.example.domain.entity.FilmEntity; import ru.ip.example.domain.entity.FilmEntity;
import java.util.List; import java.util.List;
public interface FilmRepository { public interface FilmRepository extends CrudRepository<FilmEntity, Integer> {
FilmEntity save(FilmEntity entity);
List<FilmEntity> findAll();
FilmEntity findById(Integer id);
void deleteById(Integer id);
} }

View File

@@ -1,18 +1,12 @@
package ru.ip.example.repository; package ru.ip.example.repository;
import org.springframework.data.repository.CrudRepository;
import ru.ip.example.domain.SeazonDto; import ru.ip.example.domain.SeazonDto;
import ru.ip.example.domain.entity.FilmEntity;
import ru.ip.example.domain.entity.SeazonEntity; import ru.ip.example.domain.entity.SeazonEntity;
import ru.ip.example.domain.entity.SeriesEntity; import ru.ip.example.domain.entity.SeriesEntity;
import java.util.List; import java.util.List;
public interface SeazonRepository { public interface SeazonRepository extends CrudRepository<SeazonEntity, Integer> {
List<SeazonEntity> findAll();
SeazonEntity findById(Integer id);
SeazonEntity save(SeazonEntity entity);
void delete(Integer id);
} }

View File

@@ -1,16 +1,7 @@
package ru.ip.example.repository; package ru.ip.example.repository;
import org.springframework.data.repository.CrudRepository;
import ru.ip.example.domain.entity.SeriesEntity; import ru.ip.example.domain.entity.SeriesEntity;
import java.util.List; public interface SeriesRepository extends CrudRepository<SeriesEntity, Integer> {
public interface SeriesRepository {
List<SeriesEntity> findAll();
SeriesEntity findById(int id);
SeriesEntity save(SeriesEntity entity);
void delete(Integer id);
} }

View File

@@ -1,16 +1,7 @@
package ru.ip.example.repository; package ru.ip.example.repository;
import org.springframework.data.repository.CrudRepository;
import ru.ip.example.domain.entity.SubscribeEntity; import ru.ip.example.domain.entity.SubscribeEntity;
import java.util.List; public interface SubscribeRepository extends CrudRepository<SubscribeEntity, Integer> {
public interface SubscribeRepository {
SubscribeEntity save(SubscribeEntity entity);
List<SubscribeEntity> findAll();
SubscribeEntity findById(Integer id);
void deleteById(Integer id);
} }

View File

@@ -1,55 +0,0 @@
package ru.ip.example.repository.impl;
import org.springframework.stereotype.Service;
import ru.ip.example.domain.entity.FilmEntity;
import ru.ip.example.repository.FilmRepository;
import java.util.ArrayList;
import java.util.List;
@Service
public class FilmRepositoryDao implements FilmRepository {
private static Integer idSequence = 0;
private static List<FilmEntity> films = new ArrayList<>();
@Override
public FilmEntity save(FilmEntity entity) {
if (entity.getId() == null) {
entity.setSeazons(new ArrayList<>());
entity.setId(idSequence++);
films.add(entity);
} else if (films.contains(entity)) {
FilmEntity film = findById(entity.getId());
film.setCategory(entity.getCategory());
film.setTitle(entity.getTitle());
film.setReleaseYear(entity.getReleaseYear());
}
System.out.println("save/upd film: " + entity);
return entity;
}
@Override
public List<FilmEntity> findAll() {
return films;
}
@Override
public FilmEntity findById(Integer id) {
for (FilmEntity film : films) {
if (film.getId().equals(id)) {
return film;
}
}
return null;
}
//equals реализован только с id, поэтому для remove в entity проставляем только id
@Override
public void deleteById(Integer id) {
FilmEntity filmEntity = new FilmEntity();
filmEntity.setId(id);
films.remove(filmEntity);
}
}

View File

@@ -1,54 +0,0 @@
package ru.ip.example.repository.impl;
import org.springframework.stereotype.Service;
import ru.ip.example.domain.entity.SeazonEntity;
import ru.ip.example.repository.SeazonRepository;
import java.util.ArrayList;
import java.util.List;
@Service
public class SeazonRepositoryDao implements SeazonRepository {
private static Integer SEAZON_SEQ = 0;
public static List<SeazonEntity> seazons = new ArrayList<>();
@Override
public List<SeazonEntity> findAll() {
return seazons;
}
@Override
public SeazonEntity findById(Integer id) {
SeazonEntity seazonEntity = new SeazonEntity();
seazonEntity.setId(id);
for (SeazonEntity seazon : seazons) {
if (seazon.equals(seazonEntity)) {
return seazon;
}
}
return null;
}
@Override
public SeazonEntity save(SeazonEntity entity) {
if (entity.getId() == null) {
entity.setSeries(new ArrayList<>());
entity.setId(SEAZON_SEQ++);
seazons.add(entity);
} else if (seazons.contains(entity)) {
SeazonEntity seazon = findById(entity.getId());
seazon.setNumber(entity.getNumber());
}
System.out.println("save/upd seazon: " + entity);
return entity;
}
@Override
public void delete(Integer id) {
SeazonEntity seazon = new SeazonEntity();
seazon.setId(id);
seazons.remove(seazon);
}
}

View File

@@ -1,54 +0,0 @@
package ru.ip.example.repository.impl;
import org.springframework.stereotype.Service;
import ru.ip.example.domain.entity.SeriesEntity;
import ru.ip.example.repository.SeriesRepository;
import java.util.ArrayList;
import java.util.List;
@Service
public class SerialRepositoryDao implements SeriesRepository {
public static List<SeriesEntity> series = new ArrayList<>();
private static Integer SERIES_SEQ = 0;
@Override
public List<SeriesEntity> findAll() {
return series;
}
@Override
public SeriesEntity findById(int id) {
SeriesEntity seriesEntity = new SeriesEntity();
seriesEntity.setId(id);
for (SeriesEntity ser : series) {
if (ser.equals(seriesEntity)) {
return ser;
}
}
return null;
}
@Override
public SeriesEntity save(SeriesEntity entity) {
if (entity.getId() == null) {
entity.setId(SERIES_SEQ++);
series.add(entity);
} else if (series.contains(entity)) {
SeriesEntity series1 = findById(entity.getId());
series1.setName(entity.getName());
series1.setNumber(entity.getNumber());
}
System.out.println("save/upd series: " + entity);
return entity;
}
@Override
public void delete(Integer id) {
SeriesEntity seriesEntity = new SeriesEntity();
seriesEntity.setId(id);
series.remove(seriesEntity);
}
}

View File

@@ -1,53 +0,0 @@
package ru.ip.example.repository.impl;
import org.springframework.stereotype.Service;
import ru.ip.example.domain.entity.SubscribeEntity;
import ru.ip.example.repository.SubscribeRepository;
import java.util.ArrayList;
import java.util.List;
@Service
public class SubscribeRepositoryDao implements SubscribeRepository {
private static Integer idSequence = 0;
private static List<SubscribeEntity> subscribes = new ArrayList<>();
@Override
public SubscribeEntity save(SubscribeEntity entity) {
if (entity.getId() == null) {
entity.setId(idSequence++);
subscribes.add(entity);
} else if (subscribes.contains(entity)) {
SubscribeEntity film = findById(entity.getId());
film.setName(entity.getName());
film.setSum(entity.getSum());
}
System.out.println("save/upd film: " + entity);
return entity;
}
@Override
public List<SubscribeEntity> findAll() {
return subscribes;
}
@Override
public SubscribeEntity findById(Integer id) {
for (SubscribeEntity sub : subscribes) {
if (sub.getId().equals(id)) {
return sub;
}
}
return null;
}
//equals реализован только с id, поэтому для remove в entity проставляем только id
@Override
public void deleteById(Integer id) {
SubscribeEntity SubscribeEntity = new SubscribeEntity();
SubscribeEntity.setId(id);
subscribes.remove(SubscribeEntity);
}
}

View File

@@ -6,6 +6,7 @@ import ru.ip.example.domain.AddSeazonDto;
import ru.ip.example.domain.FilmDto; import ru.ip.example.domain.FilmDto;
import ru.ip.example.domain.entity.FilmEntity; import ru.ip.example.domain.entity.FilmEntity;
import ru.ip.example.domain.entity.SeazonEntity; import ru.ip.example.domain.entity.SeazonEntity;
import ru.ip.example.domain.entity.SeriesEntity;
import ru.ip.example.mapper.FilmMapper; import ru.ip.example.mapper.FilmMapper;
import ru.ip.example.repository.FilmRepository; import ru.ip.example.repository.FilmRepository;
import ru.ip.example.repository.SeazonRepository; import ru.ip.example.repository.SeazonRepository;
@@ -41,7 +42,7 @@ public class FilmServiceImpl implements FilmService {
@Override @Override
public List<FilmDto> findAllFilms() { public List<FilmDto> findAllFilms() {
List<FilmEntity> filmEntities = filmRepository.findAll(); Iterable<FilmEntity> filmEntities = filmRepository.findAll();
List<FilmDto> films = new ArrayList<>(); List<FilmDto> films = new ArrayList<>();
for (FilmEntity entity : filmEntities) { for (FilmEntity entity : filmEntities) {
FilmDto dto = filmMapper.toDto(entity); FilmDto dto = filmMapper.toDto(entity);
@@ -52,7 +53,7 @@ public class FilmServiceImpl implements FilmService {
@Override @Override
public FilmDto findFilmById(Integer id) { public FilmDto findFilmById(Integer id) {
FilmEntity film = filmRepository.findById(id); FilmEntity film = filmRepository.findById(id).orElseThrow();
return filmMapper.toDto(film); return filmMapper.toDto(film);
} }
@@ -63,12 +64,14 @@ public class FilmServiceImpl implements FilmService {
@Override @Override
public FilmDto addSeazon(AddSeazonDto addSeazonDto) { public FilmDto addSeazon(AddSeazonDto addSeazonDto) {
SeazonEntity seazonEntity = seazonRepository.findById(addSeazonDto.getSeazonId()); var film = filmRepository.findById(addSeazonDto.getFilmId());
FilmEntity film = filmRepository.findById(addSeazonDto.getFilmId()); var seazon = seazonRepository.findById(addSeazonDto.getSeazonId());
if (seazonEntity != null && film != null && !film.getSeazons().contains(seazonEntity)) { if (film.isPresent() && seazon.isPresent() && !seazon.get().getSeries().contains(film.get())) {
film.getSeazons().add(seazonEntity); film.get().getSeazons().add(seazon.get());
FilmEntity save = filmRepository.save(film.get());
return filmMapper.toDto(save);
} }
return filmMapper.toDto(film); return filmMapper.toDto(film.get());
} }
} }

View File

@@ -13,6 +13,7 @@ import ru.ip.example.service.SeazonService;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -26,7 +27,7 @@ public class SeazonServiceImpl implements SeazonService {
@Override @Override
public List<SeazonDto> findAll() { public List<SeazonDto> findAll() {
List<SeazonEntity> seazons = seazonRepository.findAll(); Iterable<SeazonEntity> seazons = seazonRepository.findAll();
List<SeazonDto> seazonDtos = new ArrayList<>(); List<SeazonDto> seazonDtos = new ArrayList<>();
for(SeazonEntity seazon : seazons) { for(SeazonEntity seazon : seazons) {
seazonDtos.add(seazonMapper.toDto(seazon)); seazonDtos.add(seazonMapper.toDto(seazon));
@@ -36,7 +37,7 @@ public class SeazonServiceImpl implements SeazonService {
@Override @Override
public SeazonDto findById(Integer id) { public SeazonDto findById(Integer id) {
SeazonEntity seazon = seazonRepository.findById(id); SeazonEntity seazon = seazonRepository.findById(id).orElseThrow();
return seazonMapper.toDto(seazon); return seazonMapper.toDto(seazon);
} }
@@ -57,17 +58,21 @@ public class SeazonServiceImpl implements SeazonService {
@Override @Override
public void delete(Integer id) { public void delete(Integer id) {
seazonRepository.delete(id); Optional<SeazonEntity> seazon = seazonRepository.findById(id);
seazon.ifPresent(seazonRepository::delete);
} }
@Override @Override
public SeazonDto addSeries(AddSeriesDto dto) { public SeazonDto addSeries(AddSeriesDto dto) {
SeriesEntity series = seriesRepository.findById(dto.getSeriesId()); var series = seriesRepository.findById(dto.getSeriesId());
SeazonEntity seazon = seazonRepository.findById(dto.getSeazonId()); var seazon = seazonRepository.findById(dto.getSeazonId());
if (series != null && seazon != null && !seazon.getSeries().contains(series)) { if (series.isPresent() && seazon.isPresent() && !seazon.get().getSeries().contains(series.get())) {
seazon.getSeries().add(series);
seazon.get().getSeries().add(series.get());
SeazonEntity seazonEntity = seazonRepository.save(seazon.get());
return seazonMapper.toDto(seazonEntity);
} }
return seazonMapper.toDto(seazon); return seazonMapper.toDto(seazon.get());
} }
} }

View File

@@ -23,7 +23,7 @@ public class SeriesServiceImpl implements SeriesService {
@Override @Override
public List<SeriesDto> findAll() { public List<SeriesDto> findAll() {
List<SeriesEntity> series = seriesRepository.findAll(); Iterable<SeriesEntity> series = seriesRepository.findAll();
List<SeriesDto> seriesDtos = new ArrayList<>(); List<SeriesDto> seriesDtos = new ArrayList<>();
for(SeriesEntity seazon : series) { for(SeriesEntity seazon : series) {
seriesDtos.add(seriesMapper.toDto(seazon)); seriesDtos.add(seriesMapper.toDto(seazon));
@@ -33,7 +33,7 @@ public class SeriesServiceImpl implements SeriesService {
@Override @Override
public SeriesDto findById(Integer id) { public SeriesDto findById(Integer id) {
SeriesEntity series = seriesRepository.findById(id); SeriesEntity series = seriesRepository.findById(id).orElseThrow();
return seriesMapper.toDto(series); return seriesMapper.toDto(series);
} }
@@ -54,6 +54,7 @@ public class SeriesServiceImpl implements SeriesService {
@Override @Override
public void delete(Integer id) { public void delete(Integer id) {
seriesRepository.delete(id); seriesRepository.findById(id)
.ifPresent(seriesRepository::delete);
} }
} }

View File

@@ -36,7 +36,7 @@ public class SubscribeServiceImpl implements SubscribeService {
@Override @Override
public List<SubscribeDto> findAllSubscribes() { public List<SubscribeDto> findAllSubscribes() {
List<SubscribeEntity> subscribeEntities = subscribeRepository.findAll(); Iterable<SubscribeEntity> subscribeEntities = subscribeRepository.findAll();
List<SubscribeDto> subscribes = new ArrayList<>(); List<SubscribeDto> subscribes = new ArrayList<>();
for (SubscribeEntity entity : subscribeEntities) { for (SubscribeEntity entity : subscribeEntities) {
SubscribeDto dto = subscribeMapper.toDto(entity); SubscribeDto dto = subscribeMapper.toDto(entity);
@@ -47,7 +47,7 @@ public class SubscribeServiceImpl implements SubscribeService {
@Override @Override
public SubscribeDto findSubscribeById(Integer id) { public SubscribeDto findSubscribeById(Integer id) {
SubscribeEntity subscribe = subscribeRepository.findById(id); SubscribeEntity subscribe = subscribeRepository.findById(id).orElseThrow();
return subscribeMapper.toDto(subscribe); return subscribeMapper.toDto(subscribe);
} }

View File

@@ -1 +1,7 @@
spring.application.name=example spring.application.name=example
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true