From 3df09259bde00f5950dd1425ec671e45493dedde Mon Sep 17 00:00:00 2001 From: "ityurner02@mail.ru" Date: Sat, 25 Mar 2023 20:43:23 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A03=20=D0=B2=D1=81=D0=B5=20=D0=BA?= =?UTF-8?q?=D1=80=D0=BE=D0=BC=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 8 ++ data.mv.db | Bin 0 -> 28672 bytes .../controller/CollectionController.java | 56 ++++++++++++ .../DataBase/controller/FilmController.java | 59 +++++++++++++ .../DataBase/controller/GenreController.java | 51 +++++++++++ .../is/lab1/DataBase/model/Collection.java | 51 +++++++++++ .../ru/ulstu/is/lab1/DataBase/model/Film.java | 53 +++++++++++ .../ulstu/is/lab1/DataBase/model/Genre.java | 42 +++++++++ .../DataBase/service/CollectionService.java | 82 ++++++++++++++++++ .../is/lab1/DataBase/service/FilmService.java | 81 +++++++++++++++++ .../lab1/DataBase/service/GenreService.java | 64 ++++++++++++++ .../speaker/controller/MethodController.java | 43 --------- .../ulstu/is/lab1/speaker/domain/IMethod.java | 11 --- .../is/lab1/speaker/domain/MethodInt.java | 26 ------ .../is/lab1/speaker/domain/MethodString.java | 41 --------- .../lab1/speaker/service/MethodService.java | 51 ----------- src/main/resources/application.properties | 11 +++ .../ulstu/is/lab1/Lab1ApplicationTests.java | 65 +++----------- src/test/resources/application.properties | 6 ++ 19 files changed, 577 insertions(+), 224 deletions(-) create mode 100644 data.mv.db create mode 100644 src/main/java/ru/ulstu/is/lab1/DataBase/controller/CollectionController.java create mode 100644 src/main/java/ru/ulstu/is/lab1/DataBase/controller/FilmController.java create mode 100644 src/main/java/ru/ulstu/is/lab1/DataBase/controller/GenreController.java create mode 100644 src/main/java/ru/ulstu/is/lab1/DataBase/model/Collection.java create mode 100644 src/main/java/ru/ulstu/is/lab1/DataBase/model/Film.java create mode 100644 src/main/java/ru/ulstu/is/lab1/DataBase/model/Genre.java create mode 100644 src/main/java/ru/ulstu/is/lab1/DataBase/service/CollectionService.java create mode 100644 src/main/java/ru/ulstu/is/lab1/DataBase/service/FilmService.java create mode 100644 src/main/java/ru/ulstu/is/lab1/DataBase/service/GenreService.java delete mode 100644 src/main/java/ru/ulstu/is/lab1/speaker/controller/MethodController.java delete mode 100644 src/main/java/ru/ulstu/is/lab1/speaker/domain/IMethod.java delete mode 100644 src/main/java/ru/ulstu/is/lab1/speaker/domain/MethodInt.java delete mode 100644 src/main/java/ru/ulstu/is/lab1/speaker/domain/MethodString.java delete mode 100644 src/main/java/ru/ulstu/is/lab1/speaker/service/MethodService.java create mode 100644 src/main/resources/application.properties create mode 100644 src/test/resources/application.properties diff --git a/build.gradle b/build.gradle index 3a4fc7c..36c6154 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,14 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' + + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'com.h2database:h2:2.1.210' + + implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.5' + + implementation 'org.springframework.boot:spring-boot-starter-validation' + testImplementation 'org.springframework.boot:spring-boot-starter-test' } diff --git a/data.mv.db b/data.mv.db new file mode 100644 index 0000000000000000000000000000000000000000..e81ec76fc646899ec3ce968797a1b4c129615836 GIT binary patch literal 28672 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 B#}EJj literal 0 HcmV?d00001 diff --git a/src/main/java/ru/ulstu/is/lab1/DataBase/controller/CollectionController.java b/src/main/java/ru/ulstu/is/lab1/DataBase/controller/CollectionController.java new file mode 100644 index 0000000..6ae01df --- /dev/null +++ b/src/main/java/ru/ulstu/is/lab1/DataBase/controller/CollectionController.java @@ -0,0 +1,56 @@ +package ru.ulstu.is.lab1.DataBase.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import ru.ulstu.is.lab1.DataBase.model.Collection; +import ru.ulstu.is.lab1.DataBase.service.CollectionService; + +import java.util.List; + +@RestController +@RequestMapping("/collection") +public class CollectionController { + private final CollectionService collectionService; + + @Autowired + public CollectionController(CollectionService collectionService) { + this.collectionService = collectionService; + } + + @GetMapping("/{id}") + public Collection getCollection(@PathVariable Long id) { + return collectionService.findCollection(id); + } + + @GetMapping("/") + public List getCollection() { + return collectionService.findAllCollections(); + } + + @PostMapping("/") + public Collection createCollection(@RequestParam("name") String name) { + return collectionService.addCollection(name); + } + + @PatchMapping("/{id}") + public Collection updateCollection(@PathVariable Long id, @RequestParam("name") String name) { + return collectionService.updateCollection(id, name); + } + + @PatchMapping("/add_film/{id}") + public Collection addFilm(@PathVariable Long id, @RequestParam Long film_id) { + return collectionService.addFilm(id, film_id); + } + + @DeleteMapping("/{id}") + public Collection deleteCollection(@PathVariable Long id) { + return collectionService.deleteCollection(id); + } +} diff --git a/src/main/java/ru/ulstu/is/lab1/DataBase/controller/FilmController.java b/src/main/java/ru/ulstu/is/lab1/DataBase/controller/FilmController.java new file mode 100644 index 0000000..84d26d7 --- /dev/null +++ b/src/main/java/ru/ulstu/is/lab1/DataBase/controller/FilmController.java @@ -0,0 +1,59 @@ +package ru.ulstu.is.lab1.DataBase.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import ru.ulstu.is.lab1.DataBase.model.Film; +import ru.ulstu.is.lab1.DataBase.service.FilmService; + +import java.util.List; + +@RestController +@RequestMapping("/film") +public class FilmController { + private final FilmService filmService; + + @Autowired + public FilmController(FilmService filmService) { + this.filmService = filmService; + } + + @GetMapping("/test") + public String test() { return "Test request"; } + + @GetMapping("/{id}") + public Film getFilm(@PathVariable Long id) { + return filmService.findFilm(id); + } + + @GetMapping("/") + public List getFilm() { + return filmService.findAllFilms(); + } + + @PostMapping("/") + public Film createFilm(@RequestParam("name") String name) { + return filmService.addFilm(name); + } + + @PatchMapping("/{id}") + public Film updateFilm(@PathVariable Long id, @RequestParam("name") String name) { + return filmService.updateFilm(id, name); + } + + @PatchMapping("/add_genre/{id}") + public Film addGenre(@PathVariable Long id, @RequestParam Long genre_id) { + return filmService.addGenre(id, genre_id); + } + + @DeleteMapping("/{id}") + public Film deleteFilm(@PathVariable Long id) { + return filmService.deleteFilm(id); + } +} diff --git a/src/main/java/ru/ulstu/is/lab1/DataBase/controller/GenreController.java b/src/main/java/ru/ulstu/is/lab1/DataBase/controller/GenreController.java new file mode 100644 index 0000000..2e15dbf --- /dev/null +++ b/src/main/java/ru/ulstu/is/lab1/DataBase/controller/GenreController.java @@ -0,0 +1,51 @@ +package ru.ulstu.is.lab1.DataBase.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import ru.ulstu.is.lab1.DataBase.model.Genre; +import ru.ulstu.is.lab1.DataBase.service.GenreService; + +import java.util.List; + +@RestController +@RequestMapping("/genre") +public class GenreController { + private final GenreService genreService; + + @Autowired + public GenreController(GenreService genreService) { + this.genreService = genreService; + } + + @GetMapping("/{id}") + public Genre getGenre(@PathVariable Long id) { + return genreService.findGenre(id); + } + + @GetMapping("/") + public List getGenre() { + return genreService.findAllGenres(); + } + + @PostMapping("/") + public Genre createGenre(@RequestParam("name") String name) { + return genreService.addGenre(name); + } + + @PatchMapping("/{id}") + public Genre updateGenre(@PathVariable Long id, @RequestParam("name") String name) { + return genreService.updateGenre(id, name); + } + + @DeleteMapping("/{id}") + public Genre deleteGenre(@PathVariable Long id) { + return genreService.deleteGenre(id); + } +} diff --git a/src/main/java/ru/ulstu/is/lab1/DataBase/model/Collection.java b/src/main/java/ru/ulstu/is/lab1/DataBase/model/Collection.java new file mode 100644 index 0000000..cd3f7d4 --- /dev/null +++ b/src/main/java/ru/ulstu/is/lab1/DataBase/model/Collection.java @@ -0,0 +1,51 @@ +package ru.ulstu.is.lab1.DataBase.model; + +import javax.persistence.*; + +import java.util.List; + +@Entity +public class Collection { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String name; + @ManyToMany(fetch = FetchType.EAGER) + @JoinTable(name="collections_films", + joinColumns = @JoinColumn(name="collection_id"), + inverseJoinColumns = @JoinColumn(name="film_id") + ) + private List films; + + public Collection() { + } + + public Collection(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void addFilm(Film f) { + films.add(f); + } + + @Override + public String toString() { + return "Collection{" + + "id=" + id + + ", name='" + name + '\'' + + "films:" + (films == null ? "[]" : films.toString()) + + '}'; + } +} diff --git a/src/main/java/ru/ulstu/is/lab1/DataBase/model/Film.java b/src/main/java/ru/ulstu/is/lab1/DataBase/model/Film.java new file mode 100644 index 0000000..d6afde1 --- /dev/null +++ b/src/main/java/ru/ulstu/is/lab1/DataBase/model/Film.java @@ -0,0 +1,53 @@ +package ru.ulstu.is.lab1.DataBase.model; + +import javax.persistence.*; + +import java.util.List; + +@Entity +public class Film { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String name; + @ManyToMany(fetch = FetchType.EAGER) + @JoinTable(name="films_genres", + joinColumns = @JoinColumn(name="film_id"), + inverseJoinColumns = @JoinColumn(name="genre_id") + ) + private List genres; + @ManyToMany(fetch = FetchType.EAGER, mappedBy = "films") + private List collections; + + public Film() { + } + + public Film(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void addGenre(Genre g) { + genres.add(g); + } + + @Override + public String toString() { + return "Film{" + + "id=" + id + + ", name='" + name + '\'' + + "genres:" + (genres == null ? "[]" : genres.toString()) + + '}'; + } +} diff --git a/src/main/java/ru/ulstu/is/lab1/DataBase/model/Genre.java b/src/main/java/ru/ulstu/is/lab1/DataBase/model/Genre.java new file mode 100644 index 0000000..31a495f --- /dev/null +++ b/src/main/java/ru/ulstu/is/lab1/DataBase/model/Genre.java @@ -0,0 +1,42 @@ +package ru.ulstu.is.lab1.DataBase.model; + +import javax.persistence.*; + +import java.util.List; + +@Entity +public class Genre { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String name; + @ManyToMany(fetch = FetchType.EAGER, mappedBy = "genres") + private List films; + + public Genre() { + } + + public Genre(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Genre{" + + "id=" + id + + ", name='" + name + '\'' + + '}'; + } +} diff --git a/src/main/java/ru/ulstu/is/lab1/DataBase/service/CollectionService.java b/src/main/java/ru/ulstu/is/lab1/DataBase/service/CollectionService.java new file mode 100644 index 0000000..c8dc645 --- /dev/null +++ b/src/main/java/ru/ulstu/is/lab1/DataBase/service/CollectionService.java @@ -0,0 +1,82 @@ +package ru.ulstu.is.lab1.DataBase.service; + +import ru.ulstu.is.lab1.DataBase.model.Collection; +import javax.persistence.EntityManager; +import javax.persistence.EntityNotFoundException; +import javax.persistence.PersistenceContext; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; +import ru.ulstu.is.lab1.DataBase.model.Film; +import ru.ulstu.is.lab1.DataBase.model.Genre; + +import java.util.List; + +@Service +public class CollectionService { + @PersistenceContext + private EntityManager em; + + @Transactional + public Collection addCollection(String name) { + if (!StringUtils.hasText(name)) { + throw new IllegalArgumentException("Collection name is null or empty"); + } + final Collection collection = new Collection(name); + em.persist(collection); + return collection; + } + + @Transactional + public Collection addFilm(Long collectionId, Long filmId) { + final Collection collection = em.find(Collection.class, collectionId); + if (collection == null) { + throw new EntityNotFoundException(String.format("Film with id [%s] is not found", collectionId)); + } + + final Film film = em.find(Film.class, filmId); + if (film == null) { + throw new EntityNotFoundException(String.format("Genre with id [%s] is not found", filmId)); + } + + collection.addFilm(film); + return em.merge(collection); + } + + @Transactional(readOnly = true) + public Collection findCollection(Long id) { + final Collection collection = em.find(Collection.class, id); + if (collection == null) { + throw new EntityNotFoundException(String.format("Collection with id [%s] is not found", id)); + } + return collection; + } + + @Transactional(readOnly = true) + public List findAllCollections() { + return em.createQuery("select c from Collection c", Collection.class) + .getResultList(); + } + + @Transactional + public Collection updateCollection(Long id, String name) { + if (!StringUtils.hasText(name)) { + throw new IllegalArgumentException("Collection name is null or empty"); + } + final Collection currentCollection = findCollection(id); + currentCollection.setName(name); + return em.merge(currentCollection); + } + + @Transactional + public Collection deleteCollection(Long id) { + final Collection currentCollection = findCollection(id); + em.remove(currentCollection); + return currentCollection; + } + + @Transactional + public void deleteAllCollections() { + em.createQuery("delete from Collection").executeUpdate(); + } +} diff --git a/src/main/java/ru/ulstu/is/lab1/DataBase/service/FilmService.java b/src/main/java/ru/ulstu/is/lab1/DataBase/service/FilmService.java new file mode 100644 index 0000000..ee4eb5a --- /dev/null +++ b/src/main/java/ru/ulstu/is/lab1/DataBase/service/FilmService.java @@ -0,0 +1,81 @@ +package ru.ulstu.is.lab1.DataBase.service; + +import ru.ulstu.is.lab1.DataBase.model.Film; +import ru.ulstu.is.lab1.DataBase.model.Genre; +import javax.persistence.EntityManager; +import javax.persistence.EntityNotFoundException; +import javax.persistence.PersistenceContext; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.util.List; + +@Service +public class FilmService { + @PersistenceContext + private EntityManager em; + + @Transactional + public Film addFilm(String name) { + if (!StringUtils.hasText(name)) { + throw new IllegalArgumentException("Film name is null or empty"); + } + final Film film = new Film(name); + em.persist(film); + return film; + } + + @Transactional + public Film addGenre(Long filmId, Long genreId) { + final Film film = em.find(Film.class, filmId); + if (film == null) { + throw new EntityNotFoundException(String.format("Film with id [%s] is not found", filmId)); + } + + final Genre genre = em.find(Genre.class, genreId); + if (genre == null) { + throw new EntityNotFoundException(String.format("Genre with id [%s] is not found", genreId)); + } + + film.addGenre(genre); + return em.merge(film); + } + + @Transactional(readOnly = true) + public Film findFilm(Long id) { + final Film film = em.find(Film.class, id); + if (film == null) { + throw new EntityNotFoundException(String.format("Film with id [%s] is not found", id)); + } + return film; + } + + @Transactional(readOnly = true) + public List findAllFilms() { + return em.createQuery("select f from Film f", Film.class) + .getResultList(); + } + + @Transactional + public Film updateFilm(Long id, String name) { + if (!StringUtils.hasText(name)) { + throw new IllegalArgumentException("Film name is null or empty"); + } + final Film currentFilm = findFilm(id); + currentFilm.setName(name); + return em.merge(currentFilm); + } + + @Transactional + public Film deleteFilm(Long id) { + final Film currentFilm = findFilm(id); + em.remove(currentFilm); + return currentFilm; + } + + @Transactional + public void deleteAllFilms() { + em.createQuery("delete from Film").executeUpdate(); + } +} diff --git a/src/main/java/ru/ulstu/is/lab1/DataBase/service/GenreService.java b/src/main/java/ru/ulstu/is/lab1/DataBase/service/GenreService.java new file mode 100644 index 0000000..94b6e8b --- /dev/null +++ b/src/main/java/ru/ulstu/is/lab1/DataBase/service/GenreService.java @@ -0,0 +1,64 @@ +package ru.ulstu.is.lab1.DataBase.service; + +import ru.ulstu.is.lab1.DataBase.model.Genre; +import javax.persistence.EntityManager; +import javax.persistence.EntityNotFoundException; +import javax.persistence.PersistenceContext; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.util.List; + +@Service +public class GenreService { + @PersistenceContext + private EntityManager em; + + @Transactional + public Genre addGenre(String name) { + if (!StringUtils.hasText(name)) { + throw new IllegalArgumentException("Genre name is null or empty"); + } + final Genre genre = new Genre(name); + em.persist(genre); + return genre; + } + + @Transactional(readOnly = true) + public Genre findGenre(Long id) { + final Genre genre = em.find(Genre.class, id); + if (genre == null) { + throw new EntityNotFoundException(String.format("Genre with id [%s] is not found", id)); + } + return genre; + } + + @Transactional(readOnly = true) + public List findAllGenres() { + return em.createQuery("select g from Genre g", Genre.class) + .getResultList(); + } + + @Transactional + public Genre updateGenre(Long id, String name) { + if (!StringUtils.hasText(name)) { + throw new IllegalArgumentException("Genre name is null or empty"); + } + final Genre currentGenre = findGenre(id); + currentGenre.setName(name); + return em.merge(currentGenre); + } + + @Transactional + public Genre deleteGenre(Long id) { + final Genre currentGenre = findGenre(id); + em.remove(currentGenre); + return currentGenre; + } + + @Transactional + public void deleteAllGenres() { + em.createQuery("delete from Genre").executeUpdate(); + } +} diff --git a/src/main/java/ru/ulstu/is/lab1/speaker/controller/MethodController.java b/src/main/java/ru/ulstu/is/lab1/speaker/controller/MethodController.java deleted file mode 100644 index 3078f46..0000000 --- a/src/main/java/ru/ulstu/is/lab1/speaker/controller/MethodController.java +++ /dev/null @@ -1,43 +0,0 @@ -package ru.ulstu.is.lab1.speaker.controller; - -import ru.ulstu.is.lab1.speaker.service.MethodService; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class MethodController { - private final MethodService speakerService; - - public MethodController(MethodService speakerService) { - this.speakerService = speakerService; - } - - @GetMapping("/sum") - public String Sum(@RequestParam(value = "first", defaultValue = "1") Object first, - @RequestParam(value = "second", defaultValue = "1") Object second, - @RequestParam(value = "type", defaultValue = "int") String type) { - return speakerService.Sum(first, second, type); - } - - @GetMapping("/minus") - public String Ras(@RequestParam(value = "first", defaultValue = "1") Object first, - @RequestParam(value = "second", defaultValue = "1") Object second, - @RequestParam(value = "type", defaultValue = "int") String type) { - return speakerService.Ras(first, second, type); - } - - @GetMapping("/reverse") - public String Pros(@RequestParam(value = "first", defaultValue = "1") Object first, - @RequestParam(value = "second", defaultValue = "1") Object second, - @RequestParam(value = "type", defaultValue = "int") String type) { - return speakerService.Rev(first, second, type); - } - - @GetMapping("/comparison") - public String Del(@RequestParam(value = "first", defaultValue = "1") Object first, - @RequestParam(value = "second", defaultValue = "1") Object second, - @RequestParam(value = "type", defaultValue = "int") String type) { - return speakerService.Com(first, second, type); - } -} diff --git a/src/main/java/ru/ulstu/is/lab1/speaker/domain/IMethod.java b/src/main/java/ru/ulstu/is/lab1/speaker/domain/IMethod.java deleted file mode 100644 index da3db8e..0000000 --- a/src/main/java/ru/ulstu/is/lab1/speaker/domain/IMethod.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.ulstu.is.lab1.speaker.domain; - -public interface IMethod { - T Sum(T first, T second); - - T Minus(T first, T second); - - T Reverse(T first, T second); - - T Comparison(T first, T second); -} diff --git a/src/main/java/ru/ulstu/is/lab1/speaker/domain/MethodInt.java b/src/main/java/ru/ulstu/is/lab1/speaker/domain/MethodInt.java deleted file mode 100644 index ba393b6..0000000 --- a/src/main/java/ru/ulstu/is/lab1/speaker/domain/MethodInt.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.ulstu.is.lab1.speaker.domain; - -import org.springframework.stereotype.Component; - -@Component(value="int") -public class MethodInt implements IMethod{ - public Integer Sum(Integer first, Integer second) { - return first + second; - } - - public Integer Minus(Integer first, Integer second) { - return first - second; - } - - public Integer Reverse(Integer first, Integer second) { - return (first + second) * (-1); - } - - public Integer Comparison(Integer first, Integer second) { - if (first >= second){ - return first; - }else{ - return second; - } - } -} diff --git a/src/main/java/ru/ulstu/is/lab1/speaker/domain/MethodString.java b/src/main/java/ru/ulstu/is/lab1/speaker/domain/MethodString.java deleted file mode 100644 index 1d2ea65..0000000 --- a/src/main/java/ru/ulstu/is/lab1/speaker/domain/MethodString.java +++ /dev/null @@ -1,41 +0,0 @@ -package ru.ulstu.is.lab1.speaker.domain; - -import org.springframework.stereotype.Component; - -@Component(value="string") -public class MethodString implements IMethod{ - @Override - public String Sum(String first, String second) { - return first.concat(second); - } - - @Override - public String Minus(String first, String second) { - String[] arr = first.split(""); - for(int i = 0; i < first.length(); i++){ - if (second.contains(arr[i])){ - arr[i] = ""; - } - } - return String.join("", arr); - } - - @Override - public String Reverse(String first, String second) { - String ourStr = first.concat(second); - StringBuilder newStr = new StringBuilder(); - for(int i = ourStr.length() - 1; i >= 0; i--){ - newStr.append(ourStr.charAt(i)); - } - return newStr.toString(); - } - - @Override - public String Comparison(String first, String second) { - if (first.length() >= second.length()){ - return first; - }else{ - return second; - } - } -} diff --git a/src/main/java/ru/ulstu/is/lab1/speaker/service/MethodService.java b/src/main/java/ru/ulstu/is/lab1/speaker/service/MethodService.java deleted file mode 100644 index 49a728b..0000000 --- a/src/main/java/ru/ulstu/is/lab1/speaker/service/MethodService.java +++ /dev/null @@ -1,51 +0,0 @@ -package ru.ulstu.is.lab1.speaker.service; - -import ru.ulstu.is.lab1.speaker.domain.IMethod; -import ru.ulstu.is.lab1.speaker.domain.MethodString; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Service; - -@Service -public class MethodService { - private final ApplicationContext applicationContext; - - public MethodService(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } - - public String Sum(Object first, Object second, String type) { - final IMethod speaker = (IMethod) applicationContext.getBean(type); - if (speaker instanceof MethodString){ - return String.format("%s", speaker.Sum(first,second)); - }else{ - return String.format("%s", speaker.Sum(Integer.parseInt(first.toString()),Integer.parseInt(second.toString()))); - } - } - - public String Ras(Object first, Object second, String type) { - final IMethod speaker = (IMethod) applicationContext.getBean(type); - if (speaker instanceof MethodString){ - return String.format("%s", speaker.Minus(first,second)); - }else{ - return String.format("%s", speaker.Minus(Integer.parseInt(first.toString()),Integer.parseInt(second.toString()))); - } - } - - public String Rev(Object first, Object second, String type) { - final IMethod speaker = (IMethod) applicationContext.getBean(type); - if (speaker instanceof MethodString){ - return String.format("%s", speaker.Reverse(first,second)); - }else{ - return String.format("%s", speaker.Reverse(Integer.parseInt(first.toString()),Integer.parseInt(second.toString()))); - } - } - - public String Com(Object first, Object second, String type) { - final IMethod speaker = (IMethod) applicationContext.getBean(type); - if (speaker instanceof MethodString){ - return String.format("%s", speaker.Comparison(first,second)); - }else { - return String.format("%s", speaker.Comparison(Integer.parseInt(first.toString()), Integer.parseInt(second.toString()))); - } - } -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..ccc05e8 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,11 @@ +spring.main.banner-mode=off +#server.port=8080 +spring.datasource.url=jdbc:h2:file:./data +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password=password +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.hibernate.ddl-auto=update +spring.h2.console.enabled=true +spring.h2.console.settings.trace=false +spring.h2.console.settings.web-allow-others=false \ No newline at end of file diff --git a/src/test/java/ru/ulstu/is/lab1/Lab1ApplicationTests.java b/src/test/java/ru/ulstu/is/lab1/Lab1ApplicationTests.java index 9be879c..39bfe9e 100644 --- a/src/test/java/ru/ulstu/is/lab1/Lab1ApplicationTests.java +++ b/src/test/java/ru/ulstu/is/lab1/Lab1ApplicationTests.java @@ -1,63 +1,24 @@ package ru.ulstu.is.lab1; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import ru.ulstu.is.lab1.speaker.service.MethodService; +import ru.ulstu.is.lab1.DataBase.model.Film; +import ru.ulstu.is.lab1.DataBase.model.Collection; +import ru.ulstu.is.lab1.DataBase.model.Genre; +import ru.ulstu.is.lab1.DataBase.service.FilmService; +import ru.ulstu.is.lab1.DataBase.service.CollectionService; +import ru.ulstu.is.lab1.DataBase.service.GenreService; +import javax.persistence.EntityNotFoundException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + @SpringBootTest class Lab1ApplicationTests { - @Autowired - MethodService methodService; - @Test - void contextLoads() { - } - - @Test - void testPlusInt() { - final String res = methodService.Sum(10, 10, "int"); - Assertions.assertEquals(20, Integer.parseInt(res)); - } - @Test - void testMinusInt() { - final String res = methodService.Ras(8, 4, "int"); - Assertions.assertEquals(4, Integer.parseInt(res)); - } - @Test - void testReverseInt() { - final String res = methodService.Rev(10, 10, "int"); - Assertions.assertEquals(-20, Integer.parseInt(res)); - } - @Test - void testComparisonInt() { - final String res = methodService.Com(8, 4, "int"); - Assertions.assertEquals(8, Integer.parseInt(res)); - } - @Test - void testPlusStr() { - final String res = methodService.Sum("10", "10", "string"); - Assertions.assertEquals("1010", res); - } - @Test - void testMinusStr() { - final String res = methodService.Ras("846734", "4", "string"); - Assertions.assertEquals("8673", res); - } - @Test - void testReverseStr() { - final String res = methodService.Rev("846734", "312", "string"); - Assertions.assertEquals("213437648", res); - } - @Test - void testComparisonStr() { - final String res = methodService.Com("846734", "312", "string"); - Assertions.assertEquals("846734", res); - } - @Test - void testNumberFormatException() { - Assertions.assertThrows(NumberFormatException.class, () -> methodService.Sum("п", 3, "int")); - } } diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties new file mode 100644 index 0000000..81734b8 --- /dev/null +++ b/src/test/resources/application.properties @@ -0,0 +1,6 @@ +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.jpa.hibernate.ddl-auto=create-drop \ No newline at end of file