diff --git a/pom.xml b/pom.xml
index 3a870e1..7eac6f6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,16 @@
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+ runtime
+
+
org.springdoc
springdoc-openapi-starter-webmvc-ui
diff --git a/src/main/java/ru/ip/example/domain/entity/FilmEntity.java b/src/main/java/ru/ip/example/domain/entity/FilmEntity.java
index e1accd9..d102534 100644
--- a/src/main/java/ru/ip/example/domain/entity/FilmEntity.java
+++ b/src/main/java/ru/ip/example/domain/entity/FilmEntity.java
@@ -1,5 +1,11 @@
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.EqualsAndHashCode;
import lombok.ToString;
@@ -7,9 +13,13 @@ import lombok.ToString;
import java.util.List;
@Data
+@Entity
+@Table(name = "film")
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class FilmEntity {
+ @Id
+ @GeneratedValue
@EqualsAndHashCode.Include
private Integer id;
@@ -20,5 +30,7 @@ public class FilmEntity {
private Integer releaseYear;
@ToString.Exclude
+ @OneToMany
+ @JoinColumn(name = "film_id", referencedColumnName = "id")
private List seazons;
}
diff --git a/src/main/java/ru/ip/example/domain/entity/SeazonEntity.java b/src/main/java/ru/ip/example/domain/entity/SeazonEntity.java
index 0400c57..27f3734 100644
--- a/src/main/java/ru/ip/example/domain/entity/SeazonEntity.java
+++ b/src/main/java/ru/ip/example/domain/entity/SeazonEntity.java
@@ -1,5 +1,11 @@
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.EqualsAndHashCode;
import lombok.ToString;
@@ -7,14 +13,20 @@ import lombok.ToString;
import java.util.List;
@Data
+@Entity
+@Table(name = "seazon")
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class SeazonEntity {
+ @Id
+ @GeneratedValue
@EqualsAndHashCode.Include
private Integer id;
private Integer number;
@ToString.Exclude
+ @OneToMany
+ @JoinColumn(name = "seazon_id", referencedColumnName = "id")
private List series;
}
diff --git a/src/main/java/ru/ip/example/domain/entity/SeriesEntity.java b/src/main/java/ru/ip/example/domain/entity/SeriesEntity.java
index 7ef39e4..7099404 100644
--- a/src/main/java/ru/ip/example/domain/entity/SeriesEntity.java
+++ b/src/main/java/ru/ip/example/domain/entity/SeriesEntity.java
@@ -1,14 +1,22 @@
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.EqualsAndHashCode;
import java.util.Objects;
@Data
+@Entity
+@Table(name = "series")
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class SeriesEntity {
+ @Id
+ @GeneratedValue
@EqualsAndHashCode.Include
private Integer id;
diff --git a/src/main/java/ru/ip/example/domain/entity/SubscribeEntity.java b/src/main/java/ru/ip/example/domain/entity/SubscribeEntity.java
index b528955..0a7b025 100644
--- a/src/main/java/ru/ip/example/domain/entity/SubscribeEntity.java
+++ b/src/main/java/ru/ip/example/domain/entity/SubscribeEntity.java
@@ -1,12 +1,20 @@
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.EqualsAndHashCode;
@Data
+@Entity
+@Table(name = "subscribe")
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class SubscribeEntity {
+ @Id
+ @GeneratedValue
@EqualsAndHashCode.Include
private Integer id;
diff --git a/src/main/java/ru/ip/example/repository/FilmRepository.java b/src/main/java/ru/ip/example/repository/FilmRepository.java
index 5486701..234cb54 100644
--- a/src/main/java/ru/ip/example/repository/FilmRepository.java
+++ b/src/main/java/ru/ip/example/repository/FilmRepository.java
@@ -1,15 +1,8 @@
package ru.ip.example.repository;
+import org.springframework.data.repository.CrudRepository;
import ru.ip.example.domain.entity.FilmEntity;
import java.util.List;
-public interface FilmRepository {
-
- FilmEntity save(FilmEntity entity);
-
- List findAll();
-
- FilmEntity findById(Integer id);
-
- void deleteById(Integer id);
+public interface FilmRepository extends CrudRepository {
}
diff --git a/src/main/java/ru/ip/example/repository/SeazonRepository.java b/src/main/java/ru/ip/example/repository/SeazonRepository.java
index 0e555bc..4a1cca4 100644
--- a/src/main/java/ru/ip/example/repository/SeazonRepository.java
+++ b/src/main/java/ru/ip/example/repository/SeazonRepository.java
@@ -1,18 +1,12 @@
package ru.ip.example.repository;
+import org.springframework.data.repository.CrudRepository;
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.SeriesEntity;
import java.util.List;
-public interface SeazonRepository {
-
- List findAll();
-
- SeazonEntity findById(Integer id);
-
- SeazonEntity save(SeazonEntity entity);
-
- void delete(Integer id);
+public interface SeazonRepository extends CrudRepository {
}
diff --git a/src/main/java/ru/ip/example/repository/SeriesRepository.java b/src/main/java/ru/ip/example/repository/SeriesRepository.java
index a557c10..a098427 100644
--- a/src/main/java/ru/ip/example/repository/SeriesRepository.java
+++ b/src/main/java/ru/ip/example/repository/SeriesRepository.java
@@ -1,16 +1,7 @@
package ru.ip.example.repository;
+import org.springframework.data.repository.CrudRepository;
import ru.ip.example.domain.entity.SeriesEntity;
-import java.util.List;
-
-public interface SeriesRepository {
-
- List findAll();
-
- SeriesEntity findById(int id);
-
- SeriesEntity save(SeriesEntity entity);
-
- void delete(Integer id);
+public interface SeriesRepository extends CrudRepository {
}
diff --git a/src/main/java/ru/ip/example/repository/SubscribeRepository.java b/src/main/java/ru/ip/example/repository/SubscribeRepository.java
index 57a74c0..d116ece 100644
--- a/src/main/java/ru/ip/example/repository/SubscribeRepository.java
+++ b/src/main/java/ru/ip/example/repository/SubscribeRepository.java
@@ -1,16 +1,7 @@
package ru.ip.example.repository;
+import org.springframework.data.repository.CrudRepository;
import ru.ip.example.domain.entity.SubscribeEntity;
-import java.util.List;
-
-public interface SubscribeRepository {
-
- SubscribeEntity save(SubscribeEntity entity);
-
- List findAll();
-
- SubscribeEntity findById(Integer id);
-
- void deleteById(Integer id);
+public interface SubscribeRepository extends CrudRepository {
}
diff --git a/src/main/java/ru/ip/example/repository/impl/FilmRepositoryDao.java b/src/main/java/ru/ip/example/repository/impl/FilmRepositoryDao.java
deleted file mode 100644
index 7752e66..0000000
--- a/src/main/java/ru/ip/example/repository/impl/FilmRepositoryDao.java
+++ /dev/null
@@ -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 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 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);
- }
-}
diff --git a/src/main/java/ru/ip/example/repository/impl/SeazonRepositoryDao.java b/src/main/java/ru/ip/example/repository/impl/SeazonRepositoryDao.java
deleted file mode 100644
index 808013b..0000000
--- a/src/main/java/ru/ip/example/repository/impl/SeazonRepositoryDao.java
+++ /dev/null
@@ -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 seazons = new ArrayList<>();
-
- @Override
- public List 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);
- }
-}
diff --git a/src/main/java/ru/ip/example/repository/impl/SerialRepositoryDao.java b/src/main/java/ru/ip/example/repository/impl/SerialRepositoryDao.java
deleted file mode 100644
index d816da7..0000000
--- a/src/main/java/ru/ip/example/repository/impl/SerialRepositoryDao.java
+++ /dev/null
@@ -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 series = new ArrayList<>();
-
- private static Integer SERIES_SEQ = 0;
-
- @Override
- public List 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);
- }
-}
diff --git a/src/main/java/ru/ip/example/repository/impl/SubscribeRepositoryDao.java b/src/main/java/ru/ip/example/repository/impl/SubscribeRepositoryDao.java
deleted file mode 100644
index 8dd11b6..0000000
--- a/src/main/java/ru/ip/example/repository/impl/SubscribeRepositoryDao.java
+++ /dev/null
@@ -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 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 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);
- }
-}
diff --git a/src/main/java/ru/ip/example/service/impl/FilmServiceImpl.java b/src/main/java/ru/ip/example/service/impl/FilmServiceImpl.java
index fa8e7b0..adcc7c8 100644
--- a/src/main/java/ru/ip/example/service/impl/FilmServiceImpl.java
+++ b/src/main/java/ru/ip/example/service/impl/FilmServiceImpl.java
@@ -6,6 +6,7 @@ import ru.ip.example.domain.AddSeazonDto;
import ru.ip.example.domain.FilmDto;
import ru.ip.example.domain.entity.FilmEntity;
import ru.ip.example.domain.entity.SeazonEntity;
+import ru.ip.example.domain.entity.SeriesEntity;
import ru.ip.example.mapper.FilmMapper;
import ru.ip.example.repository.FilmRepository;
import ru.ip.example.repository.SeazonRepository;
@@ -41,7 +42,7 @@ public class FilmServiceImpl implements FilmService {
@Override
public List findAllFilms() {
- List filmEntities = filmRepository.findAll();
+ Iterable filmEntities = filmRepository.findAll();
List films = new ArrayList<>();
for (FilmEntity entity : filmEntities) {
FilmDto dto = filmMapper.toDto(entity);
@@ -52,7 +53,7 @@ public class FilmServiceImpl implements FilmService {
@Override
public FilmDto findFilmById(Integer id) {
- FilmEntity film = filmRepository.findById(id);
+ FilmEntity film = filmRepository.findById(id).orElseThrow();
return filmMapper.toDto(film);
}
@@ -63,12 +64,14 @@ public class FilmServiceImpl implements FilmService {
@Override
public FilmDto addSeazon(AddSeazonDto addSeazonDto) {
- SeazonEntity seazonEntity = seazonRepository.findById(addSeazonDto.getSeazonId());
- FilmEntity film = filmRepository.findById(addSeazonDto.getFilmId());
+ var film = filmRepository.findById(addSeazonDto.getFilmId());
+ var seazon = seazonRepository.findById(addSeazonDto.getSeazonId());
- if (seazonEntity != null && film != null && !film.getSeazons().contains(seazonEntity)) {
- film.getSeazons().add(seazonEntity);
+ if (film.isPresent() && seazon.isPresent() && !seazon.get().getSeries().contains(film.get())) {
+ 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());
}
}
diff --git a/src/main/java/ru/ip/example/service/impl/SeazonServiceImpl.java b/src/main/java/ru/ip/example/service/impl/SeazonServiceImpl.java
index c00f724..a87c92d 100644
--- a/src/main/java/ru/ip/example/service/impl/SeazonServiceImpl.java
+++ b/src/main/java/ru/ip/example/service/impl/SeazonServiceImpl.java
@@ -13,6 +13,7 @@ import ru.ip.example.service.SeazonService;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
@Service
@RequiredArgsConstructor
@@ -26,7 +27,7 @@ public class SeazonServiceImpl implements SeazonService {
@Override
public List findAll() {
- List seazons = seazonRepository.findAll();
+ Iterable seazons = seazonRepository.findAll();
List seazonDtos = new ArrayList<>();
for(SeazonEntity seazon : seazons) {
seazonDtos.add(seazonMapper.toDto(seazon));
@@ -36,7 +37,7 @@ public class SeazonServiceImpl implements SeazonService {
@Override
public SeazonDto findById(Integer id) {
- SeazonEntity seazon = seazonRepository.findById(id);
+ SeazonEntity seazon = seazonRepository.findById(id).orElseThrow();
return seazonMapper.toDto(seazon);
}
@@ -57,17 +58,21 @@ public class SeazonServiceImpl implements SeazonService {
@Override
public void delete(Integer id) {
- seazonRepository.delete(id);
+ Optional seazon = seazonRepository.findById(id);
+ seazon.ifPresent(seazonRepository::delete);
}
@Override
public SeazonDto addSeries(AddSeriesDto dto) {
- SeriesEntity series = seriesRepository.findById(dto.getSeriesId());
- SeazonEntity seazon = seazonRepository.findById(dto.getSeazonId());
+ var series = seriesRepository.findById(dto.getSeriesId());
+ var seazon = seazonRepository.findById(dto.getSeazonId());
- if (series != null && seazon != null && !seazon.getSeries().contains(series)) {
- seazon.getSeries().add(series);
+ 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);
+ return seazonMapper.toDto(seazon.get());
}
}
diff --git a/src/main/java/ru/ip/example/service/impl/SeriesServiceImpl.java b/src/main/java/ru/ip/example/service/impl/SeriesServiceImpl.java
index 9fc96b3..f38377d 100644
--- a/src/main/java/ru/ip/example/service/impl/SeriesServiceImpl.java
+++ b/src/main/java/ru/ip/example/service/impl/SeriesServiceImpl.java
@@ -23,7 +23,7 @@ public class SeriesServiceImpl implements SeriesService {
@Override
public List findAll() {
- List series = seriesRepository.findAll();
+ Iterable series = seriesRepository.findAll();
List seriesDtos = new ArrayList<>();
for(SeriesEntity seazon : series) {
seriesDtos.add(seriesMapper.toDto(seazon));
@@ -33,7 +33,7 @@ public class SeriesServiceImpl implements SeriesService {
@Override
public SeriesDto findById(Integer id) {
- SeriesEntity series = seriesRepository.findById(id);
+ SeriesEntity series = seriesRepository.findById(id).orElseThrow();
return seriesMapper.toDto(series);
}
@@ -54,6 +54,7 @@ public class SeriesServiceImpl implements SeriesService {
@Override
public void delete(Integer id) {
- seriesRepository.delete(id);
+ seriesRepository.findById(id)
+ .ifPresent(seriesRepository::delete);
}
}
diff --git a/src/main/java/ru/ip/example/service/impl/SubscribeServiceImpl.java b/src/main/java/ru/ip/example/service/impl/SubscribeServiceImpl.java
index f451a32..1cd3cfd 100644
--- a/src/main/java/ru/ip/example/service/impl/SubscribeServiceImpl.java
+++ b/src/main/java/ru/ip/example/service/impl/SubscribeServiceImpl.java
@@ -36,7 +36,7 @@ public class SubscribeServiceImpl implements SubscribeService {
@Override
public List findAllSubscribes() {
- List subscribeEntities = subscribeRepository.findAll();
+ Iterable subscribeEntities = subscribeRepository.findAll();
List subscribes = new ArrayList<>();
for (SubscribeEntity entity : subscribeEntities) {
SubscribeDto dto = subscribeMapper.toDto(entity);
@@ -47,7 +47,7 @@ public class SubscribeServiceImpl implements SubscribeService {
@Override
public SubscribeDto findSubscribeById(Integer id) {
- SubscribeEntity subscribe = subscribeRepository.findById(id);
+ SubscribeEntity subscribe = subscribeRepository.findById(id).orElseThrow();
return subscribeMapper.toDto(subscribe);
}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 68de7d3..aefdc81 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,7 @@
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