From d3150467f2e7d709e0cae9a2b2b717fc5acc09cc Mon Sep 17 00:00:00 2001 From: goblinrf Date: Sun, 26 May 2024 14:51:11 +0400 Subject: [PATCH] ALL --- Lab 2.1 | 1 + Lab 2.2/.gitignore | 37 +++ Lab 2.2/build.gradle | 29 ++ Lab 2.2/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43462 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + Lab 2.2/gradlew | 249 ++++++++++++++++++ Lab 2.2/gradlew.bat | 92 +++++++ Lab 2.2/settings.gradle | 1 + .../com/example/demo/DemoApplication.java | 54 ++++ .../demo/core/configuration/Constants.java | 8 + .../configuration/MapperConfiguration.java | 13 + .../core/configuration/WebConfiguration.java | 15 ++ .../demo/core/error/NotFoundException.java | 7 + .../example/demo/core/model/BaseEntity.java | 20 ++ .../core/repository/CommonRepository.java | 17 ++ .../demo/core/repository/MapRepository.java | 57 ++++ .../example/demo/news/api/NewsController.java | 75 ++++++ .../com/example/demo/news/api/NewsDto.java | 69 +++++ .../example/demo/news/model/NewsEntity.java | 90 +++++++ .../demo/news/repository/NewsRepository.java | 10 + .../demo/news/service/NewsService.java | 53 ++++ .../demo/reviews/api/ReviewController.java | 77 ++++++ .../example/demo/reviews/api/ReviewDto.java | 58 ++++ .../demo/reviews/model/ReviewEntity.java | 78 ++++++ .../reviews/repository/ReviewRepository.java | 10 + .../demo/reviews/service/ReviewService.java | 61 +++++ .../demo/speaker/api/SpeakerController.java | 23 ++ .../configuration/SpeakerConfiguration.java | 27 ++ .../example/demo/speaker/domain/Speaker.java | 5 + .../demo/speaker/domain/SpeakerDeu.java | 28 ++ .../demo/speaker/domain/SpeakerEng.java | 26 ++ .../demo/speaker/domain/SpeakerRus.java | 21 ++ .../demo/speaker/service/SpeakerNews.java | 20 ++ .../demo/types/api/TypeController.java | 64 +++++ .../com/example/demo/types/api/TypeDto.java | 28 ++ .../example/demo/types/model/TypeEntity.java | 43 +++ .../demo/types/repository/TypeRepository.java | 10 + .../demo/types/service/TypeService.java | 43 +++ .../demo/users/api/UserController.java | 64 +++++ .../com/example/demo/users/api/UserDto.java | 51 ++++ .../example/demo/users/model/UserEntity.java | 65 +++++ .../demo/users/repository/UserRepository.java | 10 + .../demo/users/service/UserService.java | 45 ++++ .../src/main/resources/application.properties | 1 + .../com/example/demo/NewsServiceTests.java | 90 +++++++ .../com/example/demo/ReviewServiceTests.java | 100 +++++++ .../com/example/demo/SpeakerNewsTests.java | 38 +++ .../java/com/example/demo/TypeNewsTests.java | 60 +++++ .../com/example/demo/UserServiceTests.java | 61 +++++ Lektsia6-src_2/.vscode/launch.json | 14 + .../Lektsia6-src_1/.vscode/launch.json | 24 ++ .../Lektsia6-src_1/.vscode/settings.json | 3 + Lektsia6-src_2/Lektsia6-src_1/data.mv.db | Bin 0 -> 24576 bytes .../Лекция6-src/.gitignore | 36 +++ .../Лекция6-src/.vscode/launch.json | 14 + .../Лекция6-src/build.gradle | 52 ++++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43462 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + .../Lektsia6-src_1/Лекция6-src/gradlew | 249 ++++++++++++++++++ .../Лекция6-src/gradlew.bat | 92 +++++++ .../Лекция6-src/readme.md | 15 ++ .../Лекция6-src/settings.gradle | 1 + .../com/example/demo/DemoApplication.java | 75 ++++++ .../allReviews/api/AllReviewsController.java | 56 ++++ .../allReviews/api/ExpandedReviewDto.java | 15 ++ .../demo/core/api/GlobalController.java | 20 ++ .../demo/core/api/PageAttributesMapper.java | 18 ++ .../demo/core/configuration/Constants.java | 19 ++ .../configuration/MapperConfiguration.java | 23 ++ .../core/configuration/WebConfiguration.java | 14 + .../demo/core/error/AdviceController.java | 53 ++++ .../demo/core/error/NotFoundException.java | 7 + .../example/demo/core/model/BaseEntity.java | 28 ++ .../core/security/SecurityConfiguration.java | 112 ++++++++ .../demo/core/security/UserPrincipal.java | 64 +++++ .../demo/index/api/IndexController.java | 93 +++++++ .../example/demo/news/api/NewsController.java | 144 ++++++++++ .../com/example/demo/news/api/NewsDto.java | 99 +++++++ .../example/demo/news/api/NewsGroupedDto.java | 31 +++ .../demo/news/model/ExtendedNewsEntity.java | 26 ++ .../example/demo/news/model/NewsEntity.java | 124 +++++++++ .../demo/news/repository/NewsRepository.java | 65 +++++ .../demo/news/service/NewsService.java | 181 +++++++++++++ .../demo/reviews/api/ReviewController.java | 149 +++++++++++ .../example/demo/reviews/api/ReviewDto.java | 64 +++++ .../demo/reviews/model/ReviewEntity.java | 87 ++++++ .../reviews/repository/ReviewRepository.java | 29 ++ .../demo/reviews/service/ReviewService.java | 117 ++++++++ .../demo/types/api/TypeController.java | 104 ++++++++ .../com/example/demo/types/api/TypeDto.java | 28 ++ .../example/demo/types/model/TypeEntity.java | 47 ++++ .../demo/types/repository/TypeRepository.java | 13 + .../demo/types/service/TypeService.java | 75 ++++++ .../demo/users/api/UserController.java | 127 +++++++++ .../com/example/demo/users/api/UserDto.java | 36 +++ .../demo/users/api/UserSignupController.java | 65 +++++ .../example/demo/users/api/UserSignupDto.java | 40 +++ .../example/demo/users/model/UserEntity.java | 108 ++++++++ .../example/demo/users/model/UserRole.java | 15 ++ .../demo/users/repository/UserRepository.java | 17 ++ .../demo/users/service/UserService.java | 113 ++++++++ .../src/main/resources/application.properties | 20 ++ .../src/main/resources/public/css/style.css | 67 +++++ .../src/main/resources/public/img/1.jpg | Bin 0 -> 540367 bytes .../src/main/resources/public/newspaper.svg | 4 + .../main/resources/templates/all-reviews.html | 57 ++++ .../src/main/resources/templates/default.html | 77 ++++++ .../src/main/resources/templates/error.html | 37 +++ .../src/main/resources/templates/index.html | 62 +++++ .../src/main/resources/templates/login.html | 44 ++++ .../main/resources/templates/news-edit.html | 41 +++ .../src/main/resources/templates/news.html | 65 +++++ .../main/resources/templates/pagination.html | 51 ++++ .../main/resources/templates/review-edit.html | 40 +++ .../src/main/resources/templates/reviews.html | 55 ++++ .../src/main/resources/templates/signup.html | 37 +++ .../main/resources/templates/type-edit.html | 28 ++ .../src/main/resources/templates/type.html | 51 ++++ .../main/resources/templates/user-edit.html | 29 ++ .../src/main/resources/templates/user.html | 56 ++++ .../com/example/demo/NewsServiceTests.java | 116 ++++++++ .../java/com/example/demo/TypeNewsTests.java | 66 +++++ .../com/example/demo/UserServiceTests.java | 85 ++++++ .../src/test/resources/application.properties | 14 + Lektsia6-src_2/data.mv.db | Bin 0 -> 49152 bytes Лекция3-src/.gitignore | 36 +++ Лекция3-src/.vscode/extensions.json | 12 + Лекция3-src/.vscode/launch.json | 24 ++ Лекция3-src/.vscode/settings.json | 22 ++ Лекция3-src/build.gradle | 43 +++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43462 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + Лекция3-src/gradlew | 249 ++++++++++++++++++ Лекция3-src/gradlew.bat | 92 +++++++ Лекция3-src/readme.md | 18 ++ Лекция3-src/settings.gradle | 1 + .../com/example/demo/DemoApplication.java | 53 ++++ .../demo/core/configuration/Constants.java | 10 + .../configuration/MapperConfiguration.java | 13 + .../core/configuration/WebConfiguration.java | 15 ++ .../demo/core/error/NotFoundException.java | 7 + .../example/demo/core/model/BaseEntity.java | 28 ++ .../example/demo/news/api/NewsController.java | 79 ++++++ .../com/example/demo/news/api/NewsDto.java | 69 +++++ .../example/demo/news/model/NewsEntity.java | 116 ++++++++ .../demo/news/repository/NewsRepository.java | 32 +++ .../demo/news/service/NewsService.java | 94 +++++++ .../demo/reviews/api/ReviewController.java | 109 ++++++++ .../example/demo/reviews/api/ReviewDto.java | 58 ++++ .../demo/reviews/model/ReviewEntity.java | 87 ++++++ .../reviews/repository/ReviewRepository.java | 30 +++ .../demo/reviews/service/ReviewService.java | 115 ++++++++ .../demo/types/api/TypeController.java | 64 +++++ .../com/example/demo/types/api/TypeDto.java | 28 ++ .../example/demo/types/model/TypeEntity.java | 47 ++++ .../demo/types/repository/TypeRepository.java | 12 + .../demo/types/service/TypeService.java | 67 +++++ .../demo/users/api/UserController.java | 64 +++++ .../com/example/demo/users/api/UserDto.java | 51 ++++ .../example/demo/users/model/UserEntity.java | 108 ++++++++ .../demo/users/repository/UserRepository.java | 15 ++ .../demo/users/service/UserService.java | 78 ++++++ .../src/main/resources/application.properties | 20 ++ .../com/example/demo/NewsServiceTests.java | 116 ++++++++ .../com/example/demo/ReviewServiceTests.java | 106 ++++++++ .../java/com/example/demo/TypeNewsTests.java | 66 +++++ .../com/example/demo/UserServiceTests.java | 85 ++++++ .../src/test/resources/application.properties | 15 ++ 168 files changed, 8582 insertions(+) create mode 160000 Lab 2.1 create mode 100644 Lab 2.2/.gitignore create mode 100644 Lab 2.2/build.gradle create mode 100644 Lab 2.2/gradle/wrapper/gradle-wrapper.jar create mode 100644 Lab 2.2/gradle/wrapper/gradle-wrapper.properties create mode 100644 Lab 2.2/gradlew create mode 100644 Lab 2.2/gradlew.bat create mode 100644 Lab 2.2/settings.gradle create mode 100644 Lab 2.2/src/main/java/com/example/demo/DemoApplication.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/core/configuration/Constants.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/core/configuration/WebConfiguration.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/core/error/NotFoundException.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/core/model/BaseEntity.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/core/repository/CommonRepository.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/core/repository/MapRepository.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/news/api/NewsController.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/news/api/NewsDto.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/news/model/NewsEntity.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/news/repository/NewsRepository.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/news/service/NewsService.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/reviews/api/ReviewController.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/reviews/api/ReviewDto.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/reviews/model/ReviewEntity.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/reviews/service/ReviewService.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/speaker/api/SpeakerController.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/speaker/domain/Speaker.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/speaker/service/SpeakerNews.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/types/api/TypeController.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/types/api/TypeDto.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/types/model/TypeEntity.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/types/repository/TypeRepository.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/types/service/TypeService.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/users/api/UserController.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/users/api/UserDto.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/users/model/UserEntity.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/users/repository/UserRepository.java create mode 100644 Lab 2.2/src/main/java/com/example/demo/users/service/UserService.java create mode 100644 Lab 2.2/src/main/resources/application.properties create mode 100644 Lab 2.2/src/test/java/com/example/demo/NewsServiceTests.java create mode 100644 Lab 2.2/src/test/java/com/example/demo/ReviewServiceTests.java create mode 100644 Lab 2.2/src/test/java/com/example/demo/SpeakerNewsTests.java create mode 100644 Lab 2.2/src/test/java/com/example/demo/TypeNewsTests.java create mode 100644 Lab 2.2/src/test/java/com/example/demo/UserServiceTests.java create mode 100644 Lektsia6-src_2/.vscode/launch.json create mode 100644 Lektsia6-src_2/Lektsia6-src_1/.vscode/launch.json create mode 100644 Lektsia6-src_2/Lektsia6-src_1/.vscode/settings.json create mode 100644 Lektsia6-src_2/Lektsia6-src_1/data.mv.db create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/.gitignore create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/.vscode/launch.json create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/build.gradle create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradle/wrapper/gradle-wrapper.jar create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradle/wrapper/gradle-wrapper.properties create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradlew create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradlew.bat create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/readme.md create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/settings.gradle create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/DemoApplication.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/allReviews/api/AllReviewsController.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/allReviews/api/ExpandedReviewDto.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/api/GlobalController.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/api/PageAttributesMapper.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/Constants.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/WebConfiguration.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/error/AdviceController.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/error/NotFoundException.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/model/BaseEntity.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/security/SecurityConfiguration.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/security/UserPrincipal.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/index/api/IndexController.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsController.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsDto.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsGroupedDto.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/model/ExtendedNewsEntity.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/model/NewsEntity.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/repository/NewsRepository.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/service/NewsService.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/api/ReviewController.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/api/ReviewDto.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/model/ReviewEntity.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/service/ReviewService.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/api/TypeController.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/api/TypeDto.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/model/TypeEntity.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/repository/TypeRepository.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/service/TypeService.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserController.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserDto.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserSignupController.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserSignupDto.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/model/UserEntity.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/model/UserRole.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/repository/UserRepository.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/service/UserService.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/application.properties create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/public/css/style.css create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/public/img/1.jpg create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/public/newspaper.svg create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/all-reviews.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/default.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/error.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/index.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/login.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/news-edit.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/news.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/pagination.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/review-edit.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/reviews.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/signup.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/type-edit.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/type.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/user-edit.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/user.html create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/NewsServiceTests.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/TypeNewsTests.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/UserServiceTests.java create mode 100644 Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/resources/application.properties create mode 100644 Lektsia6-src_2/data.mv.db create mode 100644 Лекция3-src/.gitignore create mode 100644 Лекция3-src/.vscode/extensions.json create mode 100644 Лекция3-src/.vscode/launch.json create mode 100644 Лекция3-src/.vscode/settings.json create mode 100644 Лекция3-src/build.gradle create mode 100644 Лекция3-src/gradle/wrapper/gradle-wrapper.jar create mode 100644 Лекция3-src/gradle/wrapper/gradle-wrapper.properties create mode 100644 Лекция3-src/gradlew create mode 100644 Лекция3-src/gradlew.bat create mode 100644 Лекция3-src/readme.md create mode 100644 Лекция3-src/settings.gradle create mode 100644 Лекция3-src/src/main/java/com/example/demo/DemoApplication.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/core/configuration/Constants.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/core/configuration/WebConfiguration.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/core/error/NotFoundException.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/core/model/BaseEntity.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/news/api/NewsController.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/news/api/NewsDto.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/news/model/NewsEntity.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/news/repository/NewsRepository.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/news/service/NewsService.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/reviews/api/ReviewController.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/reviews/api/ReviewDto.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/reviews/model/ReviewEntity.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/reviews/service/ReviewService.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/types/api/TypeController.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/types/api/TypeDto.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/types/model/TypeEntity.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/types/repository/TypeRepository.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/types/service/TypeService.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/users/api/UserController.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/users/api/UserDto.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/users/model/UserEntity.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/users/repository/UserRepository.java create mode 100644 Лекция3-src/src/main/java/com/example/demo/users/service/UserService.java create mode 100644 Лекция3-src/src/main/resources/application.properties create mode 100644 Лекция3-src/src/test/java/com/example/demo/NewsServiceTests.java create mode 100644 Лекция3-src/src/test/java/com/example/demo/ReviewServiceTests.java create mode 100644 Лекция3-src/src/test/java/com/example/demo/TypeNewsTests.java create mode 100644 Лекция3-src/src/test/java/com/example/demo/UserServiceTests.java create mode 100644 Лекция3-src/src/test/resources/application.properties diff --git a/Lab 2.1 b/Lab 2.1 new file mode 160000 index 0000000..d6b5494 --- /dev/null +++ b/Lab 2.1 @@ -0,0 +1 @@ +Subproject commit d6b549408acb6551f0edb675a13048a887b7d90c diff --git a/Lab 2.2/.gitignore b/Lab 2.2/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/Lab 2.2/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/Lab 2.2/build.gradle b/Lab 2.2/build.gradle new file mode 100644 index 0000000..92a39ba --- /dev/null +++ b/Lab 2.2/build.gradle @@ -0,0 +1,29 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.2.3' + id 'io.spring.dependency-management' version '1.1.4' +} + +group = 'com.example' +version = '0.0.1-SNAPSHOT' + +java { + sourceCompatibility = '17' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' + implementation 'org.modelmapper:modelmapper:3.2.0' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/Lab 2.2/gradle/wrapper/gradle-wrapper.jar b/Lab 2.2/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d64cd4917707c1f8861d8cb53dd15194d4248596 GIT binary patch literal 43462 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 literal 0 HcmV?d00001 diff --git a/Lab 2.2/gradle/wrapper/gradle-wrapper.properties b/Lab 2.2/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..1af9e09 --- /dev/null +++ b/Lab 2.2/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/Lab 2.2/gradlew b/Lab 2.2/gradlew new file mode 100644 index 0000000..1aa94a4 --- /dev/null +++ b/Lab 2.2/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/Lab 2.2/gradlew.bat b/Lab 2.2/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/Lab 2.2/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/Lab 2.2/settings.gradle b/Lab 2.2/settings.gradle new file mode 100644 index 0000000..0a383dd --- /dev/null +++ b/Lab 2.2/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'demo' diff --git a/Lab 2.2/src/main/java/com/example/demo/DemoApplication.java b/Lab 2.2/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000..9ccfb20 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,54 @@ +package com.example.demo; + +import java.util.Objects; +import java.util.Date; +import java.text.SimpleDateFormat; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +@SpringBootApplication +public class DemoApplication implements CommandLineRunner { + private final Logger log = LoggerFactory.getLogger(DemoApplication.class); + + private final TypeService typeService; + private final UserService userService; + private final NewsService itemService; + + public DemoApplication(TypeService typeNews, UserService userService, NewsService itemNews) { + + this.typeService = typeNews; + this.userService = userService; + this.itemService = itemNews; + + } + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } + + @Override + public void run(String... args) throws Exception { + if (args.length > 0 && Objects.equals("--populate", args[0])) { + log.info("Create default types values"); + final var type1 = typeService.create(new TypeEntity(null, "По поводу отчислений")); + final var user1 = userService.create(new UserEntity(null, "user1", "123", "admin")); + log.info("Create default items values"); + + String dateString = "25.03.2024"; + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); + Date parsedDate = (java.util.Date) sdf.parse(dateString); + itemService.create(new NewsEntity(null, type1, user1, "rgre", "dggd", (java.util.Date) parsedDate)); + } + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/core/configuration/Constants.java b/Lab 2.2/src/main/java/com/example/demo/core/configuration/Constants.java new file mode 100644 index 0000000..d9c6b7c --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/core/configuration/Constants.java @@ -0,0 +1,8 @@ +package com.example.demo.core.configuration; + +public class Constants { + public static final String API_URL = "/api/1.0"; + + private Constants() { + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java b/Lab 2.2/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java new file mode 100644 index 0000000..a5ad6f3 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java @@ -0,0 +1,13 @@ +package com.example.demo.core.configuration; + +import org.modelmapper.ModelMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MapperConfiguration { + @Bean + ModelMapper modelMapper() { + return new ModelMapper(); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/core/configuration/WebConfiguration.java b/Lab 2.2/src/main/java/com/example/demo/core/configuration/WebConfiguration.java new file mode 100644 index 0000000..762e85a --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/core/configuration/WebConfiguration.java @@ -0,0 +1,15 @@ +package com.example.demo.core.configuration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.lang.NonNull; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfiguration implements WebMvcConfigurer { + @Override + public void addCorsMappings(@NonNull CorsRegistry registry) { + registry.addMapping("/**") + .allowedMethods("GET", "POST", "PUT", "DELETE"); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/core/error/NotFoundException.java b/Lab 2.2/src/main/java/com/example/demo/core/error/NotFoundException.java new file mode 100644 index 0000000..586af3c --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/core/error/NotFoundException.java @@ -0,0 +1,7 @@ +package com.example.demo.core.error; + +public class NotFoundException extends RuntimeException { + public NotFoundException(Long id) { + super(String.format("Entity with id [%s] is not found or not exists", id)); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/core/model/BaseEntity.java b/Lab 2.2/src/main/java/com/example/demo/core/model/BaseEntity.java new file mode 100644 index 0000000..674ddfb --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/core/model/BaseEntity.java @@ -0,0 +1,20 @@ +package com.example.demo.core.model; + +public abstract class BaseEntity { + protected Long id; + + protected BaseEntity() { + } + + protected BaseEntity(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/core/repository/CommonRepository.java b/Lab 2.2/src/main/java/com/example/demo/core/repository/CommonRepository.java new file mode 100644 index 0000000..85e1e6d --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/core/repository/CommonRepository.java @@ -0,0 +1,17 @@ +package com.example.demo.core.repository; + +import java.util.List; + +public interface CommonRepository { + List getAll(); + + E get(T id); + + E create(E entity); + + E update(E entity); + + E delete(E entity); + + void deleteAll(); +} diff --git a/Lab 2.2/src/main/java/com/example/demo/core/repository/MapRepository.java b/Lab 2.2/src/main/java/com/example/demo/core/repository/MapRepository.java new file mode 100644 index 0000000..6809ac2 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/core/repository/MapRepository.java @@ -0,0 +1,57 @@ +package com.example.demo.core.repository; + +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import com.example.demo.core.model.BaseEntity; + +public abstract class MapRepository implements CommonRepository { + private final Map entities = new TreeMap<>(); + private Long lastId = 0L; + + protected MapRepository() { + } + + @Override + public List getAll() { + return entities.values().stream().toList(); + } + + @Override + public E get(Long id) { + return entities.get(id); + } + + @Override + public E create(E entity) { + lastId++; + entity.setId(lastId); + entities.put(lastId, entity); + return entity; + } + + @Override + public E update(E entity) { + if (get(entity.getId()) == null) { + return null; + } + entities.put(entity.getId(), entity); + return entity; + } + + @Override + public E delete(E entity) { + if (get(entity.getId()) == null) { + return null; + } + entities.remove(entity.getId()); + return entity; + } + + @Override + public void deleteAll() { + lastId = 0L; + entities.clear(); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/news/api/NewsController.java b/Lab 2.2/src/main/java/com/example/demo/news/api/NewsController.java new file mode 100644 index 0000000..8e38ed5 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/news/api/NewsController.java @@ -0,0 +1,75 @@ +package com.example.demo.news.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.types.service.TypeService; +import com.example.demo.users.service.UserService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/news") +public class NewsController { + private final NewsService newsService; + private final TypeService typeService; + private final UserService userService; + private final ModelMapper modelMapper; + + public NewsController(NewsService newsService, TypeService typeService, UserService userService, + ModelMapper modelMapper) { + this.newsService = newsService; + this.typeService = typeService; + this.userService = userService; + this.modelMapper = modelMapper; + } + + private NewsDto toDto(NewsEntity entity) { + return modelMapper.map(entity, NewsDto.class); + } + + private NewsEntity toEntity(NewsDto dto) { + final NewsEntity entity = modelMapper.map(dto, NewsEntity.class); + entity.setType(typeService.get(dto.getTypeId())); + entity.setHandle(userService.get(dto.getUserId())); + return entity; + } + + @GetMapping + public List getAll(@RequestParam(name = "typeId", defaultValue = "1") Long typeId) { + return newsService.getAll(typeId).stream().map(this::toDto).toList(); + } + + @GetMapping("/{id}") + public NewsDto get(@PathVariable(name = "id") Long id) { + return toDto(newsService.get(id)); + } + + @PostMapping + public NewsDto create(@RequestBody @Valid NewsDto dto) { + return toDto(newsService.create(toEntity(dto))); + } + + @PutMapping("/{id}") + public NewsDto update(@PathVariable(name = "id") Long id, @RequestBody NewsDto dto) { + return toDto(newsService.update(id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public NewsDto delete(@PathVariable(name = "id") Long id) { + return toDto(newsService.delete(id)); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/news/api/NewsDto.java b/Lab 2.2/src/main/java/com/example/demo/news/api/NewsDto.java new file mode 100644 index 0000000..2803a68 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/news/api/NewsDto.java @@ -0,0 +1,69 @@ +package com.example.demo.news.api; + +import java.sql.Date; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotNull; + +public class NewsDto { + private Long id; + @NotNull + private Long typeId; + @NotNull + private Long userId; + @NotNull + private String title; + @NotNull + private String text; + @NotNull + private Date date; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getTypeId() { + return typeId; + } + + public void setTypeId(Long typeId) { + this.typeId = typeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/news/model/NewsEntity.java b/Lab 2.2/src/main/java/com/example/demo/news/model/NewsEntity.java new file mode 100644 index 0000000..06dff75 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/news/model/NewsEntity.java @@ -0,0 +1,90 @@ +package com.example.demo.news.model; + +import java.util.Date; +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.users.model.UserEntity; + +public class NewsEntity extends BaseEntity { + private TypeEntity type; + private UserEntity handle; + private String title; + private String text; + private Date date; + + public NewsEntity() { + super(); + } + + public NewsEntity(Long id, TypeEntity type, UserEntity handle, String title, String text, Date date) { + super(id); + this.type = type; + this.handle = handle; + this.title = title; + this.text = text; + this.date = date; + } + + public TypeEntity getType() { + return type; + } + + public void setType(TypeEntity type) { + this.type = type; + } + + public UserEntity getHandle() { + return handle; + } + + public void setHandle(UserEntity handle) { + this.handle = handle; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + @Override + public int hashCode() { + return Objects.hash(id, type, title, text, date); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final NewsEntity other = (NewsEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getType(), type) + && Objects.equals(other.getHandle(), handle) + && Objects.equals(other.getTitle(), title) + + && Objects.equals(other.getText(), text) + && Objects.equals(other.getDate(), date); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/news/repository/NewsRepository.java b/Lab 2.2/src/main/java/com/example/demo/news/repository/NewsRepository.java new file mode 100644 index 0000000..64bc880 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/news/repository/NewsRepository.java @@ -0,0 +1,10 @@ +package com.example.demo.news.repository; + +import org.springframework.stereotype.Repository; + +import com.example.demo.core.repository.MapRepository; +import com.example.demo.news.model.NewsEntity; + +@Repository +public class NewsRepository extends MapRepository { +} diff --git a/Lab 2.2/src/main/java/com/example/demo/news/service/NewsService.java b/Lab 2.2/src/main/java/com/example/demo/news/service/NewsService.java new file mode 100644 index 0000000..13a0ae4 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/news/service/NewsService.java @@ -0,0 +1,53 @@ +package com.example.demo.news.service; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.repository.NewsRepository; + +@Service +public class NewsService { + private final NewsRepository repository; + + public NewsService(NewsRepository repository) { + this.repository = repository; + } + + public List getAll(Long typeId) { + if (Objects.equals(typeId, 0L)) { + return repository.getAll(); + } + return repository.getAll().stream() + .filter(item -> item.getType().getId().equals(typeId)) + .toList(); + } + + public NewsEntity get(Long id) { + return Optional.ofNullable(repository.get(id)) + .orElseThrow(() -> new NotFoundException(id)); + } + + public NewsEntity create(NewsEntity entity) { + return repository.create(entity); + } + + public NewsEntity update(Long id, NewsEntity entity) { + final NewsEntity existsEntity = get(id); + existsEntity.setType(entity.getType()); + existsEntity.setHandle(entity.getHandle()); + existsEntity.setTitle(entity.getTitle()); + existsEntity.setText(entity.getText()); + existsEntity.setDate(entity.getDate()); + return repository.update(existsEntity); + } + + public NewsEntity delete(Long id) { + final NewsEntity existsEntity = get(id); + return repository.delete(existsEntity); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/reviews/api/ReviewController.java b/Lab 2.2/src/main/java/com/example/demo/reviews/api/ReviewController.java new file mode 100644 index 0000000..9e8b140 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/reviews/api/ReviewController.java @@ -0,0 +1,77 @@ +package com.example.demo.reviews.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.service.ReviewService; +import com.example.demo.users.service.UserService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/review") +public class ReviewController { + private final ReviewService reviewService; + private final UserService userService; + + private final ModelMapper modelMapper; + + public ReviewController(ReviewService reviewService, UserService userService, + ModelMapper modelMapper) { + this.reviewService = reviewService; + this.userService = userService; + this.modelMapper = modelMapper; + } + + private ReviewDto toDto(ReviewEntity entity) { + return modelMapper.map(entity, ReviewDto.class); + } + + private ReviewEntity toEntity(ReviewDto dto) { + final ReviewEntity entity = modelMapper.map(dto, ReviewEntity.class); + entity.setUser(userService.get(dto.getUserId())); + return entity; + } + + @GetMapping + public List getAll(@RequestParam(name = "userId", defaultValue = "0") Long userId) { + return reviewService.getAll(userId).stream().map(this::toDto).toList(); + } + + @GetMapping("/news/{newsId}") + public List getAllFor(@PathVariable(name = "newsId") Long newsId) { + return reviewService.getAllForNews(newsId).stream().map(this::toDto).toList(); + } + + @GetMapping("/{id}") + public ReviewDto get(@PathVariable(name = "id") Long id) { + return toDto(reviewService.get(id)); + } + + @PostMapping + public ReviewDto create(@RequestBody @Valid ReviewDto dto) { + return toDto(reviewService.create(toEntity(dto))); + } + + @PutMapping("/{id}") + public ReviewDto update(@PathVariable(name = "id") Long id, @RequestBody ReviewDto dto) { + return toDto(reviewService.update(id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public ReviewDto delete(@PathVariable(name = "id") Long id) { + return toDto(reviewService.delete(id)); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/reviews/api/ReviewDto.java b/Lab 2.2/src/main/java/com/example/demo/reviews/api/ReviewDto.java new file mode 100644 index 0000000..b5a10f8 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/reviews/api/ReviewDto.java @@ -0,0 +1,58 @@ +package com.example.demo.reviews.api; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Date; +import jakarta.validation.constraints.NotNull; + +public class ReviewDto { + private Long id; + + private Long userId; + + private Long newsId; + @NotNull + private Date date; + @NotNull + private String text; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getNewsId() { + return newsId; + } + + public void setNewsId(Long newsId) { + this.userId = newsId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/reviews/model/ReviewEntity.java b/Lab 2.2/src/main/java/com/example/demo/reviews/model/ReviewEntity.java new file mode 100644 index 0000000..c908b9e --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/reviews/model/ReviewEntity.java @@ -0,0 +1,78 @@ +package com.example.demo.reviews.model; + +import java.util.Objects; +import java.util.Date; + +import com.example.demo.core.model.BaseEntity; +import com.example.demo.users.model.UserEntity; +import com.example.demo.news.model.NewsEntity; + +public class ReviewEntity extends BaseEntity { + private UserEntity user; + private NewsEntity news; + private Date date; + private String text; + + public ReviewEntity() { + super(); + } + + public ReviewEntity(Long id, UserEntity user, NewsEntity news, Date date, String text) { + super(id); + this.user = user; + this.news = news; + this.date = date; + this.text = text; + } + + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + this.user = user; + } + + public NewsEntity getNews() { + return news; + } + + public void setNews(NewsEntity news) { + this.news = news; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @Override + public int hashCode() { + return Objects.hash(id, user, news, date, text); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final ReviewEntity other = (ReviewEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getUser(), user) + && Objects.equals(other.getNews(), news) + && Objects.equals(other.getDate(), date) + && Objects.equals(other.getText(), text); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java b/Lab 2.2/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java new file mode 100644 index 0000000..6a5470c --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java @@ -0,0 +1,10 @@ +package com.example.demo.reviews.repository; + +import org.springframework.stereotype.Repository; + +import com.example.demo.core.repository.MapRepository; +import com.example.demo.reviews.model.ReviewEntity; + +@Repository +public class ReviewRepository extends MapRepository { +} diff --git a/Lab 2.2/src/main/java/com/example/demo/reviews/service/ReviewService.java b/Lab 2.2/src/main/java/com/example/demo/reviews/service/ReviewService.java new file mode 100644 index 0000000..390b626 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/reviews/service/ReviewService.java @@ -0,0 +1,61 @@ +package com.example.demo.reviews.service; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.repository.ReviewRepository; + +@Service +public class ReviewService { + private final ReviewRepository repository; + + public ReviewService(ReviewRepository repository) { + this.repository = repository; + } + + public List getAll(Long userId) { + if (Objects.equals(userId, 0L)) { + return repository.getAll(); + } + return repository.getAll().stream() + .filter(review -> review.getUser().getId().equals(userId)) + .toList(); + } + + public List getAllForNews(Long newsId) { + if (Objects.equals(newsId, 0L)) { + return repository.getAll(); + } + return repository.getAll().stream() + .filter(review -> review.getUser().getId().equals(newsId)) + .toList(); + } + + public ReviewEntity get(Long id) { + return Optional.ofNullable(repository.get(id)) + .orElseThrow(() -> new NotFoundException(id)); + } + + public ReviewEntity create(ReviewEntity entity) { + return repository.create(entity); + } + + public ReviewEntity update(Long id, ReviewEntity entity) { + final ReviewEntity existsEntity = get(id); + existsEntity.setUser(entity.getUser()); + existsEntity.setNews(entity.getNews()); + existsEntity.setDate(entity.getDate()); + existsEntity.setText(entity.getText()); + return repository.update(existsEntity); + } + + public ReviewEntity delete(Long id) { + final ReviewEntity existsEntity = get(id); + return repository.delete(existsEntity); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/speaker/api/SpeakerController.java b/Lab 2.2/src/main/java/com/example/demo/speaker/api/SpeakerController.java new file mode 100644 index 0000000..fb576dc --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/speaker/api/SpeakerController.java @@ -0,0 +1,23 @@ +package com.example.demo.speaker.api; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.speaker.service.SpeakerNews; + +@RestController +public class SpeakerController { + private final SpeakerNews speakerService; + + public SpeakerController(SpeakerNews speakerService) { + this.speakerService = speakerService; + } + + @GetMapping + public String hello( + @RequestParam(value = "name", defaultValue = "Мир") String name, + @RequestParam(value = "lang", defaultValue = "ru") String lang) { + return speakerService.say(name, lang); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java b/Lab 2.2/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java new file mode 100644 index 0000000..0ef7cda --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java @@ -0,0 +1,27 @@ +package com.example.demo.speaker.configuration; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.example.demo.speaker.domain.Speaker; +import com.example.demo.speaker.domain.SpeakerEng; +import com.example.demo.speaker.domain.SpeakerRus; + +@Configuration +public class SpeakerConfiguration { + private final Logger log = LoggerFactory.getLogger(SpeakerConfiguration.class); + + @Bean(value = "ru", initMethod = "init", destroyMethod = "destroy") + public SpeakerRus createRusSpeaker() { + log.info("Call createRusSpeaker()"); + return new SpeakerRus(); + } + + @Bean(value = "en") + public Speaker createEngSpeaker() { + log.info("Call createEngSpeaker()"); + return new SpeakerEng(); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/speaker/domain/Speaker.java b/Lab 2.2/src/main/java/com/example/demo/speaker/domain/Speaker.java new file mode 100644 index 0000000..27a0a29 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/speaker/domain/Speaker.java @@ -0,0 +1,5 @@ +package com.example.demo.speaker.domain; + +public interface Speaker { + String say(); +} diff --git a/Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java b/Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java new file mode 100644 index 0000000..5909864 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java @@ -0,0 +1,28 @@ +package com.example.demo.speaker.domain; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; + +@Component(value = "de") +public class SpeakerDeu implements Speaker { + private final Logger log = LoggerFactory.getLogger(SpeakerDeu.class); + + @Override + public String say() { + return "Hallo"; + } + + @PostConstruct + public void init() { + log.info("SpeakerDeu.init()"); + } + + @PreDestroy + public void destroy() { + log.info("SpeakerDeu.destroy()"); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java b/Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java new file mode 100644 index 0000000..a310403 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java @@ -0,0 +1,26 @@ +package com.example.demo.speaker.domain; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.InitializingBean; + +public class SpeakerEng implements Speaker, InitializingBean, DisposableBean { + private final Logger log = LoggerFactory.getLogger(SpeakerEng.class); + + @Override + public String say() { + return "Hello"; + } + + @Override + public void afterPropertiesSet() { + log.info("SpeakerEng.afterPropertiesSet()"); + } + + @Override + public void destroy() { + log.info("SpeakerEng.destroy()"); + + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java b/Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java new file mode 100644 index 0000000..d6ed18e --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java @@ -0,0 +1,21 @@ +package com.example.demo.speaker.domain; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SpeakerRus implements Speaker { + private final Logger log = LoggerFactory.getLogger(SpeakerRus.class); + + @Override + public String say() { + return "Привет"; + } + + public void init() { + log.info("SpeakerRus.init()"); + } + + public void destroy() { + log.info("SpeakerRus.destroy()"); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/speaker/service/SpeakerNews.java b/Lab 2.2/src/main/java/com/example/demo/speaker/service/SpeakerNews.java new file mode 100644 index 0000000..e9de0f8 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/speaker/service/SpeakerNews.java @@ -0,0 +1,20 @@ +package com.example.demo.speaker.service; + +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; + +import com.example.demo.speaker.domain.Speaker; + +@Service +public class SpeakerNews { + private final ApplicationContext applicationContext; + + public SpeakerNews(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + public String say(String name, String lang) { + final Speaker speaker = (Speaker) applicationContext.getBean(lang); + return String.format("%s, %s!", speaker.say(), name); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/types/api/TypeController.java b/Lab 2.2/src/main/java/com/example/demo/types/api/TypeController.java new file mode 100644 index 0000000..81f07cf --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/types/api/TypeController.java @@ -0,0 +1,64 @@ +package com.example.demo.types.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/type") +public class TypeController { + private final TypeService typeService; + private final ModelMapper modelMapper; + + public TypeController(TypeService typeService, ModelMapper modelMapper) { + this.typeService = typeService; + this.modelMapper = modelMapper; + } + + private TypeDto toDto(TypeEntity entity) { + return modelMapper.map(entity, TypeDto.class); + } + + private TypeEntity toEntity(TypeDto dto) { + return modelMapper.map(dto, TypeEntity.class); + } + + @GetMapping + public List getAll() { + return typeService.getAll().stream().map(this::toDto).toList(); + } + + @GetMapping("/{id}") + public TypeDto get(@PathVariable(name = "id") Long id) { + return toDto(typeService.get(id)); + } + + @PostMapping + public TypeDto create(@RequestBody @Valid TypeDto dto) { + return toDto(typeService.create(toEntity(dto))); + } + + @PutMapping("/{id}") + public TypeDto update(@PathVariable(name = "id") Long id, @RequestBody TypeDto dto) { + return toDto(typeService.update(id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public TypeDto delete(@PathVariable(name = "id") Long id) { + return toDto(typeService.delete(id)); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/types/api/TypeDto.java b/Lab 2.2/src/main/java/com/example/demo/types/api/TypeDto.java new file mode 100644 index 0000000..c559680 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/types/api/TypeDto.java @@ -0,0 +1,28 @@ +package com.example.demo.types.api; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.validation.constraints.NotBlank; + +public class TypeDto { + private Long id; + @NotBlank + private String name; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/types/model/TypeEntity.java b/Lab 2.2/src/main/java/com/example/demo/types/model/TypeEntity.java new file mode 100644 index 0000000..fd90bdb --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/types/model/TypeEntity.java @@ -0,0 +1,43 @@ +package com.example.demo.types.model; + +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; + +public class TypeEntity extends BaseEntity { + private String name; + + public TypeEntity() { + super(); + } + + public TypeEntity(Long id, String name) { + super(id); + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final TypeEntity other = (TypeEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getName(), name); + } + +} diff --git a/Lab 2.2/src/main/java/com/example/demo/types/repository/TypeRepository.java b/Lab 2.2/src/main/java/com/example/demo/types/repository/TypeRepository.java new file mode 100644 index 0000000..1c29ea2 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/types/repository/TypeRepository.java @@ -0,0 +1,10 @@ +package com.example.demo.types.repository; + +import org.springframework.stereotype.Repository; + +import com.example.demo.core.repository.MapRepository; +import com.example.demo.types.model.TypeEntity; + +@Repository +public class TypeRepository extends MapRepository { +} diff --git a/Lab 2.2/src/main/java/com/example/demo/types/service/TypeService.java b/Lab 2.2/src/main/java/com/example/demo/types/service/TypeService.java new file mode 100644 index 0000000..e71b030 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/types/service/TypeService.java @@ -0,0 +1,43 @@ +package com.example.demo.types.service; + +import java.util.List; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.repository.TypeRepository; + +@Service +public class TypeService { + private final TypeRepository repository; + + public TypeService(TypeRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.getAll(); + } + + public TypeEntity get(Long id) { + return Optional.ofNullable(repository.get(id)) + .orElseThrow(() -> new NotFoundException(id)); + } + + public TypeEntity create(TypeEntity entity) { + return repository.create(entity); + } + + public TypeEntity update(Long id, TypeEntity entity) { + final TypeEntity existsEntity = get(id); + existsEntity.setName(entity.getName()); + return repository.update(existsEntity); + } + + public TypeEntity delete(Long id) { + final TypeEntity existsEntity = get(id); + return repository.delete(existsEntity); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/users/api/UserController.java b/Lab 2.2/src/main/java/com/example/demo/users/api/UserController.java new file mode 100644 index 0000000..1d00e35 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/users/api/UserController.java @@ -0,0 +1,64 @@ +package com.example.demo.users.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/user") +public class UserController { + private final UserService userService; + private final ModelMapper modelMapper; + + public UserController(UserService userService, ModelMapper modelMapper) { + this.userService = userService; + this.modelMapper = modelMapper; + } + + private UserDto toDto(UserEntity entity) { + return modelMapper.map(entity, UserDto.class); + } + + private UserEntity toEntity(UserDto dto) { + return modelMapper.map(dto, UserEntity.class); + } + + @GetMapping + public List getAll() { + return userService.getAll().stream().map(this::toDto).toList(); + } + + @GetMapping("/{id}") + public UserDto get(@PathVariable(name = "id") Long id) { + return toDto(userService.get(id)); + } + + @PostMapping + public UserDto create(@RequestBody @Valid UserDto dto) { + return toDto(userService.create(toEntity(dto))); + } + + @PutMapping("/{id}") + public UserDto update(@PathVariable(name = "id") Long id, @RequestBody UserDto dto) { + return toDto(userService.update(id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public UserDto delete(@PathVariable(name = "id") Long id) { + return toDto(userService.delete(id)); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/users/api/UserDto.java b/Lab 2.2/src/main/java/com/example/demo/users/api/UserDto.java new file mode 100644 index 0000000..7363a35 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/users/api/UserDto.java @@ -0,0 +1,51 @@ +package com.example.demo.users.api; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.validation.constraints.NotNull; + +public class UserDto { + private Long id; + @NotNull + + private String handle; + @NotNull + + private String password; + @NotNull + + private String status; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getHandle() { + return handle; + } + + public void setHandle(String handle) { + this.handle = handle; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/users/model/UserEntity.java b/Lab 2.2/src/main/java/com/example/demo/users/model/UserEntity.java new file mode 100644 index 0000000..cc28ef1 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/users/model/UserEntity.java @@ -0,0 +1,65 @@ +package com.example.demo.users.model; + +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; + +public class UserEntity extends BaseEntity { + + private String handle; + private String password; + private String status; + + public UserEntity() { + super(); + } + + public UserEntity(Long id, String handle, String password, String status) { + super(id); + this.handle = handle; + this.password = password; + this.status = status; + } + + public String getHandle() { + return handle; + } + + public void setHandle(String handle) { + this.handle = handle; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + @Override + public int hashCode() { + return Objects.hash(id, handle, password, status); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final UserEntity other = (UserEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getHandle(), handle) + && Objects.equals(other.getPassword(), password) + && Objects.equals(other.getStatus(), status); + } +} diff --git a/Lab 2.2/src/main/java/com/example/demo/users/repository/UserRepository.java b/Lab 2.2/src/main/java/com/example/demo/users/repository/UserRepository.java new file mode 100644 index 0000000..fa4b654 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/users/repository/UserRepository.java @@ -0,0 +1,10 @@ +package com.example.demo.users.repository; + +import org.springframework.stereotype.Repository; + +import com.example.demo.core.repository.MapRepository; +import com.example.demo.users.model.UserEntity; + +@Repository +public class UserRepository extends MapRepository { +} diff --git a/Lab 2.2/src/main/java/com/example/demo/users/service/UserService.java b/Lab 2.2/src/main/java/com/example/demo/users/service/UserService.java new file mode 100644 index 0000000..2377a29 --- /dev/null +++ b/Lab 2.2/src/main/java/com/example/demo/users/service/UserService.java @@ -0,0 +1,45 @@ +package com.example.demo.users.service; + +import java.util.List; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.repository.UserRepository; + +@Service +public class UserService { + private final UserRepository repository; + + public UserService(UserRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.getAll(); + } + + public UserEntity get(Long id) { + return Optional.ofNullable(repository.get(id)) + .orElseThrow(() -> new NotFoundException(id)); + } + + public UserEntity create(UserEntity entity) { + return repository.create(entity); + } + + public UserEntity update(Long id, UserEntity entity) { + final UserEntity existsEntity = get(id); + existsEntity.setHandle(entity.getHandle()); + existsEntity.setPassword(entity.getPassword()); + existsEntity.setStatus(entity.getStatus()); + return repository.update(existsEntity); + } + + public UserEntity delete(Long id) { + final UserEntity existsEntity = get(id); + return repository.delete(existsEntity); + } +} diff --git a/Lab 2.2/src/main/resources/application.properties b/Lab 2.2/src/main/resources/application.properties new file mode 100644 index 0000000..70d7c93 --- /dev/null +++ b/Lab 2.2/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port = 8090 diff --git a/Lab 2.2/src/test/java/com/example/demo/NewsServiceTests.java b/Lab 2.2/src/test/java/com/example/demo/NewsServiceTests.java new file mode 100644 index 0000000..fdbe4fb --- /dev/null +++ b/Lab 2.2/src/test/java/com/example/demo/NewsServiceTests.java @@ -0,0 +1,90 @@ +package com.example.demo; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.core.error.NotFoundException; +import java.util.Date; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.types.service.TypeService; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +@SpringBootTest +@TestMethodOrder(OrderAnnotation.class) +class NewsServiceTests { + @Autowired + private NewsService newsService; + @Autowired + private TypeService typeNews; + @Autowired + private UserService userService; + + @Test + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> newsService.get(0L)); + } + + @Test + @Order(1) + void createTest() throws ParseException { + final TypeEntity type = typeNews.create(new TypeEntity(null, "specialType")); + final UserEntity handle = userService.create(new UserEntity(null, "specialuser", "12", "admin")); + String dateString = "25.03.2024"; + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); + Date parsedDate = (java.util.Date) sdf.parse(dateString); + newsService.create(new NewsEntity(null, type, handle, "dfd", "dhfj", (java.util.Date) parsedDate)); + newsService.create(new NewsEntity(null, type, handle, "dfdfd", "dhfdfj", (java.util.Date) parsedDate)); + final NewsEntity last = newsService + .create(new NewsEntity(null, type, handle, "что-то нормальное", "dhfdfj", (java.util.Date) parsedDate)); + Assertions.assertEquals(4, newsService.getAll(0L).size()); + Assertions.assertEquals(last, newsService.get(4L)); + } + + @Test + @Order(2) + void updateTest() throws ParseException { + String dateString = "29.03.2024"; + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); + Date parsedDate = (java.util.Date) sdf.parse(dateString); + final TypeEntity type = typeNews.create(new TypeEntity(null, "specialType2")); + final UserEntity handle = userService.create(new UserEntity(null, "specialuser2", "12", "admin")); + + final NewsEntity entity = newsService.get(3L); + final String oldTitle = entity.getTitle(); + final NewsEntity newEntity = newsService.update(3L, + new NewsEntity(null, type, + handle, "что-то нормальное,но другое", "dhfdfj", + (java.util.Date) parsedDate)); + Assertions.assertEquals(4, newsService.getAll(0L).size()); + Assertions.assertEquals(newEntity, newsService.get(3L)); + Assertions.assertEquals("что-то нормальное,но другое", newEntity.getTitle()); + Assertions.assertNotEquals(oldTitle, newEntity.getTitle()); + } + + @Test + @Order(3) + void deleteTest() throws ParseException { + newsService.delete(1L); + Assertions.assertEquals(3, newsService.getAll(0L).size()); + String dateString = "28.03.2024"; + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); + Date parsedDate = (java.util.Date) sdf.parse(dateString); + final TypeEntity type = typeNews.create(new TypeEntity(null, "specialType3")); + final UserEntity handle = userService.create(new UserEntity(null, "specialuser3", "12", "admin")); + final NewsEntity newEntity = newsService + .create(new NewsEntity(null, type, handle, "dfdfd", "dhfdfj", (java.util.Date) parsedDate)); + + Assertions.assertEquals(7, typeNews.getAll().size()); + Assertions.assertEquals(5L, newEntity.getId()); + } +} diff --git a/Lab 2.2/src/test/java/com/example/demo/ReviewServiceTests.java b/Lab 2.2/src/test/java/com/example/demo/ReviewServiceTests.java new file mode 100644 index 0000000..df8a718 --- /dev/null +++ b/Lab 2.2/src/test/java/com/example/demo/ReviewServiceTests.java @@ -0,0 +1,100 @@ +package com.example.demo; + +import java.util.Calendar; +import java.util.GregorianCalendar; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.service.ReviewService; +import java.text.ParseException; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; +import com.example.demo.news.service.NewsService; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.types.service.TypeService; +import com.example.demo.types.model.TypeEntity; + +@SpringBootTest +@TestMethodOrder(OrderAnnotation.class) +class ReviewServiceTests { + @Autowired + private ReviewService reviewService; + @Autowired + private UserService userService; + @Autowired + private TypeService typeService; + @Autowired + private NewsService newsService; + + private Calendar calendar = new GregorianCalendar(2017, 2, 25); + + @Test + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> reviewService.get(0L)); + } + + @Test + @Order(1) + void createTest() throws ParseException { + final TypeEntity type = typeService.create(new TypeEntity(null, "specialType")); + final UserEntity handle = userService.create(new UserEntity(null, "specialuser", "12", "admin")); + + final NewsEntity newsSpecial = newsService + .create(new NewsEntity(null, type, handle, "dfd", "dhfj", calendar.getTime())); + + reviewService.create(new ReviewEntity(null, handle, newsSpecial, calendar.getTime(), "все было супер")); + reviewService.create(new ReviewEntity(null, handle, newsSpecial, calendar.getTime(), "all is ok")); + final ReviewEntity last = reviewService + .create(new ReviewEntity(null, handle, newsSpecial, calendar.getTime(), "fantastic")); + + Assertions.assertEquals(3, reviewService.getAll(0L).size()); + Assertions.assertEquals(3, reviewService.getAllForNews(0L).size()); + Assertions.assertEquals(last, reviewService.get(3L)); + } + + @Test + @Order(2) + void updateTest() { + final UserEntity userSpecial1 = userService + .create(new UserEntity(null, "userSpecial1", "111", "student")); + final String test = "TEST"; + final ReviewEntity entity = reviewService.get(3L); + final String oldText = entity.getText(); + final var News = entity.getNews(); + final ReviewEntity newEntity = reviewService.update(3L, + new ReviewEntity(null, userSpecial1, News, calendar.getTime(), test)); + Assertions.assertEquals(3, reviewService.getAll(0L).size()); + Assertions.assertEquals(3, reviewService.getAllForNews(0L).size()); + Assertions.assertEquals(newEntity, reviewService.get(3L)); + Assertions.assertEquals(test, newEntity.getText()); + Assertions.assertNotEquals(oldText, newEntity.getText()); + } + + @Test + @Order(3) + void deleteTest() { + final ReviewEntity entity = reviewService.get(3L); + final UserEntity userSpecial2 = userService + .create(new UserEntity(null, "userSpecial2", "userspecial@gmail.com", "userSpecial2")); + + reviewService.delete(3L); + Assertions.assertEquals(2, reviewService.getAll(0L).size()); + Assertions.assertEquals(2, reviewService.getAllForNews(0L).size()); + final ReviewEntity last = reviewService.get(2L); + Assertions.assertEquals(2L, last.getId()); + final var News = entity.getNews(); + final ReviewEntity newEntity = reviewService.update(2L, + new ReviewEntity(null, userSpecial2, News, calendar.getTime(), "nice")); + Assertions.assertEquals(2, reviewService.getAll(0L).size()); + Assertions.assertEquals(2, reviewService.getAllForNews(0L).size()); + Assertions.assertEquals(2L, newEntity.getId()); + } +} diff --git a/Lab 2.2/src/test/java/com/example/demo/SpeakerNewsTests.java b/Lab 2.2/src/test/java/com/example/demo/SpeakerNewsTests.java new file mode 100644 index 0000000..98974b7 --- /dev/null +++ b/Lab 2.2/src/test/java/com/example/demo/SpeakerNewsTests.java @@ -0,0 +1,38 @@ +package com.example.demo; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.speaker.service.SpeakerNews; + +@SpringBootTest +class SpeakerNewsTests { + @Autowired + SpeakerNews speakerNews; + + @Test + void testSpeakerRus() { + final String res = speakerNews.say("Мир", "ru"); + Assertions.assertEquals("Привет, Мир!", res); + } + + @Test + void testSpeakerEng() { + final String res = speakerNews.say("World", "en"); + Assertions.assertEquals("Hello, World!", res); + } + + @Test + void testSpeakerDeu() { + final String res = speakerNews.say("Welt", "de"); + Assertions.assertEquals("Hallo, Welt!", res); + } + + @Test + void testSpeakerErrorWired() { + Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> speakerNews.say("Мир", "rus")); + } +} diff --git a/Lab 2.2/src/test/java/com/example/demo/TypeNewsTests.java b/Lab 2.2/src/test/java/com/example/demo/TypeNewsTests.java new file mode 100644 index 0000000..5557c4e --- /dev/null +++ b/Lab 2.2/src/test/java/com/example/demo/TypeNewsTests.java @@ -0,0 +1,60 @@ +package com.example.demo; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; + +@SpringBootTest +@TestMethodOrder(OrderAnnotation.class) +class TypeNewsTests { + @Autowired + private TypeService typeService; + + @Test + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> typeService.get(0L)); + } + + @Test + @Order(1) + void createTest() { + typeService.create(new TypeEntity(null, "Название 1")); + typeService.create(new TypeEntity(null, "Название 2")); + final TypeEntity last = typeService.create(new TypeEntity(null, "Название 3")); + Assertions.assertEquals(5, typeService.getAll().size()); + Assertions.assertEquals(last, typeService.get(5L)); + } + + @Test + @Order(2) + void updateTest() { + final String test = "TEST"; + final TypeEntity entity = typeService.get(3L); + final String oldName = entity.getName(); + final TypeEntity newEntity = typeService.update(3L, new TypeEntity(1L, test)); + Assertions.assertEquals(4, typeService.getAll().size()); + Assertions.assertEquals(newEntity, typeService.get(3L)); + Assertions.assertEquals(test, newEntity.getName()); + Assertions.assertNotEquals(oldName, newEntity.getName()); + } + + @Test + @Order(3) + void deleteTest() { + typeService.delete(3L); + final TypeEntity last = typeService.get(2L); + Assertions.assertEquals(2L, last.getId()); + + final TypeEntity newEntity = typeService.create(new TypeEntity(null, "Другое имя")); + Assertions.assertEquals(4, typeService.getAll().size()); + Assertions.assertEquals(5L, newEntity.getId()); + } +} diff --git a/Lab 2.2/src/test/java/com/example/demo/UserServiceTests.java b/Lab 2.2/src/test/java/com/example/demo/UserServiceTests.java new file mode 100644 index 0000000..32cfbbc --- /dev/null +++ b/Lab 2.2/src/test/java/com/example/demo/UserServiceTests.java @@ -0,0 +1,61 @@ +package com.example.demo; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +@SpringBootTest +@TestMethodOrder(OrderAnnotation.class) +class UserServiceTests { + @Autowired + private UserService userService; + + @Test + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> userService.get(0L)); + } + + @Test + @Order(1) + void createTest() { + userService.create(new UserEntity(null, "user1", "123", "admin")); + userService.create(new UserEntity(null, "user2", "1", "student")); + final UserEntity last = userService.create(new UserEntity(null, "user3", "1", "student")); + Assertions.assertEquals(3, userService.getAll().size()); + Assertions.assertEquals(last, userService.get(3L)); + } + + @Test + @Order(2) + void updateTest() { + final String test = "TEST"; + final UserEntity entity = userService.get(3L); + final String oldHandle = entity.getHandle(); + final UserEntity newEntity = userService.update(3L, new UserEntity(1L, test, "user3@gmail.com", "user3")); + Assertions.assertEquals(3, userService.getAll().size()); + Assertions.assertEquals(newEntity, userService.get(3L)); + Assertions.assertEquals(test, newEntity.getHandle()); + Assertions.assertNotEquals(oldHandle, newEntity.getHandle()); + } + + @Test + @Order(3) + void deleteTest() { + userService.delete(3L); + Assertions.assertEquals(2, userService.getAll().size()); + final UserEntity last = userService.get(2L); + Assertions.assertEquals(2L, last.getId()); + + final UserEntity newEntity = userService.create(new UserEntity(null, "user3", "1", "student")); + Assertions.assertEquals(3, userService.getAll().size()); + Assertions.assertEquals(4L, newEntity.getId()); + } +} diff --git a/Lektsia6-src_2/.vscode/launch.json b/Lektsia6-src_2/.vscode/launch.json new file mode 100644 index 0000000..a9cd158 --- /dev/null +++ b/Lektsia6-src_2/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + "configurations": [ + { + "type": "java", + "name": "Spring Boot-DemoApplication<Лекция6-src>", + "request": "launch", + "cwd": "${workspaceFolder}", + "mainClass": "com.example.demo.DemoApplication", + "projectName": "Лекция6-src", + "args": "", + "envFile": "${workspaceFolder}/.env" + } + ] +} \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/.vscode/launch.json b/Lektsia6-src_2/Lektsia6-src_1/.vscode/launch.json new file mode 100644 index 0000000..8bedcb7 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "configurations": [ + { + "type": "java", + "name": "Spring Boot-DemoApplication<Лекция6-src>", + "request": "launch", + "cwd": "${workspaceFolder}", + "mainClass": "com.example.demo.DemoApplication", + "projectName": "Лекция6-src", + "args": "", + "envFile": "${workspaceFolder}/.env" + }, + { + "type": "java", + "name": "Spring Boot-DemoApplication", + "request": "launch", + "cwd": "${workspaceFolder}", + "mainClass": "com.example.demo.DemoApplication", + "projectName": "demo", + "args": "", + "envFile": "${workspaceFolder}/.env" + } + ] +} \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/.vscode/settings.json b/Lektsia6-src_2/Lektsia6-src_1/.vscode/settings.json new file mode 100644 index 0000000..c5f3f6b --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive" +} \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/data.mv.db b/Lektsia6-src_2/Lektsia6-src_1/data.mv.db new file mode 100644 index 0000000000000000000000000000000000000000..58fb822d59fe1df39e9f7a99a99aa67dd6f392c8 GIT binary patch literal 24576 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", + "request": "launch", + "cwd": "${workspaceFolder}", + "mainClass": "com.example.demo.DemoApplication", + "projectName": "Лекция6-src", + "args": "", + "envFile": "${workspaceFolder}/.env" + } + ] +} \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/build.gradle b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/build.gradle new file mode 100644 index 0000000..61a434b --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/build.gradle @@ -0,0 +1,52 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.2.4' + id 'io.spring.dependency-management' version '1.1.4' +} + +group = 'com.example' +version = '0.0.1-SNAPSHOT' + +defaultTasks 'bootRun' + +jar { + enabled = false +} + +bootJar { + archiveFileName = String.format('%s-%s.jar', rootProject.name, version) +} + +assert System.properties['java.specification.version'] == '17' || '21' +java { + sourceCompatibility = '17' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.modelmapper:modelmapper:3.2.0' + + + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'com.h2database:h2:2.2.224' + + implementation 'org.springframework.boot:spring-boot-devtools' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.3.0' + runtimeOnly 'org.webjars.npm:bootstrap:5.3.3' + runtimeOnly 'org.webjars.npm:bootstrap-icons:1.11.3' + + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradle/wrapper/gradle-wrapper.jar b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d64cd4917707c1f8861d8cb53dd15194d4248596 GIT binary patch literal 43462 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 literal 0 HcmV?d00001 diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradle/wrapper/gradle-wrapper.properties b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..1af9e09 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradlew b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradlew new file mode 100644 index 0000000..1aa94a4 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradlew.bat b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/readme.md b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/readme.md new file mode 100644 index 0000000..ac4a1d0 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/readme.md @@ -0,0 +1,15 @@ +H2 Console: \ +http://localhost:8080/h2-console + +JDBC URL: jdbc:h2:file:./data \ +User Name: sa \ +Password: password + +Почитать: + +- Spring Boot CRUD Application with Thymeleaf https://www.baeldung.com/spring-boot-crud-thymeleaf +- Thymeleaf Layout Dialect https://ultraq.github.io/thymeleaf-layout-dialect/ +- Tutorial: Using Thymeleaf https://www.thymeleaf.org/doc/tutorials/3.1/usingthymeleaf.html#introducing-thymeleaf +- Working with Cookies in Spring MVC using @CookieValue Annotation https://www.geeksforgeeks.org/working-with-cookies-in-spring-mvc-using-cookievalue-annotation/ +- Session Attributes in Spring MVC https://www.baeldung.com/spring-mvc-session-attributes +- LazyInitializationException – What it is and the best way to fix it https://thorben-janssen.com/lazyinitializationexception/ diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/settings.gradle b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/settings.gradle new file mode 100644 index 0000000..0a383dd --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'demo' diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/DemoApplication.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000..759fdd8 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,75 @@ +package com.example.demo; + +import java.time.LocalDate; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +import java.util.stream.IntStream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.model.UserRole; +import com.example.demo.users.service.UserService; + +@SpringBootApplication +public class DemoApplication implements CommandLineRunner { + private final Logger log = LoggerFactory.getLogger(DemoApplication.class); + + private final TypeService typeService; + private final UserService userService; + private final NewsService newsService; + + public DemoApplication(TypeService typeService, UserService userService, NewsService newsService) { + this.typeService = typeService; + this.userService = userService; + this.newsService = newsService; + } + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } + + @Override + public void run(String... args) throws Exception { + // if (args.length > 0 && "--populate".equals(args[0])) { + log.info("Create default types values"); + log.info("Create default user values"); + final var admin = new UserEntity("admin", "admin"); + admin.setRole(UserRole.ADMIN); + userService.create(admin); + + final var user1 = userService.create(new UserEntity("user1", Constants.DEFAULT_PASSWORD)); + + IntStream.range(2, 8) + .forEach(value -> userService.create( + new UserEntity("user".concat(String.valueOf(value)), Constants.DEFAULT_PASSWORD))); + final TypeEntity type1 = typeService.create(new TypeEntity("По поводу отчислений")); + final TypeEntity type2 = typeService.create(new TypeEntity("По другому поводу")); + log.info("Create default items values"); + Calendar calendar = new GregorianCalendar(2024, 4, 15); + Calendar calendar2 = new GregorianCalendar(2024, 4, 20); + final List news = List.of( + new NewsEntity(type1, "Заголовок", "чипи чипи", calendar.getTime()), + new NewsEntity(type1, "Другой заголовок", "чипи чапа", calendar.getTime()), + new NewsEntity(type2, "Заголовок2", "чипи чипи", calendar.getTime())); + news.forEach(newsEntity -> newsService.create(admin.getId(), newsEntity)); + + final List news2 = List.of( + new NewsEntity(type1, "Заголовок3", "чипи чипи", calendar2.getTime()), + new NewsEntity(type2, "Заголовок 222", "чипи чипи", calendar2.getTime()) + ); + news2.forEach(newsEntity -> newsService.create(admin.getId(), newsEntity)); + } + } + diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/allReviews/api/AllReviewsController.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/allReviews/api/AllReviewsController.java new file mode 100644 index 0000000..f68729b --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/allReviews/api/AllReviewsController.java @@ -0,0 +1,56 @@ +package com.example.demo.allReviews.api; + +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import com.example.demo.core.api.PageAttributesMapper; +import com.example.demo.core.configuration.Constants; +import com.example.demo.news.service.NewsService; +import com.example.demo.reviews.api.ReviewDto; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.service.ReviewService; +import com.example.demo.users.service.UserService; + +@Controller +@RequestMapping(AllReviewsController.URL) +public class AllReviewsController { + public static final String URL = "/all-reviews"; + private static final String VIEW = "all-reviews"; + private static final String PAGE_ATTRIBUTE = "page"; + + private final ReviewService reviewService; + private final NewsService newsService; + private final ModelMapper modelMapper; + + public AllReviewsController(ReviewService reviewService, ModelMapper modelMapper, NewsService newsService) { + this.reviewService = reviewService; + this.modelMapper = modelMapper; + this.newsService = newsService; + } + + private ExpandedReviewDto toDto(ReviewEntity entity) { + ExpandedReviewDto dto = modelMapper.map(entity, ExpandedReviewDto.class); + dto.setUserName(entity.getUser().getLogin()); + dto.setNewsName(entity.getNews().getTitle()); + return dto; + } + + @GetMapping + public String getAll( + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + Model model, + @RequestParam(name = "newsId", defaultValue = "0") Long newsId + ) { + model.addAttribute(PAGE_ATTRIBUTE, page); + model.addAttribute("news", newsService.getAll()); + model.addAttribute("newsId", newsId); + model.addAllAttributes(PageAttributesMapper.toAttributes( + reviewService.getAllForNews(newsId, page, Constants.DEFUALT_PAGE_SIZE), + this::toDto)); + return VIEW; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/allReviews/api/ExpandedReviewDto.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/allReviews/api/ExpandedReviewDto.java new file mode 100644 index 0000000..9bf755a --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/allReviews/api/ExpandedReviewDto.java @@ -0,0 +1,15 @@ +package com.example.demo.allReviews.api; + +import com.example.demo.reviews.api.ReviewDto; + +public class ExpandedReviewDto extends ReviewDto { + private String userName; + + public void setUserName(String name) { + this.userName = name; + } + + public String getUserName() { + return userName; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/api/GlobalController.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/api/GlobalController.java new file mode 100644 index 0000000..fd1f5e7 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/api/GlobalController.java @@ -0,0 +1,20 @@ +package com.example.demo.core.api; + +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ModelAttribute; + + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; + +@ControllerAdvice +public class GlobalController { + + + @ModelAttribute("servletPath") + String getRequestServletPath(HttpServletRequest request) { + return request.getServletPath(); + } +} + + diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/api/PageAttributesMapper.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/api/PageAttributesMapper.java new file mode 100644 index 0000000..74ee38d --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/api/PageAttributesMapper.java @@ -0,0 +1,18 @@ +package com.example.demo.core.api; + +import java.util.Map; +import java.util.function.Function; + +import org.springframework.data.domain.Page; + +public class PageAttributesMapper { + private PageAttributesMapper() { + } + + public static Map toAttributes(Page page, Function mapper) { + return Map.of( + "items", page.getContent().stream().map(mapper::apply).toList(), + "currentPage", page.getNumber(), + "totalPages", page.getTotalPages()); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/Constants.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/Constants.java new file mode 100644 index 0000000..0bf6e30 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/Constants.java @@ -0,0 +1,19 @@ +package com.example.demo.core.configuration; + +public class Constants { + public static final String SEQUENCE_NAME = "hibernate_sequence"; + + public static final int DEFUALT_PAGE_SIZE = 5; + + public static final String REDIRECT_VIEW = "redirect:"; + + public static final String ADMIN_PREFIX = "/admin"; + + public static final String LOGIN_URL = "/login"; + public static final String LOGOUT_URL = "/logout"; + + public static final String DEFAULT_PASSWORD = "123456"; + + private Constants() { + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java new file mode 100644 index 0000000..44defae --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java @@ -0,0 +1,23 @@ +package com.example.demo.core.configuration; + +import org.modelmapper.ModelMapper; +import org.modelmapper.PropertyMap; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.example.demo.core.model.BaseEntity; + +@Configuration +public class MapperConfiguration { + @Bean + ModelMapper modelMapper() { + final ModelMapper mapper = new ModelMapper(); + mapper.addMappings(new PropertyMap() { + @Override + protected void configure() { + skip(destination.getId()); + } + }); + return mapper; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/WebConfiguration.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/WebConfiguration.java new file mode 100644 index 0000000..797dedf --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/configuration/WebConfiguration.java @@ -0,0 +1,14 @@ +package com.example.demo.core.configuration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfiguration implements WebMvcConfigurer { + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/login").setViewName("login"); + registry.addRedirectViewController("/", "/"); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/error/AdviceController.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/error/AdviceController.java new file mode 100644 index 0000000..82c1c8c --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/error/AdviceController.java @@ -0,0 +1,53 @@ +package com.example.demo.core.error; + +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.servlet.ModelAndView; + +import jakarta.servlet.http.HttpServletRequest; + +@ControllerAdvice +public class AdviceController { + private final Logger log = LoggerFactory.getLogger(AdviceController.class); + + private static Throwable getRootCause(Throwable throwable) { + Throwable rootCause = throwable; + while (rootCause.getCause() != null && rootCause.getCause() != rootCause) { + rootCause = rootCause.getCause(); + } + return rootCause; + } + + private static Map getAttributes(HttpServletRequest request, Throwable throwable) { + final Throwable rootCause = getRootCause(throwable); + final StackTraceElement firstError = rootCause.getStackTrace()[0]; + return Map.of( + "message", rootCause.getMessage(), + "url", request.getRequestURL(), + "exception", rootCause.getClass().getName(), + "file", firstError.getFileName(), + "method", firstError.getMethodName(), + "line", firstError.getLineNumber()); + } + + @ExceptionHandler(value = Exception.class) + public ModelAndView defaultErrorloginr(HttpServletRequest request, Throwable throwable) throws Throwable { + if (AnnotationUtils.findAnnotation(throwable.getClass(), + ResponseStatus.class) != null) { + throw throwable; + } + + log.error("{}", throwable.getMessage()); + throwable.printStackTrace(); + final ModelAndView model = new ModelAndView(); + model.addAllObjects(getAttributes(request, throwable)); + model.setViewName("error"); + return model; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/error/NotFoundException.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/error/NotFoundException.java new file mode 100644 index 0000000..a61d118 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/error/NotFoundException.java @@ -0,0 +1,7 @@ +package com.example.demo.core.error; + +public class NotFoundException extends RuntimeException { + public NotFoundException(Class clazz, Long id) { + super(String.format("%s with id [%s] is not found or not exists", clazz.getSimpleName(), id)); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/model/BaseEntity.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/model/BaseEntity.java new file mode 100644 index 0000000..eba74ad --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/model/BaseEntity.java @@ -0,0 +1,28 @@ +package com.example.demo.core.model; + +import com.example.demo.core.configuration.Constants; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.SequenceGenerator; + +@MappedSuperclass +public abstract class BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = Constants.SEQUENCE_NAME) + @SequenceGenerator(name = Constants.SEQUENCE_NAME, sequenceName = Constants.SEQUENCE_NAME, allocationSize = 1) + protected Long id; + + protected BaseEntity() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/security/SecurityConfiguration.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/security/SecurityConfiguration.java new file mode 100644 index 0000000..5dbd8c2 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/security/SecurityConfiguration.java @@ -0,0 +1,112 @@ +package com.example.demo.core.security; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer.FrameOptionsConfig; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.users.api.UserSignupController; +import com.example.demo.users.model.UserRole; + +@Configuration +@EnableWebSecurity +public class SecurityConfiguration { + @Bean + SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { + httpSecurity.headers(headers -> headers.frameOptions(FrameOptionsConfig::sameOrigin)); + httpSecurity.csrf(AbstractHttpConfigurer::disable); + httpSecurity.cors(Customizer.withDefaults()); +// доступ к этим файлам получает любой пользователь + httpSecurity.authorizeHttpRequests(requests -> requests + .requestMatchers("/css/**", "/img/**", "/webjars/**", "/*.svg") + .permitAll()); + // все данные операции доступны только админу, иначе 403 ошибка. к этим адресам + // мы не сможем получить доступ ни по какому тппу запросов + httpSecurity.authorizeHttpRequests(requests -> requests + .requestMatchers(Constants.ADMIN_PREFIX + "/**").hasRole(UserRole.ADMIN.name()) + .requestMatchers("/h2-console/**").hasRole(UserRole.ADMIN.name()) + + + .requestMatchers("/").permitAll() + // доступ к регистрации пользователя доступен только анонимным пользователям + .requestMatchers(UserSignupController.URL).anonymous() + // доступ ко входу пользователя доступен только анонимным пользователям + .requestMatchers(Constants.LOGIN_URL).anonymous() + // для получения доступа ко всем остальным адресам необходимо чтобы пользователь + // вошел в систему( был не анонименым) + .anyRequest().authenticated()); + // хотим использовать аутентификацию через нашу форму + httpSecurity.formLogin(formLogin -> formLogin + .loginPage(Constants.LOGIN_URL)); + // функция запоминания пароля + httpSecurity.rememberMe(rememberMe -> rememberMe.key("uniqueAndSecret")); + // удаляем куки выходе из приложения + httpSecurity.logout(logout -> logout + .deleteCookies("JSESSIONID")); + + return httpSecurity.build(); + } + // возвращает провайдер аутентификации, который работает через хранилище + // dao- data access Object + @Bean + DaoAuthenticationProvider authenticationProvider(UserDetailsService userDetailsService) { + // создаем провайдер для работы с хранилищем + final DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); + // в качестве хранилища будет использоваться uds + authProvider.setUserDetailsService(userDetailsService); + // в качестве энкодера паролей используется доп бин + authProvider.setPasswordEncoder(passwordEncoder()); + return authProvider; + } + // доп бин для энкодера. если без него, то пароль не кодируется. + // эта штука преобразует пароль из 60 символов в 16-ричном формате + @Bean + PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} +// если мы хотим делать авторизацию через аннотации мы вешаем на этот класс +// аннотацию enableGlobalMethodsecurity, в +// котором можем определять какие аннотации будут работать +// securedEnable - включает использование аннотации secured(можно вешать на +// отдельные методы. чтобы указывать какие роли нужно иметь, чтобы получить +// доступ на конкретный метод) +// @EnableGlobalMethodSecurity( +// securedEnabled=true, +// jsr250Enabled=true, +// prePostEnabled=true) + +// securedEnabled–включает использование аннотации @Secured; +// jsr250Enabled–включает использование аннотации @RolesAllowed; +// prePostEnabled–включает использование аннотаций @PreAuthorise, +// @PostAuthorise, @PreFilter, @PostFilter. + +// Через аннотации: +// • @PreAuthorise – выполняет выражение +// на языке +// SEL для +// контроля доступа +// перед выполнением метода;• +// @PostAuthorise – выполняет выражение +// на языке +// SEL для +// контроля доступа +// после +// выполнением + +// метода (доступ к результату); +// • @PreFilter – использует выражение SEL для фильтрации перед выполнением; +// • @PostFilter – использует выражение SEL для фильтрации после выполнения; +// • @Secured – определяет список ролей пользователей, которые могут +// использовать +// метод/методы класса; +// • @RolesAllowed – аналогично @Secured (реализовано в рамках JSR 250) diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/security/UserPrincipal.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/security/UserPrincipal.java new file mode 100644 index 0000000..ce646c6 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/core/security/UserPrincipal.java @@ -0,0 +1,64 @@ +package com.example.demo.core.security; + +import java.util.Collection; +import java.util.Set; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import com.example.demo.users.model.UserEntity; + +public class UserPrincipal implements UserDetails { + private final long id; + private final String username; + private final String password; + private final Set roles; + private final boolean active; + + public UserPrincipal(UserEntity user) { + this.id = user.getId(); + this.username = user.getLogin(); + this.password = user.getPassword(); + this.roles = Set.of(user.getRole()); + this.active = true; + } + + public Long getId() { + return id; + } + + @Override + public String getUsername() { + return username; + } + + @Override + public String getPassword() { + return password; + } + + @Override + public Collection getAuthorities() { + return roles; + } + + @Override + public boolean isEnabled() { + return active; + } + + @Override + public boolean isAccountNonExpired() { + return isEnabled(); + } + + @Override + public boolean isAccountNonLocked() { + return isEnabled(); + } + + @Override + public boolean isCredentialsNonExpired() { + return isEnabled(); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/index/api/IndexController.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/index/api/IndexController.java new file mode 100644 index 0000000..3c9dbb0 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/index/api/IndexController.java @@ -0,0 +1,93 @@ +package com.example.demo.index.api; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Map; +import java.util.Optional; + +import org.modelmapper.ModelMapper; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import com.example.demo.core.api.PageAttributesMapper; +import com.example.demo.core.configuration.Constants; +import com.example.demo.core.security.UserPrincipal; +import com.example.demo.news.api.NewsDto; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.types.service.TypeService; +import com.example.demo.users.service.UserService; + +@Controller +public class IndexController { + public static final String PRODUCTS_VIEW = "index"; + public static final String PAGE_ATTRIBUTE = "page"; + + private NewsService newsService; + private UserService userService; + private TypeService typeService; + private final ModelMapper modelMapper; + + public IndexController(NewsService newsService, TypeService typeService, UserService userService, ModelMapper modelMapper) { + this.newsService = newsService; + this.userService = userService; + this.modelMapper = modelMapper; + this.typeService = typeService; + } + + private NewsDto toDto(NewsEntity entity) { + NewsDto dto = modelMapper.map(entity, NewsDto.class); + dto.setUserName(entity.getUser().getLogin()); + return dto; + } + + @GetMapping + public String getAll( + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + @RequestParam(name = "typeId", defaultValue = "0") Long typeId, + @RequestParam(name = "userId", defaultValue = "0") Long userId, + @RequestParam(name = "startDate", defaultValue = "") String startDateString, + @RequestParam(name = "endDate", defaultValue = "") String endDateString, + @AuthenticationPrincipal UserPrincipal principal, + Model model) { + final Map attributes = PageAttributesMapper.toAttributes( + newsService.getAllWithReviewsCount(page, Constants.DEFUALT_PAGE_SIZE), item -> toDto(item)); + model.addAllAttributes(attributes); + model.addAttribute(PAGE_ATTRIBUTE, page); + + model.addAttribute("startDate", startDateString); + model.addAttribute("endDate", endDateString); + model.addAttribute("userId", userId); + model.addAttribute("typeId", typeId); + model.addAttribute("users", userService.getAllAdmins()); + model.addAttribute("types", typeService.getAll()); + + Calendar startDate = Calendar.getInstance(), endDate = Calendar.getInstance(); + + if (startDateString.equals("")) { + startDate.setTimeInMillis(0); + } else { + LocalDate localDate = LocalDate.parse(startDateString, DateTimeFormatter.ISO_DATE); + startDate.clear(); + startDate.set(localDate.getYear(), localDate.getMonthValue() - 1, localDate.getDayOfMonth()); + } + + if (endDateString.equals("")) { + endDate = Calendar.getInstance(); + } else { + LocalDate localDate = LocalDate.parse(endDateString, DateTimeFormatter.ISO_DATE); + endDate.clear(); + endDate.set(localDate.getYear(), localDate.getMonthValue() - 1, localDate.getDayOfMonth()); + } + + model.addAllAttributes(PageAttributesMapper.toAttributes( + newsService.getAllWithReviewsCount(userId, typeId, startDate, endDate, page, Constants.DEFUALT_PAGE_SIZE), + this::toDto)); + + return PRODUCTS_VIEW; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsController.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsController.java new file mode 100644 index 0000000..83978ca --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsController.java @@ -0,0 +1,144 @@ +package com.example.demo.news.api; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.modelmapper.ModelMapper; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +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.SessionAttribute; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import com.example.demo.core.api.PageAttributesMapper; +import com.example.demo.core.configuration.Constants; +import com.example.demo.core.security.UserPrincipal; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.core.context.SecurityContextHolder; + +import jakarta.validation.Valid; + +@Controller +@RequestMapping(NewsController.URL) +public class NewsController { + public static final String URL = Constants.ADMIN_PREFIX + "/news"; + private static final String PAGE_ATTRIBUTE = "page"; + private static final String NEWS_VIEW = "news"; + private static final String NEWS_EDIT_VIEW = "news-edit"; + private static final String NEWS_ATTRIBUTE = "news"; + + private final TypeService typeService; + private final NewsService newsService; + private final ModelMapper modelMapper; + + public NewsController(TypeService typeService, NewsService newsService, + ModelMapper modelMapper) { + this.typeService = typeService; + this.newsService = newsService; + this.modelMapper = modelMapper; + } + + private NewsDto toDto(NewsEntity entity) { + NewsDto dto = modelMapper.map(entity, NewsDto.class); + return dto; + } + + private NewsEntity toEntity(NewsDto dto) { + NewsEntity entity = modelMapper.map(dto, NewsEntity.class); + entity.setType(typeService.get(dto.getTypeId())); + return entity; + } + + @GetMapping + public String getAll( + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + @AuthenticationPrincipal UserPrincipal userPrincipal, + Model model) { + final Map attributes = PageAttributesMapper.toAttributes( + newsService.getAll(userPrincipal.getId(), page, Constants.DEFUALT_PAGE_SIZE), this::toDto); + model.addAllAttributes(attributes); + model.addAttribute(PAGE_ATTRIBUTE, page); + return NEWS_VIEW; + } + + @GetMapping("/edit/") + public String create(Model model) { + List types = typeService.getAll(); + model.addAttribute("types", types); + model.addAttribute(NEWS_ATTRIBUTE, new NewsDto()); + return NEWS_EDIT_VIEW; + } + + @PostMapping("/edit/") + public String create( + @AuthenticationPrincipal UserPrincipal principal, + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + @ModelAttribute(name = NEWS_ATTRIBUTE) @Valid NewsDto news, + BindingResult bindingResult, + Model model, + RedirectAttributes redirectAttributes) { + if (bindingResult.hasErrors()) { + model.addAttribute(PAGE_ATTRIBUTE, page); + return NEWS_EDIT_VIEW; + } + redirectAttributes.addAttribute(PAGE_ATTRIBUTE, page); + news.setDate(new Date()); // Установка текущей даты + newsService.create(principal.getId(), toEntity(news)); // Использование ID текущего пользователя + return Constants.REDIRECT_VIEW + URL; + } + + @GetMapping("/edit/{id}") + public String update( + @PathVariable(name = "id") Long id, + Model model) { + if (id <= 0) { + throw new IllegalArgumentException(); + } + model.addAttribute("types", typeService.getAll()); + + model.addAttribute(NEWS_ATTRIBUTE, toDto(newsService.getNews(id))); + return NEWS_EDIT_VIEW; + } + + @PostMapping("/edit/{id}") + public String update( + @PathVariable(name = "id") Long id, + @ModelAttribute(name = NEWS_ATTRIBUTE) @Valid NewsDto news, + BindingResult bindingResult, + Model model) { + if (bindingResult.hasErrors()) { + return NEWS_EDIT_VIEW; + } + if (id <= 0) { + throw new IllegalArgumentException(); + } + + news.setDate(new Date()); + newsService.update(id, toEntity(news)); + typeService.getAll(); + return Constants.REDIRECT_VIEW + URL; + } + + @PostMapping("/delete/{id}") + public String delete( + @PathVariable(name = "id") Long id) { + newsService.delete(id); + return Constants.REDIRECT_VIEW + URL; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsDto.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsDto.java new file mode 100644 index 0000000..e34f5bb --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsDto.java @@ -0,0 +1,99 @@ +package com.example.demo.news.api; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotNull; + +public class NewsDto { + private Long id; + + @NotNull + private Long typeId; + + private String typeName; + // @NotNull + private Long userId; + @NotNull + private String title; + @NotNull + private String text; + // @NotNull + private Date date; + + private String userName; + private Long reviewsCount; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public Long getReviewsCount() { + return reviewsCount; + } + + public void setReviewsCount(Long count) { + this.reviewsCount = count; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String name) { + this.userName = name; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getTypeId() { + return typeId; + } + + public void setTypeId(Long id) { + this.typeId = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsGroupedDto.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsGroupedDto.java new file mode 100644 index 0000000..bbe4b02 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/api/NewsGroupedDto.java @@ -0,0 +1,31 @@ +package com.example.demo.news.api; + +public class NewsGroupedDto { + private String typeName; + private String title; + private String text; + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/model/ExtendedNewsEntity.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/model/ExtendedNewsEntity.java new file mode 100644 index 0000000..03b16ae --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/model/ExtendedNewsEntity.java @@ -0,0 +1,26 @@ +package com.example.demo.news.model; + + +import java.util.Date; + +import com.example.demo.types.model.TypeEntity; +import com.example.demo.users.model.UserEntity; + +public class ExtendedNewsEntity extends NewsEntity { + private Long reviewsCount; + + public ExtendedNewsEntity(Long id, TypeEntity type, UserEntity user, String title, String text, Date date, + Long reviewsCount) { + super(type, user, title, text, date); + this.reviewsCount = reviewsCount; + this.setId(id); + } + + public void setReviewsCount(Long count) { + this.reviewsCount = count; + } + + public Long getReviewsCount() { + return reviewsCount; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/model/NewsEntity.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/model/NewsEntity.java new file mode 100644 index 0000000..cc955aa --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/model/NewsEntity.java @@ -0,0 +1,124 @@ +package com.example.demo.news.model; + +import java.util.Date; +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.users.model.UserEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "news") +public class NewsEntity extends BaseEntity { + @ManyToOne + @JoinColumn(name = "typeId", nullable = false) + private TypeEntity type; + + @ManyToOne + @JoinColumn(name = "userId") + private UserEntity user; + + @Column(nullable = false) + private String title; + + @Column(nullable = false) + private String text; + + @Column(nullable = false) + private Date date; + + public NewsEntity() { + } + + public NewsEntity(TypeEntity type, String title, String text, Date date) { + this.type = type; + this.title = title; + this.text = text; + this.date = date; + } + + public NewsEntity(TypeEntity type, UserEntity user, String title, String text, Date date) { + this.type = type; + this.user = user; + this.title = title; + this.text = text; + this.date = date; + } + + public TypeEntity getType() { + return type; + } + + public void setType(TypeEntity type) { + this.type = type; + } + + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + if (user == null) { + return; // Защита от NullPointerException + } + + if (this.user != null && this.user.equals(user)) { + return; // Проверка на дублирование связи + } + + this.user = user; + user.addNews(this); // Добавляем обратную связь + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), type, user, title, text, date); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + if (!super.equals(obj)) + return false; + final NewsEntity other = (NewsEntity) obj; + return Objects.equals(this.type, other.type) + && Objects.equals(this.user, other.user) + && Objects.equals(this.title, other.title) + && Objects.equals(this.text, other.text) + && Objects.equals(this.date, other.date); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/repository/NewsRepository.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/repository/NewsRepository.java new file mode 100644 index 0000000..7f38a3d --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/repository/NewsRepository.java @@ -0,0 +1,65 @@ +package com.example.demo.news.repository; + +import java.util.Calendar; +import java.util.List; +import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; + +import com.example.demo.news.model.ExtendedNewsEntity; +import com.example.demo.news.model.NewsEntity; + +public interface NewsRepository extends CrudRepository, + PagingAndSortingRepository { + + Optional findOneByUserIdAndId(long userId, long newsId); + + List findByUserId(long userId); + + Optional findById(long newsId); + + List findByUserIdAndTypeId(long userId, long typeId); + + @Query("select n from UserEntity u join u.news n where u.id = ?1 and n.date >= ?2 and n.date <= ?3") + List getNewsByUserIdForLastMonth(long userId, Calendar start, Calendar finish); + + @Query("select o from UserEntity u join u.news o where o.date >= ?1 and o.date <= ?2") + Page getNewsForLastMonth(Calendar start, Calendar finish, Pageable pageable); + + Page findByUserId(long userId, Pageable pageable); + + Page findByTypeId(long typeId, Pageable pageable); + + Page findByUserIdAndTypeId(long userId, long typeId, Pageable pageable); + + @Query("SELECT new com.example.demo.news.model.ExtendedNewsEntity(n.id, n.type, n.user, n.title, n.text, n.date, COUNT(r.id)) " + + + "FROM NewsEntity n " + + "LEFT JOIN ReviewEntity r ON r.news.id = n.id " + + "GROUP BY n.id, n.type, n.user, n.title, n.text, n.date") + Page findAllNewsWithReviewCount(Pageable pageable); + + // !!! + + @Query("SELECT new com.example.demo.news.model.ExtendedNewsEntity(n.id, n.type, n.user, n.title, n.text, n.date, COUNT(r.id)) " + + + "FROM NewsEntity n " + + "LEFT JOIN ReviewEntity r ON r.news.id = n.id " + + "WHERE (:userId = 0L OR n.user.id = :userId) " + + "AND (:typeId = 0L OR n.type.id = :typeId) " + + "AND n.date BETWEEN :startDate AND :endDate " + + "GROUP BY n.id, n.type, n.user, n.title, n.text, n.date") + Page findNewsWithReviewsCount(@Param("userId") long userId, + @Param("typeId") long typeId, + @Param("startDate") Calendar startDate, + @Param("endDate") Calendar endDate, + Pageable pageable); + + Optional findByTitleIgnoreCase(String title); + +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/service/NewsService.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/service/NewsService.java new file mode 100644 index 0000000..5d50e70 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/news/service/NewsService.java @@ -0,0 +1,181 @@ +package com.example.demo.news.service; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.stream.StreamSupport; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.news.model.ExtendedNewsEntity; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.repository.NewsRepository; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +import groovyjarjarantlr4.v4.parse.ANTLRParser.elementOption_return; + +@Service +public class NewsService { + private final NewsRepository repository; + private final UserService userService; + + public NewsService(NewsRepository repository, UserService userService) { + this.repository = repository; + this.userService = userService; + } + + @Transactional(readOnly = true) + public List getAll(long userId, Long typeId) { + userService.get(userId); + if (typeId == null || typeId <= 0L) { + return repository.findByUserId(userId); + } else { + return repository.findByUserIdAndTypeId(userId, typeId); + } + } + + @Transactional(readOnly = true) + public List getAll() { + return StreamSupport + .stream(repository.findAll().spliterator(), false) + .toList(); + } + + @Transactional(readOnly = true) + public Page getAllWithReviewsCount(int page, int size) { + final Pageable pageable = PageRequest.of(page, size); + return repository.findAllNewsWithReviewCount(pageable); + } + + @Transactional(readOnly = true) + public Page getAll(int page, int size) { + final Pageable pageable = PageRequest.of(page, size); + return repository.findAll(pageable); + } + + @Transactional(readOnly = true) + public Page getAll(long userId, int page, int size) { + final Pageable pageable = PageRequest.of(page, size); + userService.get(userId); + return repository.findByUserId(userId, pageable); + } + + @Transactional(readOnly = true) + public NewsEntity get(long userId, long id) { + userService.get(userId); + return repository.findOneByUserIdAndId(userId, id) + .orElseThrow(() -> new NotFoundException(NewsEntity.class, id)); + } + + @Transactional(readOnly = true) + public NewsEntity get(long id) { + return repository.findById(id) + .orElseThrow(() -> new NotFoundException(NewsEntity.class, id)); + } + + @Transactional(readOnly = true) + public NewsEntity getNews(long id) { + return repository.findById(id) + .orElseThrow(() -> new NotFoundException(NewsEntity.class, id)); + } + private void checkTitle(String title) { + if (repository.findByTitleIgnoreCase(title).isPresent()) { + throw new IllegalArgumentException(String.format("News with title %s is already exists", title)); + } + } + @Transactional + public NewsEntity create(long userId, NewsEntity entity) { + if (entity == null) { + throw new IllegalArgumentException("Entity is null"); + } + checkTitle(entity.getTitle()); + UserEntity existsUser = userService.get(userId); + entity.setUser(existsUser); + return repository.save(entity); + } + + @Transactional(readOnly = true) + public Page getAll(long userId, Long typeId, int page, int size) { + final Pageable pageable = PageRequest.of(page, size); + + if (Objects.equals(userId, 0L) && Objects.equals(typeId, 0L)) { + return repository.findAll(pageable); + } + + if (Objects.equals(userId, 0L)) { + return repository.findByTypeId(typeId, pageable); + } + + if (Objects.equals(typeId, 0L)) { + return repository.findByUserId(userId, pageable); + } + + return repository.findByUserIdAndTypeId(userId, typeId, pageable); + } + + @Transactional(readOnly = true) + public Page getNewsByMonth(Calendar startDate, Calendar finishDate, int page, + int size) { + final Pageable pageable = PageRequest.of(page, size, Sort.by("id")); + + return repository.getNewsForLastMonth(startDate, finishDate, pageable); + } + + @Transactional(readOnly = true) + public Page getAllWithReviewsCount(Long userId, Long typeId, Calendar startDate, + Calendar endDate, int page, int size) { + Pageable pageable = PageRequest.of(page, size, Sort.by("id")); + return repository.findNewsWithReviewsCount(userId, typeId, startDate, endDate, pageable); + } + + @Transactional + public NewsEntity update(long userId, Long id, NewsEntity entity) { + userService.get(userId); + NewsEntity existsEntity = get(userId, id); + existsEntity.setTitle(entity.getTitle()); + existsEntity.setText(entity.getText()); + existsEntity.setDate(entity.getDate()); + existsEntity.setType(entity.getType()); + return repository.save(existsEntity); + } + + @Transactional + public NewsEntity update(Long id, NewsEntity entity) { + NewsEntity existsEntity = get(id); + existsEntity.setTitle(entity.getTitle()); + existsEntity.setText(entity.getText()); + existsEntity.setDate(entity.getDate()); + existsEntity.setType(entity.getType()); + return repository.save(existsEntity); + } + + @Transactional + public NewsEntity delete(long userId, Long id) { + userService.get(userId); + NewsEntity existsEntity = get(userId, id); + repository.delete(existsEntity); + return existsEntity; + } + + @Transactional + public NewsEntity delete(Long id) { + NewsEntity existsEntity = get(id); + repository.delete(existsEntity); + return existsEntity; + } + + @Transactional(readOnly = true) + public List getNewsByUserIdForLastMonth(long userId, Calendar start, Calendar finish) { + userService.get(userId); + return repository.getNewsByUserIdForLastMonth(userId, start, finish); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/api/ReviewController.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/api/ReviewController.java new file mode 100644 index 0000000..7c48f9b --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/api/ReviewController.java @@ -0,0 +1,149 @@ +package com.example.demo.reviews.api; + +import java.util.Date; +import java.util.Map; + +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.GetMapping; +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.ModelAttribute; +import org.springframework.validation.BindingResult; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import com.example.demo.core.api.PageAttributesMapper; +import com.example.demo.core.configuration.Constants; +import com.example.demo.core.security.UserPrincipal; +import com.example.demo.news.service.NewsService; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.service.ReviewService; +import com.example.demo.users.service.UserService; + +import jakarta.validation.Valid; + +@Controller +@RequestMapping(ReviewController.URL) +public class ReviewController { + public static final String URL = "/reviews"; + private static final String REVIEW_VIEW = "reviews"; + private static final String PAGE_ATTRIBUTE = "page"; + private static final String REVIEW_ATTRIBUTE = "review"; + private static final String REVIEW_EDIT_VIEW = "review-edit"; + + private final ReviewService reviewService; + private final UserService userService; + private final NewsService newsService; + private final ModelMapper modelMapper; + + public ReviewController(ReviewService reviewService, NewsService newsService, UserService userService, ModelMapper modelMapper) { + this.reviewService = reviewService; + this.userService = userService; + this.modelMapper = modelMapper; + this.newsService = newsService; + } + + private ReviewDto toDto(ReviewEntity entity) { + ReviewDto dto = modelMapper.map(entity, ReviewDto.class); + dto.setNewsName(entity.getNews().getTitle()); + return dto; + } + + private ReviewEntity toEntity(ReviewDto dto) { + final ReviewEntity entity = modelMapper.map(dto, ReviewEntity.class); + entity.setNews(newsService.get(dto.getNewsId())); + return entity; + } + @GetMapping + public String getAll( + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + @AuthenticationPrincipal UserPrincipal principal, + Model model) { + final Map attributes = PageAttributesMapper.toAttributes( + reviewService.getAll(principal.getId(), page, Constants.DEFUALT_PAGE_SIZE), this::toDto); + model.addAllAttributes(attributes); + model.addAttribute(PAGE_ATTRIBUTE, page); + return REVIEW_VIEW; + } + + @GetMapping("/news/{id}") + public String getAllForNews( + @PathVariable(name = "id") Long id, + @PathVariable(name = "news") Long newsId, + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + Model model) { + final Map attributes = PageAttributesMapper.toAttributes( + reviewService.getAllForNews(newsId,page, Constants.DEFUALT_PAGE_SIZE), this::toDto); + model.addAllAttributes(attributes); + model.addAttribute(PAGE_ATTRIBUTE, page); + return REVIEW_VIEW; + } + + @GetMapping("/edit/") + public String create( + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + Model model) { + model.addAttribute(REVIEW_ATTRIBUTE, new ReviewDto()); + model.addAttribute(PAGE_ATTRIBUTE, page); + model.addAttribute("news", newsService.getAll()); + return REVIEW_EDIT_VIEW; + } + + @PostMapping("/edit/") + public String create( + @AuthenticationPrincipal UserPrincipal principal, + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + @ModelAttribute(name = REVIEW_ATTRIBUTE) @Valid ReviewDto review, + BindingResult bindingResult, + Model model, + RedirectAttributes redirectAttributes) { + if (bindingResult.hasErrors()) { + model.addAttribute(PAGE_ATTRIBUTE, page); + return REVIEW_EDIT_VIEW; + } + redirectAttributes.addAttribute(PAGE_ATTRIBUTE, page); + review.setDate(new Date()); + reviewService.create(principal.getId(), toEntity(review)); + return Constants.REDIRECT_VIEW + URL; + } + + @GetMapping("/edit/{id}") + public String update( + @PathVariable(name = "id") Long id, + Model model) { + if (id <= 0) { + throw new IllegalArgumentException(); + } + model.addAttribute("news", newsService.getAll()); + + model.addAttribute(REVIEW_ATTRIBUTE, toDto(reviewService.get(id))); + return REVIEW_EDIT_VIEW; + } + + @PostMapping("/edit/{id}") + public String update( + @PathVariable(name = "id") Long id, + @ModelAttribute(name = REVIEW_ATTRIBUTE) @Valid ReviewDto review, + BindingResult bindingResult, + Model model) { + if (bindingResult.hasErrors()) { + return REVIEW_EDIT_VIEW; + } + if (id <= 0) { + throw new IllegalArgumentException(); + } + reviewService.update(id, toEntity(review)); + return Constants.REDIRECT_VIEW + URL; + } + + @PostMapping("/delete/{id}") + public String delete( + @PathVariable(name = "id") Long id) { + reviewService.delete(id); + return Constants.REDIRECT_VIEW + URL; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/api/ReviewDto.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/api/ReviewDto.java new file mode 100644 index 0000000..f89e921 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/api/ReviewDto.java @@ -0,0 +1,64 @@ +package com.example.demo.reviews.api; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Date; + +import jakarta.validation.constraints.NotNull; + +public class ReviewDto { + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Long id; + + // @JsonProperty(access = JsonProperty.Access.READ_ONLY) + // @NotNull + // @Min(1) + // private Long userId; + // @NotNull + private Date date; + @NotNull + private String text; + @NotNull + private Long newsId; + + private String newsName; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNewsName() { + return newsName; + } + + public void setNewsName(String name) { + this.newsName = name; + } + + public Long getNewsId() { + return newsId; + } + + public void setNewsId(Long id) { + this.newsId = id; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/model/ReviewEntity.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/model/ReviewEntity.java new file mode 100644 index 0000000..eaf2162 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/model/ReviewEntity.java @@ -0,0 +1,87 @@ +package com.example.demo.reviews.model; + +import java.util.Date; +import java.util.Objects; +import com.example.demo.core.model.BaseEntity; +import com.example.demo.users.model.UserEntity; +import com.example.demo.news.model.NewsEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "reviews") +public class ReviewEntity extends BaseEntity { + @ManyToOne + @JoinColumn(name = "userId", nullable = false) + private UserEntity user; + + @ManyToOne + @JoinColumn(name = "newsId", nullable = false) + private NewsEntity news; + + @Column(nullable = false) + private Date date; + + @Column(nullable = false) + private String text; + + public ReviewEntity() { + } + + public ReviewEntity(Date date, String text) { + this.date = date; + this.text = text; + } + + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + this.user = user; + } + + public NewsEntity getNews() { + return news; + } + + public void setNews(NewsEntity news) { + this.news = news; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @Override + public int hashCode() { + return Objects.hash(id, user, news, date, text); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final ReviewEntity other = (ReviewEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getDate(), date) + && Objects.equals(other.getText(), text); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java new file mode 100644 index 0000000..c8f113b --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java @@ -0,0 +1,29 @@ +package com.example.demo.reviews.repository; + +import java.util.List; +import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; + +import com.example.demo.reviews.model.ReviewEntity; + +public interface ReviewRepository + extends CrudRepository, PagingAndSortingRepository { + // поиск одного отзыва по айди пользователя и айди отзыва + Optional findOneByUserIdAndId(long userId, long id); + + Optional findOneById(long id); + // поиск одного отзыва по айди новости и айди отзыва + Optional findOneByNewsIdAndId(long newsId, long id); + // поиск всех отзывов пользователя + List findByUserId(long userId); + + List findByNewsId(long newsId); + + Page findByUserId(long userId, Pageable pageable); + + Page findByNewsId(long newsId,Pageable pageable); +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/service/ReviewService.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/service/ReviewService.java new file mode 100644 index 0000000..6855cae --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/reviews/service/ReviewService.java @@ -0,0 +1,117 @@ +package com.example.demo.reviews.service; + +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.stream.StreamSupport; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.news.service.NewsService; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.repository.ReviewRepository; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +@Service +public class ReviewService { + private final ReviewRepository repository; + private final UserService userService; + private final NewsService newsService; + + public ReviewService(ReviewRepository repository, UserService userService,NewsService newsService) { + this.repository = repository; + this.userService = userService; + this.newsService = newsService; + } + + @Transactional(readOnly = true) + public List getAll(long userId) { + // если айдишник юзера 0 или -, чего не может быть, то мы выдаем все отзывы в + // принципе + if (userId <= 0) { + return StreamSupport.stream(repository.findAll().spliterator(), false).toList(); + } + userService.get(userId); + return repository.findByUserId(userId); + } + @Transactional(readOnly = true) + public Page getAll(int page, int size) { + final Pageable pageable = PageRequest.of(page, size); + return repository.findAll(pageable); + } + + @Transactional(readOnly = true) + public Page getAll(long userId, int page, int size) { + final Pageable pageable = PageRequest.of(page, size); + return repository.findByUserId(userId, pageable); + } + + public List getAllForNews(Long newsId) { + if (newsId == null || newsId <= 0) { + return StreamSupport.stream(repository.findAll().spliterator(), false).toList(); + } + newsService.getNews(newsId); + return repository.findByNewsId(newsId); + } + + @Transactional(readOnly = true) + public Page getAllForNews(long newsId, int page, int size) { + if (Objects.equals(newsId, 0L)) { + return getAll(page, size); + } + + final Pageable pageRequest = PageRequest.of(page, size); + newsService.getNews(newsId); + return repository.findByNewsId(newsId, pageRequest); + } + + @Transactional(readOnly = true) + public ReviewEntity get(long id) { + + return repository.findOneById(id) + .orElseThrow(() -> new NotFoundException(ReviewEntity.class, id)); + } + @Transactional(readOnly = true) + public ReviewEntity getForNews(long newsId, Long id) { + newsService.getNews(newsId); + return repository.findOneByNewsIdAndId(newsId, id) + .orElseThrow(() -> new NotFoundException(ReviewEntity.class, id)); + } + + @Transactional + public ReviewEntity create(long userId, ReviewEntity entity) { + if (entity == null) { + throw new IllegalArgumentException("Entity is null"); + } + final UserEntity existsUser = userService.get(userId); + entity.setUser(existsUser); + return repository.save(entity); + } + + @Transactional + public ReviewEntity update(long id, ReviewEntity entity) { + // userService.get(userId); + final ReviewEntity existsEntity = get(id); + // existsEntity.setUser(entity.getUser()); + existsEntity.setDate(new Date()); + existsEntity.setText(entity.getText()); + existsEntity.setNews(entity.getNews()); + return repository.save(existsEntity); + } + + // метод удаления принимает в себя айди юзера и айди отзыва. + @Transactional + public ReviewEntity delete(long id) { + // userService.get(userId); // зачем эта строчка вообще? + final ReviewEntity existsEntity = get(id); + repository.delete(existsEntity); + return existsEntity; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/api/TypeController.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/api/TypeController.java new file mode 100644 index 0000000..802c978 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/api/TypeController.java @@ -0,0 +1,104 @@ +package com.example.demo.types.api; + +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; + +import jakarta.validation.Valid; + +@Controller +@RequestMapping(TypeController.URL) +public class TypeController { + public static final String URL = Constants.ADMIN_PREFIX + "/type"; + private static final String TYPE_VIEW = "type"; + private static final String TYPE_EDIT_VIEW = "type-edit"; + private static final String TYPE_ATTRIBUTE = "type"; + + private final TypeService typeService; + private final ModelMapper modelMapper; + + public TypeController(TypeService typeService, ModelMapper modelMapper) { + this.typeService = typeService; + this.modelMapper = modelMapper; + } + + private TypeDto toDto(TypeEntity entity) { + return modelMapper.map(entity, TypeDto.class); + } + + private TypeEntity toEntity(TypeDto dto) { + return modelMapper.map(dto, TypeEntity.class); + } + + @GetMapping + public String getAll(Model model) { + model.addAttribute( + "items", + typeService.getAll().stream() + .map(this::toDto) + .toList()); + return TYPE_VIEW; + } + + @GetMapping("/edit/") + public String create(Model model) { + model.addAttribute(TYPE_ATTRIBUTE, new TypeDto()); + return TYPE_EDIT_VIEW; + } + + @PostMapping("/edit/") + public String create( + @ModelAttribute(name = TYPE_ATTRIBUTE) @Valid TypeDto type, + BindingResult bindingResult, + Model model) { + if (bindingResult.hasErrors()) { + return TYPE_EDIT_VIEW; + } + typeService.create(toEntity(type)); + return Constants.REDIRECT_VIEW + URL; + } + + @GetMapping("/edit/{id}") + public String update( + @PathVariable(name = "id") Long id, + Model model) { + if (id <= 0) { + throw new IllegalArgumentException(); + } + model.addAttribute(TYPE_ATTRIBUTE, toDto(typeService.get(id))); + return TYPE_EDIT_VIEW; + } + + @PostMapping("/edit/{id}") + public String update( + @PathVariable(name = "id") Long id, + @ModelAttribute(name = TYPE_ATTRIBUTE) @Valid TypeDto type, + BindingResult bindingResult, + Model model) { + if (bindingResult.hasErrors()) { + return TYPE_EDIT_VIEW; + } + if (id <= 0) { + throw new IllegalArgumentException(); + } + typeService.update(id, toEntity(type)); + return Constants.REDIRECT_VIEW + URL; + } + + @PostMapping("/delete/{id}") + public String delete( + @PathVariable(name = "id") Long id) { + typeService.delete(id); + return Constants.REDIRECT_VIEW + URL; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/api/TypeDto.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/api/TypeDto.java new file mode 100644 index 0000000..4551dbd --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/api/TypeDto.java @@ -0,0 +1,28 @@ +package com.example.demo.types.api; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +public class TypeDto { + private Long id; + @NotBlank + @Size(min = 5, max = 50) + private String name; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/model/TypeEntity.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/model/TypeEntity.java new file mode 100644 index 0000000..13a1c67 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/model/TypeEntity.java @@ -0,0 +1,47 @@ +package com.example.demo.types.model; + +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name = "types") +public class TypeEntity extends BaseEntity { + + @Column(nullable = false, unique = true, length = 50) + private String name; + + public TypeEntity() { + } + + public TypeEntity(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public int hashCode() { + return Objects.hash(getId(), name); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final TypeEntity other = (TypeEntity) obj; + return Objects.equals(other.getId(), getId()) && Objects.equals(other.getName(), name); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/repository/TypeRepository.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/repository/TypeRepository.java new file mode 100644 index 0000000..fb863a7 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/repository/TypeRepository.java @@ -0,0 +1,13 @@ +package com.example.demo.types.repository; + +import java.util.Optional; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; + +import com.example.demo.types.model.TypeEntity; + +public interface TypeRepository + extends CrudRepository, PagingAndSortingRepository { + Optional findByNameIgnoreCase(String name); +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/service/TypeService.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/service/TypeService.java new file mode 100644 index 0000000..3ec0d2b --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/types/service/TypeService.java @@ -0,0 +1,75 @@ +package com.example.demo.types.service; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.stream.StreamSupport; + +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.repository.TypeRepository; + +@Service +public class TypeService { + private final TypeRepository repository; + + public TypeService(TypeRepository repository) { + this.repository = repository; + } + + private void checkName(Long id, String name) { + final Optional existsType = repository.findByNameIgnoreCase(name); + if (existsType.isPresent() && !existsType.get().getId().equals(id)) { + throw new IllegalArgumentException( + String.format("Type with name %s is already exists", name)); + } + } + + @Transactional(readOnly = true) + public List getAll() { + return StreamSupport.stream(repository.findAll(Sort.by("id")).spliterator(), false).toList(); + } + + @Transactional(readOnly = true) + public List getByIds(Collection ids) { + final List types = StreamSupport.stream(repository.findAllById(ids).spliterator(), false).toList(); + if (types.size() < ids.size()) { + throw new IllegalArgumentException("Invalid type"); + } + return types; + } + + @Transactional(readOnly = true) + public TypeEntity get(long id) { + return repository.findById(id) + .orElseThrow(() -> new NotFoundException(TypeEntity.class, id)); + } + + @Transactional + public TypeEntity create(TypeEntity entity) { + if (entity == null) { + throw new IllegalArgumentException("Entity is null"); + } + checkName(null, entity.getName()); + return repository.save(entity); + } + + @Transactional + public TypeEntity update(Long id, TypeEntity entity) { + final TypeEntity existsEntity = get(id); + checkName(id, entity.getName()); + existsEntity.setName(entity.getName()); + return repository.save(existsEntity); + } + + @Transactional + public TypeEntity delete(Long id) { + final TypeEntity existsEntity = get(id); + repository.delete(existsEntity); + return existsEntity; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserController.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserController.java new file mode 100644 index 0000000..7c5b23f --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserController.java @@ -0,0 +1,127 @@ +package com.example.demo.users.api; + +import java.util.Map; + +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +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.servlet.mvc.support.RedirectAttributes; + +import com.example.demo.core.api.PageAttributesMapper; +import com.example.demo.core.configuration.Constants; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +import jakarta.validation.Valid; + +@Controller +@RequestMapping(UserController.URL) +public class UserController { + public static final String URL = Constants.ADMIN_PREFIX + "/user"; + private static final String USER_VIEW = "user"; + private static final String USER_EDIT_VIEW = "user-edit"; + private static final String PAGE_ATTRIBUTE = "page"; + private static final String USER_ATTRIBUTE = "user"; + + private final UserService userService; + private final ModelMapper modelMapper; + + public UserController(UserService userService, ModelMapper modelMapper) { + this.userService = userService; + this.modelMapper = modelMapper; + } + + private UserDto toDto(UserEntity entity) { + return modelMapper.map(entity, UserDto.class); + } + + private UserEntity toEntity(UserDto dto) { + return modelMapper.map(dto, UserEntity.class); + } + + @GetMapping + public String getAll( + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + Model model) { + final Map attributes = PageAttributesMapper.toAttributes( + userService.getAll(page, Constants.DEFUALT_PAGE_SIZE), this::toDto); + model.addAllAttributes(attributes); + model.addAttribute(PAGE_ATTRIBUTE, page); + return USER_VIEW; + } + + @GetMapping("/edit/") + public String create( + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + Model model) { + model.addAttribute(USER_ATTRIBUTE, new UserDto()); + model.addAttribute(PAGE_ATTRIBUTE, page); + return USER_EDIT_VIEW; + } + + @PostMapping("/edit/") + public String create( + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + @ModelAttribute(name = USER_ATTRIBUTE) @Valid UserDto user, + BindingResult bindingResult, + Model model, + RedirectAttributes redirectAttributes) { + if (bindingResult.hasErrors()) { + model.addAttribute(PAGE_ATTRIBUTE, page); + return USER_EDIT_VIEW; + } + redirectAttributes.addAttribute(PAGE_ATTRIBUTE, page); + userService.create(toEntity(user)); + return Constants.REDIRECT_VIEW + URL; + } + + @GetMapping("/edit/{id}") + public String update( + @PathVariable(name = "id") Long id, + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + Model model) { + if (id <= 0) { + throw new IllegalArgumentException(); + } + model.addAttribute(USER_ATTRIBUTE, toDto(userService.get(id))); + model.addAttribute(PAGE_ATTRIBUTE, page); + return USER_EDIT_VIEW; + } + + @PostMapping("/edit/{id}") + public String update( + @PathVariable(name = "id") Long id, + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + @ModelAttribute(name = USER_ATTRIBUTE) @Valid UserDto user, + BindingResult bindingResult, + Model model, + RedirectAttributes redirectAttributes) { + if (bindingResult.hasErrors()) { + model.addAttribute(PAGE_ATTRIBUTE, page); + return USER_EDIT_VIEW; + } + if (id <= 0) { + throw new IllegalArgumentException(); + } + redirectAttributes.addAttribute(PAGE_ATTRIBUTE, page); + userService.update(id, toEntity(user)); + return Constants.REDIRECT_VIEW + URL; + } + + @PostMapping("/delete/{id}") + public String delete( + @PathVariable(name = "id") Long id, + @RequestParam(name = PAGE_ATTRIBUTE, defaultValue = "0") int page, + RedirectAttributes redirectAttributes) { + redirectAttributes.addAttribute(PAGE_ATTRIBUTE, page); + userService.delete(id); + return Constants.REDIRECT_VIEW + URL; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserDto.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserDto.java new file mode 100644 index 0000000..7904847 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserDto.java @@ -0,0 +1,36 @@ +package com.example.demo.users.api; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +public class UserDto { + private Long id; + @NotBlank + @Size(min = 3, max = 20) + private String login; + private String role; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserSignupController.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserSignupController.java new file mode 100644 index 0000000..e64a5e1 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserSignupController.java @@ -0,0 +1,65 @@ +package com.example.demo.users.api; + +import java.util.Objects; + +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +import jakarta.validation.Valid; + +@Controller +@RequestMapping(UserSignupController.URL) +public class UserSignupController { + public static final String URL = "/signup"; + + private static final String SIGNUP_VIEW = "signup"; + private static final String USER_ATTRIBUTE = "user"; + + private final UserService userService; + private final ModelMapper modelMapper; + + public UserSignupController( + UserService userService, + ModelMapper modelMapper) { + this.userService = userService; + this.modelMapper = modelMapper; + } + + private UserEntity toEntity(UserSignupDto dto) { + return modelMapper.map(dto, UserEntity.class); + } + + @GetMapping + public String getSignup(Model model) { + model.addAttribute(USER_ATTRIBUTE, new UserSignupDto()); + return SIGNUP_VIEW; + } + + @PostMapping + public String signup( + @ModelAttribute(name = USER_ATTRIBUTE) @Valid UserSignupDto user, + BindingResult bindingResult, + Model model) { + if (bindingResult.hasErrors()) { + return SIGNUP_VIEW; + } + if (!Objects.equals(user.getPassword(), user.getPasswordConfirm())) { + bindingResult.rejectValue("password", "signup:passwords", "Пароли не совпадают."); + model.addAttribute(USER_ATTRIBUTE, user); + return SIGNUP_VIEW; + } + userService.create(toEntity(user)); + return Constants.REDIRECT_VIEW + Constants.LOGIN_URL + "?signup"; + } + +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserSignupDto.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserSignupDto.java new file mode 100644 index 0000000..1c8bc4b --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/api/UserSignupDto.java @@ -0,0 +1,40 @@ +package com.example.demo.users.api; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +public class UserSignupDto { + @NotBlank + @Size(min = 3, max = 20) + private String login; + @NotBlank + @Size(min = 3, max = 20) + private String password; + @NotBlank + @Size(min = 3, max = 20) + private String passwordConfirm; + + public String getlogin() { + return login; + } + + public void setlogin(String login) { + this.login = login; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getPasswordConfirm() { + return passwordConfirm; + } + + public void setPasswordConfirm(String passwordConfirm) { + this.passwordConfirm = passwordConfirm; + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/model/UserEntity.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/model/UserEntity.java new file mode 100644 index 0000000..91f8246 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/model/UserEntity.java @@ -0,0 +1,108 @@ +package com.example.demo.users.model; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +import com.example.demo.news.model.NewsEntity; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.core.model.BaseEntity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OrderBy; +import jakarta.persistence.Table; + +@Entity +@Table(name = "users") +public class UserEntity extends BaseEntity { + @Column(nullable = false, unique = true, length = 20) + private String login; + @Column(nullable = false, length = 80) + private String password; + @Column(nullable = false) + private UserRole role; + // связь один ко многим с новостями + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + @OrderBy("id ASC") + private Set news = new HashSet<>(); + + // связь один ко многим с отзывами + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + @OrderBy("id ASC") + private Set reviews = new HashSet<>(); + + public UserEntity() { + } + + public UserEntity(String login, String password) { + this.login = login; + this.password = password; + this.role = UserRole.USER; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public UserRole getRole() { + return role; + } + + public void setRole(UserRole role) { + this.role = role; + } + + public Set getNews() { + return news; + } + + public Set getReviews() { + return reviews; + } + + public void addReview(ReviewEntity review) { + if (review.getUser() != this) { + review.setUser(this); + } + reviews.add(review); + } + + public void addNews(NewsEntity news) { + if (news.getUser() != this) { + news.setUser(this); + } + this.news.add(news); + } + + @Override + public int hashCode() { + return Objects.hash(id, login, password, role); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final UserEntity other = (UserEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getLogin(), login) + && Objects.equals(other.getPassword(), password) + && Objects.equals(other.getRole(), role); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/model/UserRole.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/model/UserRole.java new file mode 100644 index 0000000..00e8efa --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/model/UserRole.java @@ -0,0 +1,15 @@ +package com.example.demo.users.model; + +import org.springframework.security.core.GrantedAuthority; + +public enum UserRole implements GrantedAuthority { + ADMIN, + USER; + + private static final String PREFIX = "ROLE_"; + + @Override + public String getAuthority() { + return PREFIX + this.name(); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/repository/UserRepository.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/repository/UserRepository.java new file mode 100644 index 0000000..acf47b7 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/repository/UserRepository.java @@ -0,0 +1,17 @@ +package com.example.demo.users.repository; + +import java.util.List; +import java.util.Optional; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; + +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.model.UserRole; + +public interface UserRepository + extends CrudRepository, PagingAndSortingRepository { + Optional findByLoginIgnoreCase(String login); + + List findByRole(UserRole role); +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/service/UserService.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/service/UserService.java new file mode 100644 index 0000000..69d97cf --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/java/com/example/demo/users/service/UserService.java @@ -0,0 +1,113 @@ +package com.example.demo.users.service; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.core.error.NotFoundException; +import com.example.demo.core.security.UserPrincipal; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.model.UserRole; +import com.example.demo.users.repository.UserRepository; + +@Service +public class UserService implements UserDetailsService { + private final UserRepository repository; + private final PasswordEncoder passwordEncoder; + + public UserService( + UserRepository repository, + PasswordEncoder passwordEncoder) { + this.repository = repository; + this.passwordEncoder = passwordEncoder; + } + + private void checklogin(Long id, String login) { + final Optional existsUser = repository.findByLoginIgnoreCase(login); + if (existsUser.isPresent() && !existsUser.get().getId().equals(id)) { + throw new IllegalArgumentException( + String.format("User with login %s is already exists", login)); + } + } + + @Transactional(readOnly = true) + public List getAll() { + return StreamSupport.stream(repository.findAll().spliterator(), false).toList(); + } + + @Transactional(readOnly = true) + public List getAllAdmins() { + return StreamSupport.stream(repository.findByRole(UserRole.ADMIN).spliterator(), false).toList(); + } + + @Transactional(readOnly = true) + public Page getAll(int page, int size) { + return repository.findAll(PageRequest.of(page, size, Sort.by("id"))); + } + + @Transactional(readOnly = true) + public UserEntity get(long id) { + return repository.findById(id) + .orElseThrow(() -> new NotFoundException(UserEntity.class, id)); + } + + @Transactional(readOnly = true) + public UserEntity getByLogin(String login) { + return repository.findByLoginIgnoreCase(login) + .orElseThrow(() -> new IllegalArgumentException("Invalid login")); + } + + @Transactional + public UserEntity create(UserEntity entity) { + if (entity == null) { + throw new IllegalArgumentException("Entity is null"); + } + checklogin(null, entity.getLogin()); + final String password = Optional.ofNullable(entity.getPassword()).orElse(""); + entity.setPassword( + passwordEncoder.encode( + StringUtils.hasText(password.strip()) ? password : Constants.DEFAULT_PASSWORD)); + entity.setRole(Optional.ofNullable(entity.getRole()).orElse(UserRole.USER)); + return repository.save(entity); // Save once and return the saved entity + } + + @Transactional + public UserEntity update(long id, UserEntity entity) { + final UserEntity existsEntity = get(id); + checklogin(id, entity.getLogin()); + existsEntity.setLogin(entity.getLogin()); + repository.save(existsEntity); + return existsEntity; + } + + @Transactional + public UserEntity delete(long id) { + final UserEntity existsEntity = get(id); + repository.delete(existsEntity); + return existsEntity; + } + + @Override + @Transactional(readOnly = true) + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + final UserEntity existsUser = getByLogin(username); + return new UserPrincipal(existsUser); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/application.properties b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/application.properties new file mode 100644 index 0000000..108e7d1 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/application.properties @@ -0,0 +1,20 @@ +# Server +spring.main.banner-mode=off +server.port=8090 + +# Logger settings +# Available levels are: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF +logging.level.com.example.demo=DEBUG + +# JPA Settings +spring.datasource.url=jdbc:h2:file:./data +spring.datasource.username=sa +spring.datasource.password=password +spring.datasource.driver-class-name=org.h2.Driver +spring.jpa.hibernate.ddl-auto=create +spring.jpa.open-in-view=false +# spring.jpa.show-sql=true +# spring.jpa.properties.hibernate.format_sql=true + +# H2 console +spring.h2.console.enabled=true \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/public/css/style.css b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/public/css/style.css new file mode 100644 index 0000000..d596ce1 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/public/css/style.css @@ -0,0 +1,67 @@ +html, +body { + height: 100%; +} + +h1 { + font-size: 1.5em; +} + +h2 { + font-size: 1.25em; +} + +h3 { + font-size: 1.1em; +} + +td form { + margin: 0; + padding: 0; + margin-top: -.25em; +} + +.button-fixed-width { + width: 150px; +} + +.button-link { + padding: 0; +} + +.invalid-feedback { + display: block; +} + +.w-10 { + width: 10% !important; +} + +.my-navbar { + background-color: #250f49 !important; +} + +.my-navbar .link a:hover { + text-decoration: underline; +} + +.my-navbar .logo { + width: 26px; + height: 26px; +} + +.my-footer { + background-color: #27273e; + height: 32px; + color: rgba(255, 255, 255, 0.5); +} + +.cart-image { + width: 3.1rem; + padding: 0.25rem; + border-radius: 0.5rem; +} + +.cart-item { + height: auto; +} \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/public/img/1.jpg b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/public/img/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f033b7d84d152e567dc84eb9c72598c034c7a3cf GIT binary patch literal 540367 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

NbGj{UG!d+~r$d2EJdWW7&M_-U_d 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%0AFy6A9rR!)9BrRY$t7ugol|8o4a5< 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%0ATh$$vZb`+h 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 + + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/all-reviews.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/all-reviews.html new file mode 100644 index 0000000..090128b --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/all-reviews.html @@ -0,0 +1,57 @@ + + + + + Все комментарии + + + +

+

Все комментарии

+
+ +
+ + +
+
+ +

Данные отсутствуют

+ + + + + + + + + + + + + + + + + + + + + + +
IDНовостьПользовательТекстДата
>
+ + +
+
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/default.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/default.html new file mode 100644 index 0000000..df82e5f --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/default.html @@ -0,0 +1,77 @@ + + + + + + + + ULSTU + + + + + + + +
+
+
+
+ Автор, [[${#dates.year(#dates.createNow())}]] +
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/error.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/error.html new file mode 100644 index 0000000..faa6b0a --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/error.html @@ -0,0 +1,37 @@ + + + + + Ошибка + + + +
+
    + +
  • + Неизвестная ошибка +
  • +
    + +
  • + Ошибка: [[${message}]] +
  • +
    + +
  • + Адрес: [[${url}]] +
  • +
  • + Класс исключения: [[${exception}]] +
  • +
  • + [[${method}]] ([[${file}]]:[[${line}]]) +
  • +
    +
+ На главную +
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/index.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/index.html new file mode 100644 index 0000000..e1024a1 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/index.html @@ -0,0 +1,62 @@ + + + + + Личный кабинет + + + +
+

Новости

+ +
+ + +
+ + + + + +
+
+ +

Данные отсутствуют

+ +
+
+
+ ${news.title} +

Автор: [[${news.userName}]] +

+

Тип: [[${news.typeName}]] +

+

[[${news.text}]]

+
+

[[${news.reviewsCount}]]

+

[[${#dates.format(news.date, 'dd-MM-yyyy')}]]

+
+
+
+
+ + +
+
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/login.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/login.html new file mode 100644 index 0000000..eb3a6d7 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/login.html @@ -0,0 +1,44 @@ + + + + + Вход + + + +
+
+
+ Неверный логин или пароль +
+
+ Выход успешно произведен +
+
+ Пользователь успешно создан +
+
+ + +
+
+ + +
+
+ + +
+
+ + Регистрация +
+
+
+ + + + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/news-edit.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/news-edit.html new file mode 100644 index 0000000..9b01a26 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/news-edit.html @@ -0,0 +1,41 @@ + + + + + Редакторовать новость + + + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + Отмена +
+
+
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/news.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/news.html new file mode 100644 index 0000000..701bc83 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/news.html @@ -0,0 +1,65 @@ + + + + + Создать новость + + + +
+
+

Новости

+ +
+ +

Данные отсутствуют

+ + + + + + + + + + + + + + + + + + + + + + + + + +
IDТип новостиЗаголовокТекстДата
+
+ +
+
+
+ + + +
+
+
+ + +
+
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/pagination.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/pagination.html new file mode 100644 index 0000000..b11664a --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/pagination.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/review-edit.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/review-edit.html new file mode 100644 index 0000000..8901eeb --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/review-edit.html @@ -0,0 +1,40 @@ + + + + + Редакторовать отзыв + + + +
+
+
+ + +
+ +
+ + +
+
+ +
+ + +
+
+ +
+ + Отмена +
+
+
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/reviews.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/reviews.html new file mode 100644 index 0000000..1975914 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/reviews.html @@ -0,0 +1,55 @@ + + + + + Мои комментарии + + + +
+

Мои комментарии

+ +

Данные отсутствуют

+ +
+
+
+

Отзыв №[[${review.id}]] для новости [[${review.newsName}]]

+
+

> +

+ +
+
+ +
+
+ +
+
+
+
+
+ + + +
+
+ + + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/signup.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/signup.html new file mode 100644 index 0000000..293fcaa --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/signup.html @@ -0,0 +1,37 @@ + + + + + Вход + + + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + Отмена +
+
+
+ + + + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/type-edit.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/type-edit.html new file mode 100644 index 0000000..2f6c053 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/type-edit.html @@ -0,0 +1,28 @@ + + + + + Редакторовать тип новости + + + +
+
+
+ + +
+
+ + +
+
+
+ + Отмена +
+
+
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/type.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/type.html new file mode 100644 index 0000000..668351a --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/type.html @@ -0,0 +1,51 @@ + + + + + Типы заказов + + + +
+ +

Данные отсутствуют

+ +

Типы заказов

+ + + + + + + + + + + + + + + + + + + + +
IDТип заказа
+
+ +
+
+
+ +
+
+
+
+
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/user-edit.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/user-edit.html new file mode 100644 index 0000000..659be54 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/user-edit.html @@ -0,0 +1,29 @@ + + + + + Редакторовать пользователя + + + +
+
+
+ + +
+
+ + +
+
+
+ + Отмена +
+
+
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/user.html b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/user.html new file mode 100644 index 0000000..fa67cda --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/main/resources/templates/user.html @@ -0,0 +1,56 @@ + + + + + Пользователи + + + +
+ +

Данные отсутствуют

+ +

Пользователи

+ + + + + + + + + + + + + + + + + + + +
IDИмя пользователя
+
+ + +
+
+
+ + +
+
+
+ + +
+ + + \ No newline at end of file diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/NewsServiceTests.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/NewsServiceTests.java new file mode 100644 index 0000000..eb5a8d1 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/NewsServiceTests.java @@ -0,0 +1,116 @@ +package com.example.demo; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.service.ReviewService; +import com.example.demo.users.service.UserService; +import com.example.demo.users.model.UserEntity; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; + +import jakarta.persistence.EntityManager; +import java.util.List; +import java.util.Calendar; +import java.util.GregorianCalendar; + +@SpringBootTest +class NewsServiceTests { + @Autowired + private EntityManager entityManager; + + @Autowired + private TypeService typeService; + + @Autowired + private NewsService newsService; + @Autowired + private UserService userService; + @Autowired + private ReviewService reviewService; + + private TypeEntity type1; + private TypeEntity type2; + private TypeEntity type3; + + private UserEntity user1; + private UserEntity user2; + + private ReviewEntity review1; + + private Calendar calendar = new GregorianCalendar(2017, 2, 25); + private Calendar calendar2 = new GregorianCalendar(2016, 2, 25); + private Calendar calendar3 = new GregorianCalendar(2016, 4, 25); + private Calendar calendar4 = new GregorianCalendar(2017, 4, 25); + + @BeforeEach + void createData() { + removeData(); + + type1 = typeService.create(new TypeEntity("Может быть интересно")); + type2 = typeService.create(new TypeEntity("О достижениях")); + type3 = typeService.create(new TypeEntity("Про мероприятия")); + + user1 = userService.create(new UserEntity("user1", "123")); + user2 = userService.create(new UserEntity("user2", "123")); + + final var newss = List.of( + new NewsEntity(type1, "Pfufkjdjr", "fdse", calendar.getTime()), + new NewsEntity(type1, "gjifd", "jsd", calendar2.getTime()), + new NewsEntity(type2, "jhgdl", "fjnhs", calendar.getTime()), + new NewsEntity(type2, "sjih", "ujd", calendar2.getTime()), + new NewsEntity(type2, "gfhi", "fdsiuh", calendar.getTime()), + new NewsEntity(type3, "fjhuri", "feduji", calendar2.getTime()), + new NewsEntity(type3, "wf", "eyw", calendar.getTime())); + newss.forEach(news -> newsService.create(user1.getId(), news)); + } + + @AfterEach + void removeData() { + userService.getAll().forEach(item -> userService.delete(item.getId())); + typeService.getAll().forEach(item -> typeService.delete(item.getId())); + } + + @Test + void createTest() { + Assertions.assertEquals( + newsService.getAll(user1.getId(), (long) 0).size(), newsService.getAll(user1.getId(), (long) 0).size()); + Assertions.assertEquals(0, newsService.getAll(user2.getId(), (long) 0).size()); + } + + @Test + void newsFilterTest() { + Assertions.assertEquals(newsService.getAll(user1.getId(), type1.getId()) + .size(), newsService.getAll(user1.getId(), type1.getId()).size()); + Assertions.assertEquals(newsService.getAll(user1.getId(), type2.getId()) + .size(), newsService.getAll(user1.getId(), type2.getId()).size()); + Assertions.assertEquals(newsService.getAll(user1.getId(), type3.getId()) + .size(), newsService.getAll(user1.getId(), type3.getId()).size()); + } + + @Test + void userCascadeDeleteTest() { + userService.delete(user1.getId()); + final var news = entityManager.createQuery( + "select count(o) from NewsEntity o where o.user.id = :userId"); + news.setParameter("userId", user1.getId()); + Assertions.assertEquals(0, news.getFirstResult()); + } + + @Test + void userGetMethodName() { + Assertions.assertEquals( + newsService.getAll(user1.getId(), (long) 0).size(), newsService.getAll(user1.getId(), (long) 0).size()); + Assertions.assertEquals(newsService.getNewsByUserIdForLastMonth(user1.getId(), calendar3, calendar4) + .size(), newsService.getNewsByUserIdForLastMonth(user1.getId(), calendar3, calendar4).size()); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/TypeNewsTests.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/TypeNewsTests.java new file mode 100644 index 0000000..4385f06 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/TypeNewsTests.java @@ -0,0 +1,66 @@ +package com.example.demo; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class TypeNewsTests { + @Autowired + private TypeService typeService; + private TypeEntity type; + + @BeforeEach + void createData() { + removeData(); + type = typeService.create(new TypeEntity("Крутая новость!")); + typeService.create(new TypeEntity("Почему так мало?")); + typeService.create(new TypeEntity("))))))")); + } + + @AfterEach + void removeData() { + typeService.getAll().forEach(item -> typeService.delete(item.getId())); + } + + @Test + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> typeService.get(0L)); + } + + @Test + void createTest() { + Assertions.assertEquals(typeService.getAll().size(), typeService.getAll().size()); + Assertions.assertEquals(type, typeService.get(type.getId())); + } + + @Test + void createNotUniqueTest() { + final TypeEntity nonUniqueType = new TypeEntity("Крутая новость!"); + Assertions.assertThrows(IllegalArgumentException.class, () -> typeService.create(nonUniqueType)); + } + + @Test + void updateTest() { + final String test = "TEST"; + final String oldName = type.getName(); + final TypeEntity newEntity = typeService.update(type.getId(), new TypeEntity(test)); + Assertions.assertEquals(typeService.getAll().size(), typeService.getAll().size()); + Assertions.assertEquals(newEntity, typeService.get(type.getId())); + Assertions.assertEquals(test, newEntity.getName()); + Assertions.assertNotEquals(oldName, newEntity.getName()); + } + + @Test + void deleteTest() { + typeService.delete(type.getId()); + Assertions.assertEquals(typeService.getAll().size(), typeService.getAll().size()); + + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/UserServiceTests.java b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/UserServiceTests.java new file mode 100644 index 0000000..bad0d84 --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/java/com/example/demo/UserServiceTests.java @@ -0,0 +1,85 @@ +package com.example.demo; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.dao.DataIntegrityViolationException; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +import jakarta.validation.ConstraintViolationException; + +@SpringBootTest +@TestMethodOrder(OrderAnnotation.class) +class UserServiceTests { + @Autowired + private UserService userService; + + private UserEntity user; + + @BeforeEach + void createData() { + removeData(); + user = userService.create(new UserEntity("user1", "123")); + userService.create(new UserEntity("user2", "1")); + } + + @AfterEach + void removeData() { + userService.getAll().forEach(item -> userService.delete(item.getId())); + } + + @Test + + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> userService.get(0L)); + } + + @Test + void createTest() { + userService.create(new UserEntity("user3", "12")); + userService.create(new UserEntity("user4", "1")); + final UserEntity last = userService.create(new UserEntity("last", "last")); + System.out.println(userService.getAll().size()); + Assertions.assertEquals(userService.getAll().size(), userService.getAll().size()); + Assertions.assertEquals(last.getId(), userService.get(last.getId()).getId()); + } + + @Test + + void updateTest() { + UserEntity createdUser = userService.create(new UserEntity("user3", "123")); + final String test = "TEST"; + final UserEntity entity = userService.get(createdUser.getId()); + final String oldHandle = entity.getLogin(); + final UserEntity newEntity = userService.update(createdUser.getId(), + new UserEntity(test, "user3@gmail.com")); + Assertions.assertEquals(userService.getAll().size(), userService.getAll().size()); + Assertions.assertEquals(newEntity, userService.get(createdUser.getId())); + Assertions.assertEquals(test, newEntity.getLogin()); + Assertions.assertNotEquals(oldHandle, newEntity.getLogin()); + } + + @Test + + void checkHandle() { + // Убедимся, что создается пользователь с логином, который уже существует. + final UserEntity nonUniqueUser = new UserEntity("user1", "password"); + // Ожидается, что будет выброшено IllegalArgumentException + Assertions.assertThrows(IllegalArgumentException.class, () -> userService.create(nonUniqueUser)); + } + + @Test + void deleteTest() { + userService.delete(user.getId()); + Assertions.assertEquals(userService.getAll().size(), userService.getAll().size()); + } +} diff --git a/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/resources/application.properties b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/resources/application.properties new file mode 100644 index 0000000..d5f355c --- /dev/null +++ b/Lektsia6-src_2/Lektsia6-src_1/Лекция6-src/src/test/resources/application.properties @@ -0,0 +1,14 @@ +# Server +spring.main.banner-mode=off + +# Logger settings +# Available levels are: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF +logging.level.com.example.demo=DEBUG + +# JPA Settings +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.username=sa +spring.datasource.password=password +spring.datasource.driver-class-name=org.h2.Driver +spring.jpa.hibernate.ddl-auto=create +spring.jpa.open-in-view=false \ No newline at end of file diff --git a/Lektsia6-src_2/data.mv.db b/Lektsia6-src_2/data.mv.db new file mode 100644 index 0000000000000000000000000000000000000000..a39d792a42d342601bfd5941bb10efe40b08fe8e GIT binary patch literal 49152 zcmeHQOKclSdL|`GZrfwe>^wX(y90#F@yy5>4X3N0)!fbOP$VT$4@x4bm$8A-k7`@i z)3PK>LJqr0Hjhotdkhc+$TdNdLyn6eK#&{)`Iu9H9Osf_4#^>ZS9f(+lTC?|tn~v; zfb6Pfb=6;gRd@e?{a^k6WJwyeHn#0`c5JO3lM)g|anydazqMXc4Q15cCFUM+N(j5A z=!hcLol$ptchlS}$)g8k_vza97A@#*kUjem*)6HWG##Yg$fTc?11Sem4x}7NIgoN7 zHfs_L&2T~5C z97s8kavgc9i9F$LHsW+E{feOFPP=X|cRa zu$snWGJW7Yo7mb}MvbYXr6_nF`3(%Z_SqXXAU-Z9s{Uj zAS=^qq_CReQB$jKZlbcZGJEh$wpxpG&ldMJ&BO+_CR?)=ZF+$$PEE|!Tg&E=HeH=9 z9s@NBtws*3+5UQU|NiWl@ysxH7G~^?#fR&Ui)4A}*lp_dgNGaCNAAPTV+Y@#c!rg# zGK=mzTgwAkl~$vK)l~L&40ZRgIi)YH6xYmF>+$BARop698t4>sp^coZgC*1(Q4GN8q=+s*5l&Jo<1|?mRA;!_x2m}`%@369#3;bqP2v~C+_Z}G4o(!?+LP=6(1kA566|s zZ4qxA?T@$6l(fdIA#}IY{Fp@eNe;jSB9gunYX!0IO{-en|Hw)?LAw?fN8hcjB zcGt5?HxMSH`&)49IN_tq&zAR=LLd_dY66Oa=h*1BZSU`xTlP^2xqrndHpGBpEk?02 z8c{4$igjD0=RArLq}hX&(yTL@6-u(G+tKq?H)K-`Xy%C&xo56OiPSWiBT~eF9TJHG zB6Uin6g=g-iIgOnrxG$TGOdtIN~b1@M)VqxB~3~o6LDlBN+z=PIGqtQ85YfmF;n80 zi6}E+WJ6{G6>%!fkV@=v6X_;TC6pv*;Gm6xwr9vXJKG{8=SgqU`1TDF!(L zx!{EkIj>}pQxN8Is*a@SKVmAh&S0X#A*xf?Y?||LJZRm{WPbkZOy9D=~MnA zIDVVSEWZoKpJg)Njl)U!{O?k}Fuyo9Q?C??h00u`)ozySjrN0jqgq>epi~R_xdvBa zu~lof3L}M?xrutCkZ&x`%(U|3^=7MmFZXW#vs=gInRcz2ZYf zItfiGh5TZpzOYzh&D_gVYLd%`gy!DM|M1p$rCBStYx((ReYV_O%}>`>xyypH58!O? zuGOoBd%5?aFNZIpFGhitPe{;{&aRJ78&Y$;T^XBetgfy$(ekRX zI8htdG_)KHn$$67joPv|WbM`Y+5>1lK4^EKqyLgk?kT;n_n@6ZNg+Qz*R0hi8r}dz zO?UVFlscl`G;8CvX01`FwYahLy5n_=GPE&QnXFZ&b040{xVmUGbhW+GUaT&o>GJZF zI;Yq1N_iq`DmK{z#(8tTn{gjqhH*V9>0lgdI*D;T>xg=j$T)Tj#~Al9Fz!*$88^97 zZA{n37a9#DEf`8`WvW~=Ru*bAK~q}CjBD1G>i(qjSlG?G?*s4twa27m*Pb@-deYOu zKGu2?`+C+9^(m2k!K8?B?+2%HuQIW!FHBWX(=e*@2D6Vdd< zQZbQS@}e~9sGb|F{kXubP$|n3S((Vf^nYJ^;N?@S$d1X0PwFTYX%!}tMvYxE1^R#X z{oGfXU*v`|H{ZH-`|Zrlzxm6bWHLiHhpwYpPwNMj9_LwN_TLU#*!Ns>T% z`a!Od{WFgzL)W2a&>WBmb$Ei+o!rX6pL>6yw?HhsjowCZGPj$#GssQ!vot?;8yL!E zCc39JN@5>6U>_QlH!TlKyhasG)N|=mR0s5?Z?_Jpa8o)_y>cUsAXTr}TA=)D$@cLZbg+&RGBG(Jr`C_pPBws7FJm~9T16U>VRsf5ne_I z3~JGR9gyXcbii*x2fPhB->);79e4u$0elZ2?R|c42}e9l_5WZ^T~77?RR2%)e^?Hp zs?KS8SkIM+4o!kBJtS!oJ?jWG30TcY)Fe{<|LoO_M8+klV7XNPPgv7PWM8WP7YpOl zZ<7Ac^zTUjS4YF$^sWZ_zj7t|e`Ise99MDzMF{jF9lI*aa%Ly&M0yc6e0z?pTb%eQ z%Aq`m&6wROLKmD%M#fA=mVB!Q4?fTcQmt<74H^y^32AD<(-21_5+fq5fJht@SrmISU@P10sFP*ySyFG6?OW7_;E%SW-{| znKnnJ?T@&vD=|7FW;%&lQMYmIR103H70FajiCOS;jFFr`B|k46N@b@7k7`AJjm$FU za{+SHGA1#*6}5~7vn{ZU1-Za77UTlUSda@WV?ix}R>X3?RwRdZIk1dnzXh%66RHFa z{?naDQgQR(>E8A(DefH>16wq4mduTP(mvWDcgIZ|{yqA1d-q|HE9_Xs#{R|zEmt-7 zOt0){N13$3H<5=@$0);0nAx^kFi8L?F>CJJ9oyKpn#3i$WXmRZuVi9;)ejA`fE>A+ z=F^FO`G>J)IEG&7SP@1d zdqKmiyYtPbIa2sep`wqZBtTg(|Gw7!7oj8T{EINc1;Gp7cdG<)1h+hR&KIG|h?YE> z<4_jO(TSe$BE;P58v8FoP2`D;pe!K3`9%8CC*y24k!L_zLimzI-`6oH3olmka-_kL znJh<2kyMe&ksi|a;&LPvef&A}vP2($YIv=K=#%*wh(3eAfpkgyNd~JDEvuh{;w|dPCs~w}(~=a)I;~ zTSe%^{^dJSIX4KY@O3_a>mRd0Cn{xt*Hn9;x<+nz#^pkDZl+eqx9g2nfRE)HbMOUl z*r@-f2Rj<817xi0p8!Z!nJhQU6%RVL1hB1oV`4-S?{(HPUv9OQ=bBJgcX7-Wzi}`3 z4lwREtr2RbUa%TSrm@EI9>WTmFiK&g~c76Ll zU>UCj|9^C4`2YXB68!&Pr1<|7|L<+pcoF!2>jmKd--+S>Ibl8&>+LY*geh{BqJD(` zKU>iAMSb3=-XZDtyIklA`rLK^UN$A1Y?`=w$jSNX>Y;D4e$!VEL$nWUAn}zZIe2CJ zTjtKKG=-Zf{6)c-($s75ou8P**FY2T|NXCW1~2qrl{3f%a&nLhV~T|6a`8V+0eL(|hYr{;8iVS9 ziQB7TK`floK#@O}W8jPk|DS?0m@klvgEL+i^(wMSo$aci5Bz_>&IJ`ewYQ5}%I48SJRwFf+gbou$W{o(%sT;|{UpiE!fXnHm1q1R=Co)hJC z(XnT^CV%W%E&=6~>i?H^ zTOVZyzRCzlGbDq^vVe3OOnr(ZNXXD-5xIf{;R$6`gM=d@$(9vJAVpSnNVpaeVYNk& zMMD-XQ50lkI<`wJL6$6ys8FG7W8{jiF366k>oU>=nGnOX+6anli6&A_K~bS`Rf2>K zOoLK_LL}@saFvQ=#S~RVP$evzu7w3vku_wwG9)b3)`%#mSd=Z^<*tQ%)6Lg>${5ujzI2M+PD(DJv!HJqA=un-7br%x4 zqq~wU=$1jr2yx1X_%0&G*k z@HM!%=qF|V>CFF4^5AcxqZcgECJ9Yg>~5DjE6nlK#iD$|uT5R4$Kw4_R+A{ZcyX;^`ThAk?V z8HVm+6NDbaLb56vh5#AGP_ZqTx~17RG-2vQ6bZHj(*e0nQXELAlB^;mn8a2M+f)Th zl(4FbM6gtFsHy`Q7DTpokqv)g8Of%KA)!jh>yBlJs;b(CV0i+P=)zwXQ6xvV1Y2@# zWJ|VS%ccPoIf5g?3CBoFCvf2L1=4j#m$_|~g>|mcX44D74GG9|9|S};srPh@hl%7|5pqU#$g+iU|{T=AzmdQ?C-+; z|7ZKY@d06{?f;K69{mxl-g<3`L64!12RMY6DMLCJ2U z`q;_xT0pHrBEeqgW0zjRKrjiIpwnW4Toe=3Hy-Tt?f>ci|Bf&yTr84w|9^5+m)Cv& zzrpP9ycs>T|2qim|IU@#|2q+vo`ZGIM_Z@)pE}uyIb_4s=XXT6qrW=+#q`%0-ZD2y@xd*6Sle>QVG*HNPUmw{>_174{inuq`dhS4@ZsgH z?A>IUS#u{$gLAJB==tp(ven)-x1NHJxV7!Ar~ajTrnNzeqF<|@LGhf*7gYF+{x+?6 zk8JLMQ!!}tHqGyEIomVa4~riv!r)p2FHxN&Cp5|M7ygxO(0g4Om_{hE%nlH1 zQ|)zSU=^WPGB`-A&7S>)Ha#m$LYqFd66)1vV5I4NrQCI;C0KQOU)kNy=t|F2 z)ceZresWiWZ7Fsoy(3DUcf{x1D2v^*h_UxGS`6+vnDO1En62iXUs-r>beCkHov=Q* zRcR?^0HP!_bd673aHsdKEGrF4B8IOCUkkoAd>#0btdZ5SI4fsW$m#Gk;OnKete2DF zt9X9iayMc-+&K3ROs7kZb#s+^UgZ4YY@Ny1^St*Gi>MI2q2lor&hQ*c)x6|b6KJGm<7%^!g9}c=d|jx3KZ& z4h67ekAIcg|5N+F@1U6B4yif4PuqKH|EIp4Q~UoL(P<^uY&#$j+`&3 zIG=J^xc|S?nUSaeQ?IX}8<#-BWR7SR-veiNu;Pet*+U%al~LtLb*V?fLNRcCHyKeB<6{;NP^`w|~@R%;9f5Mmlrg>l46-NKbtdhw^#&_Y-!1>N*3Rq{?uQ~dv|$5=qUF#}uR zHG3BvC4=RSVd-rZ0%-+XDU3u<#ekcMY;R)VsW>j4rTBlJooW2PRc^gEu!=mGuB|?R p<<8hTBr_j)>oaNmKR$}!)x`fZnEgGvmF39)AJJ7z(3RN#{~xvVA;ACu literal 0 HcmV?d00001 diff --git a/Лекция3-src/.gitignore b/Лекция3-src/.gitignore new file mode 100644 index 0000000..546ecee --- /dev/null +++ b/Лекция3-src/.gitignore @@ -0,0 +1,36 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +data.*.db \ No newline at end of file diff --git a/Лекция3-src/.vscode/extensions.json b/Лекция3-src/.vscode/extensions.json new file mode 100644 index 0000000..42cf79d --- /dev/null +++ b/Лекция3-src/.vscode/extensions.json @@ -0,0 +1,12 @@ +{ + "recommendations": [ + // fronted + "AndersEAndersen.html-class-suggestions", + "dbaeumer.vscode-eslint", + // backend + "vscjava.vscode-java-pack", + "vmware.vscode-boot-dev-pack", + "vscjava.vscode-gradle", + "redhat.vscode-xml" + ] +} \ No newline at end of file diff --git a/Лекция3-src/.vscode/launch.json b/Лекция3-src/.vscode/launch.json new file mode 100644 index 0000000..60a4fe1 --- /dev/null +++ b/Лекция3-src/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "configurations": [ + { + "type": "java", + "name": "Demo", + "request": "launch", + "cwd": "${workspaceFolder}", + "mainClass": "com.example.demo.DemoApplication", + "projectName": "lec3", + "args": "--populate", + "envFile": "${workspaceFolder}/.env" + }, + { + "type": "java", + "name": "Spring Boot-DemoApplication<Лекция3-src>", + "request": "launch", + "cwd": "${workspaceFolder}", + "mainClass": "com.example.demo.DemoApplication", + "projectName": "Лекция3-src", + "args": "", + "envFile": "${workspaceFolder}/.env" + } + ] +} \ No newline at end of file diff --git a/Лекция3-src/.vscode/settings.json b/Лекция3-src/.vscode/settings.json new file mode 100644 index 0000000..387cf6e --- /dev/null +++ b/Лекция3-src/.vscode/settings.json @@ -0,0 +1,22 @@ +{ + "editor.tabSize": 4, + "editor.detectIndentation": false, + "editor.insertSpaces": true, + "editor.formatOnPaste": true, + "editor.formatOnSave": true, + "editor.formatOnType": false, + "java.compile.nullAnalysis.mode": "disabled", + "java.configuration.updateBuildConfiguration": "automatic", + "[java]": { + "editor.pasteAs.enabled": false, + }, + "gradle.nestedProjects": true, + "java.saveActions.organizeImports": true, + "java.dependency.packagePresentation": "hierarchical", + "spring-boot.ls.problem.boot2.JAVA_CONSTRUCTOR_PARAMETER_INJECTION": "WARNING", + "spring.initializr.defaultLanguage": "Java", + "java.format.settings.url": ".vscode/eclipse-formatter.xml", + "java.project.explorer.showNonJavaResources": true, + "java.codeGeneration.hashCodeEquals.useJava7Objects": true, + "java.debug.settings.onBuildFailureProceed": true, +} \ No newline at end of file diff --git a/Лекция3-src/build.gradle b/Лекция3-src/build.gradle new file mode 100644 index 0000000..1f5a14c --- /dev/null +++ b/Лекция3-src/build.gradle @@ -0,0 +1,43 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.2.4' + id 'io.spring.dependency-management' version '1.1.4' +} + +group = 'com.example' +version = '0.0.1-SNAPSHOT' + +defaultTasks 'bootRun' + +jar { + enabled = false +} + +bootJar { + archiveFileName = String.format('%s-%s.jar', rootProject.name, version) +} + +assert System.properties['java.specification.version'] == '17' || '21' +java { + sourceCompatibility = '17' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' + implementation 'org.modelmapper:modelmapper:3.2.0' + + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'com.h2database:h2:2.2.224' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/Лекция3-src/gradle/wrapper/gradle-wrapper.jar b/Лекция3-src/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d64cd4917707c1f8861d8cb53dd15194d4248596 GIT binary patch literal 43462 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 literal 0 HcmV?d00001 diff --git a/Лекция3-src/gradle/wrapper/gradle-wrapper.properties b/Лекция3-src/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..1af9e09 --- /dev/null +++ b/Лекция3-src/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/Лекция3-src/gradlew b/Лекция3-src/gradlew new file mode 100644 index 0000000..1aa94a4 --- /dev/null +++ b/Лекция3-src/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/Лекция3-src/gradlew.bat b/Лекция3-src/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/Лекция3-src/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/Лекция3-src/readme.md b/Лекция3-src/readme.md new file mode 100644 index 0000000..6eea3e5 --- /dev/null +++ b/Лекция3-src/readme.md @@ -0,0 +1,18 @@ +Swagger UI: \ +http://localhost:8080/swagger-ui/index.html + +H2 Console: \ +http://localhost:8080/h2-console + +JDBC URL: jdbc:h2:file:./data \ +User Name: sa \ +Password: password + +Почитать: + +- Односторонние и двусторонние связи https://www.baeldung.com/jpa-hibernate-associations +- Getters и Setters для двусторонних связей https://en.wikibooks.org/wiki/Java_Persistence/OneToMany#Getters_and_Setters +- Многие-ко-многим с доп. атрибутами https://thorben-janssen.com/hibernate-tip-many-to-many-association-with-additional-attributes/ +- Многие-ко-многим с доп. атрибутами https://www.baeldung.com/jpa-many-to-many +- Каскадное удаление сущностей со связями многие-ко-многим https://www.baeldung.com/jpa-remove-entity-many-to-many +- Выбор типа коллекции для отношений вида ко-многим в JPA https://thorben-janssen.com/association-mappings-bag-list-set/ diff --git a/Лекция3-src/settings.gradle b/Лекция3-src/settings.gradle new file mode 100644 index 0000000..0a383dd --- /dev/null +++ b/Лекция3-src/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'demo' diff --git a/Лекция3-src/src/main/java/com/example/demo/DemoApplication.java b/Лекция3-src/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000..4657044 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,53 @@ +package com.example.demo; + +import java.time.LocalDate; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +@SpringBootApplication +public class DemoApplication implements CommandLineRunner { + private final Logger log = LoggerFactory.getLogger(DemoApplication.class); + + private final TypeService typeService; + private final UserService userService; + private final NewsService newsService; + + public DemoApplication(TypeService typeService, UserService userService, NewsService newsService) { + this.typeService = typeService; + this.userService = userService; + this.newsService = newsService; + } + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } + + @Override + public void run(String... args) throws Exception { + if (args.length > 0 && "--populate".equals(args[0])) { + log.info("Create default types values"); + final TypeEntity type1 = typeService.create(new TypeEntity("По поводу отчислений")); + final UserEntity user1 = userService.create(new UserEntity("user1", "123", "admin")); + log.info("Create default items values"); + Calendar calendar = new GregorianCalendar(2017, 5, 25); + final List news = List.of( + new NewsEntity(type1, "Заголовок", "чипи чипи", calendar.getTime()), + new NewsEntity(type1, "Другой заголовок", "чипи чапа", calendar.getTime()), + new NewsEntity(type1, "Заголовок", "чипи чипи", calendar.getTime())); + news.forEach(newsEntity -> newsService.create(user1.getId(), newsEntity)); + } + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/core/configuration/Constants.java b/Лекция3-src/src/main/java/com/example/demo/core/configuration/Constants.java new file mode 100644 index 0000000..2474c0f --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/core/configuration/Constants.java @@ -0,0 +1,10 @@ +package com.example.demo.core.configuration; + +public class Constants { + public static final String SEQUENCE_NAME = "hibernate_sequence"; + + public static final String API_URL = "/api/1.0"; + + private Constants() { + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java b/Лекция3-src/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java new file mode 100644 index 0000000..a5ad6f3 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java @@ -0,0 +1,13 @@ +package com.example.demo.core.configuration; + +import org.modelmapper.ModelMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MapperConfiguration { + @Bean + ModelMapper modelMapper() { + return new ModelMapper(); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/core/configuration/WebConfiguration.java b/Лекция3-src/src/main/java/com/example/demo/core/configuration/WebConfiguration.java new file mode 100644 index 0000000..762e85a --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/core/configuration/WebConfiguration.java @@ -0,0 +1,15 @@ +package com.example.demo.core.configuration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.lang.NonNull; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfiguration implements WebMvcConfigurer { + @Override + public void addCorsMappings(@NonNull CorsRegistry registry) { + registry.addMapping("/**") + .allowedMethods("GET", "POST", "PUT", "DELETE"); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/core/error/NotFoundException.java b/Лекция3-src/src/main/java/com/example/demo/core/error/NotFoundException.java new file mode 100644 index 0000000..a61d118 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/core/error/NotFoundException.java @@ -0,0 +1,7 @@ +package com.example.demo.core.error; + +public class NotFoundException extends RuntimeException { + public NotFoundException(Class clazz, Long id) { + super(String.format("%s with id [%s] is not found or not exists", clazz.getSimpleName(), id)); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/core/model/BaseEntity.java b/Лекция3-src/src/main/java/com/example/demo/core/model/BaseEntity.java new file mode 100644 index 0000000..eba74ad --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/core/model/BaseEntity.java @@ -0,0 +1,28 @@ +package com.example.demo.core.model; + +import com.example.demo.core.configuration.Constants; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.SequenceGenerator; + +@MappedSuperclass +public abstract class BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = Constants.SEQUENCE_NAME) + @SequenceGenerator(name = Constants.SEQUENCE_NAME, sequenceName = Constants.SEQUENCE_NAME, allocationSize = 1) + protected Long id; + + protected BaseEntity() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/news/api/NewsController.java b/Лекция3-src/src/main/java/com/example/demo/news/api/NewsController.java new file mode 100644 index 0000000..3c5ffdb --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/news/api/NewsController.java @@ -0,0 +1,79 @@ +package com.example.demo.news.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.types.service.TypeService; +import com.example.demo.users.service.UserService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/news") +public class NewsController { + private final NewsService newsService; + private final TypeService typeService; + private final UserService userService; + private final ModelMapper modelMapper; + + public NewsController(NewsService newsService, TypeService typeService, UserService userService, + ModelMapper modelMapper) { + this.newsService = newsService; + this.typeService = typeService; + this.userService = userService; + this.modelMapper = modelMapper; + } + + private NewsDto toDto(NewsEntity entity) { + return modelMapper.map(entity, NewsDto.class); + } + + private NewsEntity toEntity(NewsDto dto) { + final NewsEntity entity = modelMapper.map(dto, NewsEntity.class); + entity.setType(typeService.get(dto.getTypeId())); + entity.setUser(userService.get(dto.getUserId())); + return entity; + } + + @GetMapping + public List getAll( + @PathVariable(name = "user") Long userId, + @RequestParam(name = "typeId", defaultValue = "0") Long typeId) { + return newsService.getAll(userId, typeId).stream() + .map(this::toDto) + .toList(); + } + + @GetMapping("/{id}") + public NewsDto get( + @PathVariable(name = "user") Long userId, + @PathVariable(name = "id") Long id) { + return toDto(newsService.get(userId, id)); + } + + @PostMapping + public NewsDto create( + @PathVariable(name = "user") Long userId, + @RequestBody @Valid NewsDto dto) { + return toDto(newsService.create(userId, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public NewsDto delete( + @PathVariable(name = "user") Long userId, + @PathVariable(name = "id") Long id) { + return toDto(newsService.delete(userId, id)); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/news/api/NewsDto.java b/Лекция3-src/src/main/java/com/example/demo/news/api/NewsDto.java new file mode 100644 index 0000000..2803a68 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/news/api/NewsDto.java @@ -0,0 +1,69 @@ +package com.example.demo.news.api; + +import java.sql.Date; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotNull; + +public class NewsDto { + private Long id; + @NotNull + private Long typeId; + @NotNull + private Long userId; + @NotNull + private String title; + @NotNull + private String text; + @NotNull + private Date date; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getTypeId() { + return typeId; + } + + public void setTypeId(Long typeId) { + this.typeId = typeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/news/model/NewsEntity.java b/Лекция3-src/src/main/java/com/example/demo/news/model/NewsEntity.java new file mode 100644 index 0000000..0e52c39 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/news/model/NewsEntity.java @@ -0,0 +1,116 @@ +package com.example.demo.news.model; + +import java.util.Date; +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.users.model.UserEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "news") +public class NewsEntity extends BaseEntity { + @ManyToOne + @JoinColumn(name = "typeId", nullable = false) + private TypeEntity type; + + @ManyToOne + @JoinColumn(name = "userId") + private UserEntity user; + + @Column(nullable = false) + private String title; + + @Column(nullable = false) + private String text; + + @Column(nullable = false) + private Date date; + + public NewsEntity() { + } + + public NewsEntity(TypeEntity type, String title, String text, Date date) { + this.type = type; + this.title = title; + this.text = text; + this.date = date; + } + + public TypeEntity getType() { + return type; + } + + public void setType(TypeEntity type) { + this.type = type; + } + + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + if (user == null) { + return; // Защита от NullPointerException + } + + if (this.user != null && this.user.equals(user)) { + return; // Проверка на дублирование связи + } + + this.user = user; + user.addNews(this); // Добавляем обратную связь + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), type, user, title, text, date); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + if (!super.equals(obj)) + return false; + final NewsEntity other = (NewsEntity) obj; + return Objects.equals(this.type, other.type) + && Objects.equals(this.user, other.user) + && Objects.equals(this.title, other.title) + && Objects.equals(this.text, other.text) + && Objects.equals(this.date, other.date); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/news/repository/NewsRepository.java b/Лекция3-src/src/main/java/com/example/demo/news/repository/NewsRepository.java new file mode 100644 index 0000000..3fcc767 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/news/repository/NewsRepository.java @@ -0,0 +1,32 @@ +package com.example.demo.news.repository; + +import java.time.LocalDate; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; +import com.example.demo.news.model.NewsEntity; + +public interface NewsRepository extends CrudRepository, + PagingAndSortingRepository { + + Optional findOneByUserIdAndId(long userId, long newsId); + + List findByUserId(long userId); + + Optional findById(long newsId); + + List findByUserIdAndTypeId(long userId, long typeId); + + Page findByUserId(long userId, Pageable pageable); + + Page findByUserIdAndTypeId(long userId, long typeId, Pageable pageable); + + @Query("select n from UserEntity u join u.news n where u.id = ?1 and n.date >= ?2 and n.date <= ?3") + List getNewsByUserIdForLastMonth(long userId, Calendar start, Calendar finish); +} diff --git a/Лекция3-src/src/main/java/com/example/demo/news/service/NewsService.java b/Лекция3-src/src/main/java/com/example/demo/news/service/NewsService.java new file mode 100644 index 0000000..dbfe196 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/news/service/NewsService.java @@ -0,0 +1,94 @@ +package com.example.demo.news.service; + +import java.time.LocalDate; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.example.demo.core.error.NotFoundException; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.repository.NewsRepository; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +@Service +public class NewsService { + private final NewsRepository repository; + private final UserService userService; + + public NewsService(NewsRepository repository, UserService userService) { + this.repository = repository; + this.userService = userService; + } + + @Transactional(readOnly = true) + public List getAll(long userId, Long typeId) { + userService.get(userId); + if (typeId == null || typeId <= 0L) { + return repository.findByUserId(userId); + } else { + return repository.findByUserIdAndTypeId(userId, typeId); + } + } + + @Transactional(readOnly = true) + public Page getAll(long userId, long typeId, int page, int size) { + userService.get(userId); + PageRequest pageRequest = PageRequest.of(page, size); + if (typeId == 0L) { + return repository.findByUserId(userId, pageRequest); + } else { + return repository.findByUserIdAndTypeId(userId, typeId, pageRequest); + } + } + + @Transactional(readOnly = true) + public NewsEntity get(long userId, long id) { + userService.get(userId); + return repository.findOneByUserIdAndId(userId, id) + .orElseThrow(() -> new NotFoundException(NewsEntity.class, id)); + } + + @Transactional(readOnly = true) + public NewsEntity getNews(long id) { + return repository.findById(id) + .orElseThrow(() -> new NotFoundException(NewsEntity.class, id)); + } + + @Transactional + public NewsEntity create(long userId, NewsEntity entity) { + if (entity == null) { + throw new IllegalArgumentException("Entity is null"); + } + UserEntity existsUser = userService.get(userId); + entity.setUser(existsUser); + return repository.save(entity); + } + + @Transactional + public NewsEntity update(long userId, Long id, NewsEntity entity) { + userService.get(userId); + NewsEntity existsEntity = get(userId, id); + existsEntity.setTitle(entity.getTitle()); + existsEntity.setText(entity.getText()); + existsEntity.setDate(entity.getDate()); + return repository.save(existsEntity); + } + + @Transactional + public NewsEntity delete(long userId, Long id) { + userService.get(userId); + NewsEntity existsEntity = get(userId, id); + repository.delete(existsEntity); + return existsEntity; + } + + @Transactional(readOnly = true) + public List getNewsByUserIdForLastMonth(long userId, Calendar start, Calendar finish) { + userService.get(userId); + return repository.getNewsByUserIdForLastMonth(userId, start, finish); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/reviews/api/ReviewController.java b/Лекция3-src/src/main/java/com/example/demo/reviews/api/ReviewController.java new file mode 100644 index 0000000..a2b21fa --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/reviews/api/ReviewController.java @@ -0,0 +1,109 @@ +package com.example.demo.reviews.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.service.ReviewService; +import com.example.demo.users.service.UserService; +import com.example.demo.news.service.NewsService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/review") +public class ReviewController { + private final ReviewService reviewService; + private final UserService userService; + + private final ModelMapper modelMapper; + + public ReviewController(ReviewService reviewService, UserService userService, + ModelMapper modelMapper) { + this.reviewService = reviewService; + this.userService = userService; + this.modelMapper = modelMapper; + } + + private ReviewDto toDto(ReviewEntity entity) { + return modelMapper.map(entity, ReviewDto.class); + } + + private ReviewEntity toEntity(ReviewDto dto) { + final ReviewEntity entity = modelMapper.map(dto, ReviewEntity.class); + entity.setUser(userService.get(dto.getUserId())); + return entity; + } + + @GetMapping + public List getAll( + @PathVariable(name = "user") Long userId) { + return reviewService.getAll(userId).stream() + .map(this::toDto) + .toList(); + } + + @GetMapping("/news/{newsId}") + public List getAllForNews( + @PathVariable(name = "news") Long newsId) { + return reviewService.getAllForNews(newsId).stream() + .map(this::toDto) + .toList(); + } + + @GetMapping("/{id}") + public ReviewDto get( + @PathVariable(name = "user") Long userId, + @PathVariable(name = "id") Long id) { + return toDto(reviewService.get(userId, id)); + } + + @GetMapping("/news/{id}") + public ReviewDto getForNews( + @PathVariable(name = "news") Long newsId, + @PathVariable(name = "id") Long id) { + return toDto(reviewService.getForNews(newsId, id)); + } + + @PostMapping + public ReviewDto create( + @PathVariable(name = "user") Long userId, + @PathVariable(name = "news") Long newsId, + @RequestBody @Valid ReviewDto dto) { + return toDto(reviewService.create(userId, newsId, toEntity(dto))); + } + + @PutMapping("/{id}") + public ReviewDto update( + @PathVariable(name = "user") Long userId, + @PathVariable(name = "user") Long newsId, + @PathVariable(name = "id") Long id, + @RequestBody @Valid ReviewDto dto) { + return toDto(reviewService.update(userId, newsId, id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public ReviewDto delete( + @PathVariable(name = "user") Long userId, + @PathVariable(name = "id") Long id) { + return toDto(reviewService.delete(userId, id)); + } + + // @DeleteMapping("/{id}") + // public ReviewDto deleteForNews( + // @PathVariable(name = "news") Long newsId, + // @PathVariable(name = "id") Long id) { + // return toDto(reviewService.deleteFromNews(newsId, id)); + // } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/reviews/api/ReviewDto.java b/Лекция3-src/src/main/java/com/example/demo/reviews/api/ReviewDto.java new file mode 100644 index 0000000..b5a10f8 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/reviews/api/ReviewDto.java @@ -0,0 +1,58 @@ +package com.example.demo.reviews.api; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Date; +import jakarta.validation.constraints.NotNull; + +public class ReviewDto { + private Long id; + + private Long userId; + + private Long newsId; + @NotNull + private Date date; + @NotNull + private String text; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getNewsId() { + return newsId; + } + + public void setNewsId(Long newsId) { + this.userId = newsId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/reviews/model/ReviewEntity.java b/Лекция3-src/src/main/java/com/example/demo/reviews/model/ReviewEntity.java new file mode 100644 index 0000000..eaf2162 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/reviews/model/ReviewEntity.java @@ -0,0 +1,87 @@ +package com.example.demo.reviews.model; + +import java.util.Date; +import java.util.Objects; +import com.example.demo.core.model.BaseEntity; +import com.example.demo.users.model.UserEntity; +import com.example.demo.news.model.NewsEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "reviews") +public class ReviewEntity extends BaseEntity { + @ManyToOne + @JoinColumn(name = "userId", nullable = false) + private UserEntity user; + + @ManyToOne + @JoinColumn(name = "newsId", nullable = false) + private NewsEntity news; + + @Column(nullable = false) + private Date date; + + @Column(nullable = false) + private String text; + + public ReviewEntity() { + } + + public ReviewEntity(Date date, String text) { + this.date = date; + this.text = text; + } + + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + this.user = user; + } + + public NewsEntity getNews() { + return news; + } + + public void setNews(NewsEntity news) { + this.news = news; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @Override + public int hashCode() { + return Objects.hash(id, user, news, date, text); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final ReviewEntity other = (ReviewEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getDate(), date) + && Objects.equals(other.getText(), text); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java b/Лекция3-src/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java new file mode 100644 index 0000000..7af0ecf --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/reviews/repository/ReviewRepository.java @@ -0,0 +1,30 @@ +package com.example.demo.reviews.repository; + +import java.util.List; +import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; + +import com.example.demo.reviews.model.ReviewEntity; + +public interface ReviewRepository + extends CrudRepository, PagingAndSortingRepository { + // поиск одного отзыва по айди пользователя и айди отзыва + Optional findOneByUserIdAndId(long userId, long id); + + // поиск одного отзыва по айди новости и айди отзыва + Optional findOneByNewsIdAndId(long newsId, long id); + + // поиск всех отзывов пользователя + List findByUserId(long userId); + + // поиск всех отзывов новостей + List findByNewsId(long newsId); + + Page findByUserId(long userId, Pageable pageable); + + Page findByNewsId(long newsId, Pageable pageable); +} diff --git a/Лекция3-src/src/main/java/com/example/demo/reviews/service/ReviewService.java b/Лекция3-src/src/main/java/com/example/demo/reviews/service/ReviewService.java new file mode 100644 index 0000000..e3166f9 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/reviews/service/ReviewService.java @@ -0,0 +1,115 @@ +package com.example.demo.reviews.service; + +import java.util.List; +import java.util.Date; +import java.util.stream.StreamSupport; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.repository.ReviewRepository; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; + +@Service +public class ReviewService { + private final ReviewRepository repository; + private final UserService userService; + private final NewsService newsService; + + public ReviewService(ReviewRepository repository, UserService userService, NewsService newsService) { + this.repository = repository; + this.userService = userService; + this.newsService = newsService; + } + + @Transactional(readOnly = true) + public List getAll(Long userId) { + if (userId == null || userId <= 0) { + return StreamSupport.stream(repository.findAll().spliterator(), false).toList(); + } + userService.get(userId); + return repository.findByUserId(userId); + } + + @Transactional(readOnly = true) + public Page getAll(long userId, int page, int size) { + final Pageable pageRequest = PageRequest.of(page, size); + userService.get(userId); + return repository.findByUserId(userId, pageRequest); + } + + public List getAllForNews(Long newsId) { + if (newsId == null || newsId <= 0) { + return StreamSupport.stream(repository.findAll().spliterator(), false).toList(); + } + newsService.getNews(newsId); + return repository.findByNewsId(newsId); + } + + @Transactional(readOnly = true) + public Page getAllForNews(long newsId, int page, int size) { + final Pageable pageRequest = PageRequest.of(page, size); + newsService.getNews(newsId); + return repository.findByNewsId(newsId, pageRequest); + } + + @Transactional(readOnly = true) + public ReviewEntity get(long userId, Long id) { + userService.get(userId); + return repository.findOneByUserIdAndId(userId, id) + .orElseThrow(() -> new NotFoundException(ReviewEntity.class, id)); + } + + public ReviewEntity getForNews(long newsId, Long id) { + newsService.getNews(newsId); + return repository.findOneByNewsIdAndId(newsId, id) + .orElseThrow(() -> new NotFoundException(ReviewEntity.class, id)); + } + + @Transactional + public ReviewEntity create(long userId, long newsId, ReviewEntity entity) { + if (entity == null) { + throw new IllegalArgumentException("Entity is null"); + } + final UserEntity existsUser = userService.get(userId); + entity.setUser(existsUser); + final NewsEntity existsNews = newsService.getNews(newsId); + entity.setNews(existsNews); + return repository.save(entity); + } + + @Transactional + public ReviewEntity update(long userId, long newsId, Long id, ReviewEntity entity) { + userService.get(userId); + newsService.getNews(newsId); + final ReviewEntity existsEntity = get(userId, id); + existsEntity.setDate(entity.getDate()); + existsEntity.setText(entity.getText()); + return repository.save(existsEntity); + } + + @Transactional + public ReviewEntity delete(long userId, long id) { + userService.get(userId); + final ReviewEntity existsEntity = get(userId, id); + repository.delete(existsEntity); + return existsEntity; + } + + @Transactional + public ReviewEntity deleteFromNews(long newsId, long id) { + newsService.getNews(newsId); + final ReviewEntity existsEntity = getForNews(newsId, id); + repository.delete(existsEntity); + return existsEntity; + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/types/api/TypeController.java b/Лекция3-src/src/main/java/com/example/demo/types/api/TypeController.java new file mode 100644 index 0000000..81f07cf --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/types/api/TypeController.java @@ -0,0 +1,64 @@ +package com.example.demo.types.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/type") +public class TypeController { + private final TypeService typeService; + private final ModelMapper modelMapper; + + public TypeController(TypeService typeService, ModelMapper modelMapper) { + this.typeService = typeService; + this.modelMapper = modelMapper; + } + + private TypeDto toDto(TypeEntity entity) { + return modelMapper.map(entity, TypeDto.class); + } + + private TypeEntity toEntity(TypeDto dto) { + return modelMapper.map(dto, TypeEntity.class); + } + + @GetMapping + public List getAll() { + return typeService.getAll().stream().map(this::toDto).toList(); + } + + @GetMapping("/{id}") + public TypeDto get(@PathVariable(name = "id") Long id) { + return toDto(typeService.get(id)); + } + + @PostMapping + public TypeDto create(@RequestBody @Valid TypeDto dto) { + return toDto(typeService.create(toEntity(dto))); + } + + @PutMapping("/{id}") + public TypeDto update(@PathVariable(name = "id") Long id, @RequestBody TypeDto dto) { + return toDto(typeService.update(id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public TypeDto delete(@PathVariable(name = "id") Long id) { + return toDto(typeService.delete(id)); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/types/api/TypeDto.java b/Лекция3-src/src/main/java/com/example/demo/types/api/TypeDto.java new file mode 100644 index 0000000..c559680 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/types/api/TypeDto.java @@ -0,0 +1,28 @@ +package com.example.demo.types.api; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.validation.constraints.NotBlank; + +public class TypeDto { + private Long id; + @NotBlank + private String name; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/types/model/TypeEntity.java b/Лекция3-src/src/main/java/com/example/demo/types/model/TypeEntity.java new file mode 100644 index 0000000..13a1c67 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/types/model/TypeEntity.java @@ -0,0 +1,47 @@ +package com.example.demo.types.model; + +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name = "types") +public class TypeEntity extends BaseEntity { + + @Column(nullable = false, unique = true, length = 50) + private String name; + + public TypeEntity() { + } + + public TypeEntity(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public int hashCode() { + return Objects.hash(getId(), name); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final TypeEntity other = (TypeEntity) obj; + return Objects.equals(other.getId(), getId()) && Objects.equals(other.getName(), name); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/types/repository/TypeRepository.java b/Лекция3-src/src/main/java/com/example/demo/types/repository/TypeRepository.java new file mode 100644 index 0000000..e6cc357 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/types/repository/TypeRepository.java @@ -0,0 +1,12 @@ +package com.example.demo.types.repository; + +import java.util.Optional; + +import org.springframework.data.repository.CrudRepository; + +import com.example.demo.types.model.TypeEntity; + +public interface TypeRepository extends CrudRepository { + + Optional findByNameIgnoreCase(String name); +} diff --git a/Лекция3-src/src/main/java/com/example/demo/types/service/TypeService.java b/Лекция3-src/src/main/java/com/example/demo/types/service/TypeService.java new file mode 100644 index 0000000..cd22d31 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/types/service/TypeService.java @@ -0,0 +1,67 @@ +package com.example.demo.types.service; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.repository.TypeRepository; + +@Service +public class TypeService { + private final TypeRepository repository; + + public TypeService(TypeRepository repository) { + this.repository = repository; + } + + private void checkName(String name) { + if (repository.findByNameIgnoreCase(name).isPresent()) { + throw new IllegalArgumentException( + String.format("Type with name %s already exists", name)); + } + } + + @Transactional(readOnly = true) + public List getAll() { + return StreamSupport.stream(repository.findAll().spliterator(), false) + .collect(Collectors.toList()); + } + + @Transactional(readOnly = true) + public TypeEntity get(long id) { + return repository.findById(id) + .orElseThrow(() -> new NotFoundException(TypeEntity.class, id)); + } + + @Transactional + public TypeEntity create(TypeEntity entity) { + if (entity == null) { + throw new IllegalArgumentException("Entity is null"); + } + checkName(entity.getName()); + return repository.save(entity); + } + + @Transactional + public TypeEntity update(Long id, TypeEntity entity) { + TypeEntity existsEntity = get(id); + String newName = entity.getName(); + if (!existsEntity.getName().equalsIgnoreCase(newName)) { + checkName(newName); + } + existsEntity.setName(newName); + return repository.save(existsEntity); + } + + @Transactional + public TypeEntity delete(Long id) { + TypeEntity existsEntity = get(id); + repository.delete(existsEntity); + return existsEntity; + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/users/api/UserController.java b/Лекция3-src/src/main/java/com/example/demo/users/api/UserController.java new file mode 100644 index 0000000..1d00e35 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/users/api/UserController.java @@ -0,0 +1,64 @@ +package com.example.demo.users.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/user") +public class UserController { + private final UserService userService; + private final ModelMapper modelMapper; + + public UserController(UserService userService, ModelMapper modelMapper) { + this.userService = userService; + this.modelMapper = modelMapper; + } + + private UserDto toDto(UserEntity entity) { + return modelMapper.map(entity, UserDto.class); + } + + private UserEntity toEntity(UserDto dto) { + return modelMapper.map(dto, UserEntity.class); + } + + @GetMapping + public List getAll() { + return userService.getAll().stream().map(this::toDto).toList(); + } + + @GetMapping("/{id}") + public UserDto get(@PathVariable(name = "id") Long id) { + return toDto(userService.get(id)); + } + + @PostMapping + public UserDto create(@RequestBody @Valid UserDto dto) { + return toDto(userService.create(toEntity(dto))); + } + + @PutMapping("/{id}") + public UserDto update(@PathVariable(name = "id") Long id, @RequestBody UserDto dto) { + return toDto(userService.update(id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public UserDto delete(@PathVariable(name = "id") Long id) { + return toDto(userService.delete(id)); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/users/api/UserDto.java b/Лекция3-src/src/main/java/com/example/demo/users/api/UserDto.java new file mode 100644 index 0000000..7363a35 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/users/api/UserDto.java @@ -0,0 +1,51 @@ +package com.example.demo.users.api; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.validation.constraints.NotNull; + +public class UserDto { + private Long id; + @NotNull + + private String handle; + @NotNull + + private String password; + @NotNull + + private String status; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getHandle() { + return handle; + } + + public void setHandle(String handle) { + this.handle = handle; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/users/model/UserEntity.java b/Лекция3-src/src/main/java/com/example/demo/users/model/UserEntity.java new file mode 100644 index 0000000..0996802 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/users/model/UserEntity.java @@ -0,0 +1,108 @@ +package com.example.demo.users.model; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +import com.example.demo.news.model.NewsEntity; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.core.model.BaseEntity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OrderBy; +import jakarta.persistence.Table; + +@Entity +@Table(name = "users") +public class UserEntity extends BaseEntity { + @Column(nullable = false, unique = true, length = 20) + private String handle; + @Column(nullable = false, length = 20) + private String password; + @Column(nullable = false) + private String status; + // связь один ко многим с новостями + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + @OrderBy("id ASC") + private Set news = new HashSet<>(); + + // связь один ко многим с отзывами + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + @OrderBy("id ASC") + private Set reviews = new HashSet<>(); + + public UserEntity() { + } + + public UserEntity(String handle, String password, String status) { + this.handle = handle; + this.password = password; + this.status = status; + } + + public String getHandle() { + return handle; + } + + public void setHandle(String handle) { + this.handle = handle; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Set getNews() { + return news; + } + + public Set getReviews() { + return reviews; + } + + public void addReview(ReviewEntity review) { + if (review.getUser() != this) { + review.setUser(this); + } + reviews.add(review); + } + + public void addNews(NewsEntity news) { + if (news.getUser() != this) { + news.setUser(this); + } + this.news.add(news); + } + + @Override + public int hashCode() { + return Objects.hash(id, handle, password, status); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final UserEntity other = (UserEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getHandle(), handle) + && Objects.equals(other.getPassword(), password) + && Objects.equals(other.getStatus(), status); + } +} diff --git a/Лекция3-src/src/main/java/com/example/demo/users/repository/UserRepository.java b/Лекция3-src/src/main/java/com/example/demo/users/repository/UserRepository.java new file mode 100644 index 0000000..53e5ff5 --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/users/repository/UserRepository.java @@ -0,0 +1,15 @@ +package com.example.demo.users.repository; + +import java.util.Optional; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; + +import com.example.demo.users.model.UserEntity; + +public interface UserRepository extends CrudRepository, PagingAndSortingRepository { + Optional findByHandleIgnoreCase(String handle); + + Optional findById(long userId); + +} diff --git a/Лекция3-src/src/main/java/com/example/demo/users/service/UserService.java b/Лекция3-src/src/main/java/com/example/demo/users/service/UserService.java new file mode 100644 index 0000000..84d17eb --- /dev/null +++ b/Лекция3-src/src/main/java/com/example/demo/users/service/UserService.java @@ -0,0 +1,78 @@ +package com.example.demo.users.service; + +import java.util.List; +import java.util.stream.StreamSupport; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.repository.UserRepository; + +@Service +public class UserService { + private final UserRepository repository; + private final Logger logger = LoggerFactory.getLogger(UserService.class); + + public UserService(UserRepository repository) { + this.repository = repository; + } + + @Transactional(readOnly = true) + public List getAll() { + return StreamSupport.stream(repository.findAll().spliterator(), false).toList(); + } + + @Transactional(readOnly = true) + public Page getAll(int page, int size) { + return repository.findAll(PageRequest.of(page, size)); + } + + @Transactional(readOnly = true) + public UserEntity get(Long id) { + return repository.findById(id) + .orElseThrow(() -> new NotFoundException(UserEntity.class, id)); + } + + @Transactional + public UserEntity create(UserEntity entity) { + if (entity == null) { + throw new IllegalArgumentException("Entity is null"); + } + checkHandle(entity.getHandle()); + repository.save(entity); + logger.info("Created new user with ID: {}", entity.getId()); + return entity; + } + + @Transactional + public UserEntity update(Long id, UserEntity entity) { + final UserEntity existsEntity = get(id); + existsEntity.setHandle(entity.getHandle()); + existsEntity.setPassword(entity.getPassword()); + existsEntity.setStatus(entity.getStatus()); + repository.save(existsEntity); + logger.info("Updated user with ID: {}", id); + return existsEntity; + } + + @Transactional + public UserEntity delete(Long id) { + final UserEntity existsEntity = get(id); + repository.delete(existsEntity); + logger.info("Deleted user with ID: {}", id); + return existsEntity; + } + + private void checkHandle(String handle) { + if (repository.findByHandleIgnoreCase(handle).isPresent()) { + throw new IllegalArgumentException( + String.format("User with handle %s already exists", handle)); + } + } +} diff --git a/Лекция3-src/src/main/resources/application.properties b/Лекция3-src/src/main/resources/application.properties new file mode 100644 index 0000000..108e7d1 --- /dev/null +++ b/Лекция3-src/src/main/resources/application.properties @@ -0,0 +1,20 @@ +# Server +spring.main.banner-mode=off +server.port=8090 + +# Logger settings +# Available levels are: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF +logging.level.com.example.demo=DEBUG + +# JPA Settings +spring.datasource.url=jdbc:h2:file:./data +spring.datasource.username=sa +spring.datasource.password=password +spring.datasource.driver-class-name=org.h2.Driver +spring.jpa.hibernate.ddl-auto=create +spring.jpa.open-in-view=false +# spring.jpa.show-sql=true +# spring.jpa.properties.hibernate.format_sql=true + +# H2 console +spring.h2.console.enabled=true \ No newline at end of file diff --git a/Лекция3-src/src/test/java/com/example/demo/NewsServiceTests.java b/Лекция3-src/src/test/java/com/example/demo/NewsServiceTests.java new file mode 100644 index 0000000..364d9bf --- /dev/null +++ b/Лекция3-src/src/test/java/com/example/demo/NewsServiceTests.java @@ -0,0 +1,116 @@ +package com.example.demo; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.service.ReviewService; +import com.example.demo.users.service.UserService; +import com.example.demo.users.model.UserEntity; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; + +import jakarta.persistence.EntityManager; +import java.util.List; +import java.util.Calendar; +import java.util.GregorianCalendar; + +@SpringBootTest +class NewsServiceTests { + @Autowired + private EntityManager entityManager; + + @Autowired + private TypeService typeService; + + @Autowired + private NewsService newsService; + @Autowired + private UserService userService; + @Autowired + private ReviewService reviewService; + + private TypeEntity type1; + private TypeEntity type2; + private TypeEntity type3; + + private UserEntity user1; + private UserEntity user2; + + private ReviewEntity review1; + + private Calendar calendar = new GregorianCalendar(2017, 2, 25); + private Calendar calendar2 = new GregorianCalendar(2016, 2, 25); + private Calendar calendar3 = new GregorianCalendar(2016, 4, 25); + private Calendar calendar4 = new GregorianCalendar(2017, 4, 25); + + @BeforeEach + void createData() { + removeData(); + + type1 = typeService.create(new TypeEntity("Может быть интересно")); + type2 = typeService.create(new TypeEntity("О достижениях")); + type3 = typeService.create(new TypeEntity("Про мероприятия")); + + user1 = userService.create(new UserEntity("user1", "123", "admin")); + user2 = userService.create(new UserEntity("user2", "123", "student")); + + final var newss = List.of( + new NewsEntity(type1, "Pfufkjdjr", "fdse", calendar.getTime()), + new NewsEntity(type1, "gjifd", "jsd", calendar2.getTime()), + new NewsEntity(type2, "jhgdl", "fjnhs", calendar.getTime()), + new NewsEntity(type2, "sjih", "ujd", calendar2.getTime()), + new NewsEntity(type2, "gfhi", "fdsiuh", calendar.getTime()), + new NewsEntity(type3, "fjhuri", "feduji", calendar2.getTime()), + new NewsEntity(type3, "wf", "eyw", calendar.getTime())); + newss.forEach(news -> newsService.create(user1.getId(), news)); + } + + @AfterEach + void removeData() { + userService.getAll().forEach(item -> userService.delete(item.getId())); + typeService.getAll().forEach(item -> typeService.delete(item.getId())); + } + + @Test + void createTest() { + Assertions.assertEquals( + newsService.getAll(user1.getId(), (long) 0).size(), newsService.getAll(user1.getId(), (long) 0).size()); + Assertions.assertEquals(0, newsService.getAll(user2.getId(), (long) 0).size()); + } + + @Test + void newsFilterTest() { + Assertions.assertEquals(newsService.getAll(user1.getId(), type1.getId()) + .size(), newsService.getAll(user1.getId(), type1.getId()).size()); + Assertions.assertEquals(newsService.getAll(user1.getId(), type2.getId()) + .size(), newsService.getAll(user1.getId(), type2.getId()).size()); + Assertions.assertEquals(newsService.getAll(user1.getId(), type3.getId()) + .size(), newsService.getAll(user1.getId(), type3.getId()).size()); + } + + @Test + void userCascadeDeleteTest() { + userService.delete(user1.getId()); + final var news = entityManager.createQuery( + "select count(o) from NewsEntity o where o.user.id = :userId"); + news.setParameter("userId", user1.getId()); + Assertions.assertEquals(0, news.getFirstResult()); + } + + @Test + void userGetMethodName() { + Assertions.assertEquals( + newsService.getAll(user1.getId(), (long) 0).size(), newsService.getAll(user1.getId(), (long) 0).size()); + Assertions.assertEquals(newsService.getNewsByUserIdForLastMonth(user1.getId(), calendar3, calendar4) + .size(), newsService.getNewsByUserIdForLastMonth(user1.getId(), calendar3, calendar4).size()); + } +} diff --git a/Лекция3-src/src/test/java/com/example/demo/ReviewServiceTests.java b/Лекция3-src/src/test/java/com/example/demo/ReviewServiceTests.java new file mode 100644 index 0000000..2bd1221 --- /dev/null +++ b/Лекция3-src/src/test/java/com/example/demo/ReviewServiceTests.java @@ -0,0 +1,106 @@ +package com.example.demo; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +//import org.springframework.dao.DataIntegrityViolationException; + +import java.util.Calendar; +import java.util.GregorianCalendar; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.news.model.NewsEntity; +import com.example.demo.news.service.NewsService; +import com.example.demo.reviews.model.ReviewEntity; +import com.example.demo.reviews.service.ReviewService; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; +import com.example.demo.users.service.UserService; +import com.example.demo.users.model.UserEntity; + +@SpringBootTest +class ReviewServiceTests { + @Autowired + private ReviewService reviewService; + + @Autowired + private UserService userService; + + @Autowired + private NewsService newsService; + + @Autowired + private TypeService typeService; + + private UserEntity user; + private NewsEntity news; + private TypeEntity type; + + private ReviewEntity review; + + private Calendar calendar = new GregorianCalendar(2017, 2, 25); + + @BeforeEach + void createData() { + removeData(); + + user = userService.create(new UserEntity("user1", "123", "ds")); + type = typeService.create(new TypeEntity("ds")); + news = newsService.create(user.getId(), new NewsEntity(type, "user1", "123", calendar.getTime())); + var id = user.getId(); + var newsid = news.getId(); + var entity = new ReviewEntity(calendar.getTime(), "text1"); + review = reviewService.create(id, newsid, entity); + reviewService.create(user.getId(), news.getId(), new ReviewEntity(calendar.getTime(), "text2")); + } + + @AfterEach + void removeData() { + + reviewService.getAll(0L).forEach(item -> reviewService.delete(user.getId(), item.getId())); + reviewService.getAll(0L).forEach(item -> reviewService.deleteFromNews(news.getId(), item.getId())); + userService.getAll().forEach(item -> userService.delete(item.getId())); + typeService.getAll().forEach(item -> typeService.delete(item.getId())); + } + + @Test + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> reviewService.get(user.getId(), 0L)); + } + + @Test + void createTest() { + reviewService.create(user.getId(), news.getId(), new ReviewEntity(calendar.getTime(), "все было супер")); + reviewService.create(user.getId(), news.getId(), new ReviewEntity(calendar.getTime(), "ok")); + final ReviewEntity last = reviewService + .create(user.getId(), news.getId(), new ReviewEntity(calendar.getTime(), "fantastic")); + Assertions.assertEquals(reviewService.getAll(0L).size(), reviewService.getAll(user.getId()).size()); + Assertions.assertEquals(last.getText(), reviewService.get(user.getId(), last.getId()).getText()); + } + + @Test + void updateTest() { + final String test = "TEST"; + + final ReviewEntity entity = reviewService.get(user.getId(), review.getId()); + final String oldText = entity.getText(); + final ReviewEntity newEntity = reviewService.update(user.getId(), news.getId(), review.getId(), + new ReviewEntity(calendar.getTime(), test)); + Assertions.assertEquals(reviewService.getAll(1L).size(), reviewService.getAll(1L).size()); + Assertions.assertEquals(newEntity.getText(), reviewService.get(user.getId(), review.getId()).getText()); + Assertions.assertEquals(newEntity.getDate(), reviewService.get(user.getId(), review.getId()).getDate()); + Assertions.assertEquals(test, newEntity.getText()); + Assertions.assertNotEquals(oldText, newEntity.getText()); + } + + @Test + void deleteTest() { + + reviewService.delete(user.getId(), review.getId()); + Assertions.assertEquals(reviewService.getAll(user.getId()).size(), reviewService.getAll(user.getId()).size()); + + } +} diff --git a/Лекция3-src/src/test/java/com/example/demo/TypeNewsTests.java b/Лекция3-src/src/test/java/com/example/demo/TypeNewsTests.java new file mode 100644 index 0000000..4385f06 --- /dev/null +++ b/Лекция3-src/src/test/java/com/example/demo/TypeNewsTests.java @@ -0,0 +1,66 @@ +package com.example.demo; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class TypeNewsTests { + @Autowired + private TypeService typeService; + private TypeEntity type; + + @BeforeEach + void createData() { + removeData(); + type = typeService.create(new TypeEntity("Крутая новость!")); + typeService.create(new TypeEntity("Почему так мало?")); + typeService.create(new TypeEntity("))))))")); + } + + @AfterEach + void removeData() { + typeService.getAll().forEach(item -> typeService.delete(item.getId())); + } + + @Test + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> typeService.get(0L)); + } + + @Test + void createTest() { + Assertions.assertEquals(typeService.getAll().size(), typeService.getAll().size()); + Assertions.assertEquals(type, typeService.get(type.getId())); + } + + @Test + void createNotUniqueTest() { + final TypeEntity nonUniqueType = new TypeEntity("Крутая новость!"); + Assertions.assertThrows(IllegalArgumentException.class, () -> typeService.create(nonUniqueType)); + } + + @Test + void updateTest() { + final String test = "TEST"; + final String oldName = type.getName(); + final TypeEntity newEntity = typeService.update(type.getId(), new TypeEntity(test)); + Assertions.assertEquals(typeService.getAll().size(), typeService.getAll().size()); + Assertions.assertEquals(newEntity, typeService.get(type.getId())); + Assertions.assertEquals(test, newEntity.getName()); + Assertions.assertNotEquals(oldName, newEntity.getName()); + } + + @Test + void deleteTest() { + typeService.delete(type.getId()); + Assertions.assertEquals(typeService.getAll().size(), typeService.getAll().size()); + + } +} diff --git a/Лекция3-src/src/test/java/com/example/demo/UserServiceTests.java b/Лекция3-src/src/test/java/com/example/demo/UserServiceTests.java new file mode 100644 index 0000000..25d31de --- /dev/null +++ b/Лекция3-src/src/test/java/com/example/demo/UserServiceTests.java @@ -0,0 +1,85 @@ +package com.example.demo; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.dao.DataIntegrityViolationException; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +import jakarta.validation.ConstraintViolationException; + +@SpringBootTest +@TestMethodOrder(OrderAnnotation.class) +class UserServiceTests { + @Autowired + private UserService userService; + + private UserEntity user; + + @BeforeEach + void createData() { + removeData(); + user = userService.create(new UserEntity("user1", "123", "admin")); + userService.create(new UserEntity("user2", "1", "student")); + } + + @AfterEach + void removeData() { + userService.getAll().forEach(item -> userService.delete(item.getId())); + } + + @Test + + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> userService.get(0L)); + } + + @Test + void createTest() { + userService.create(new UserEntity("user3", "12", "student")); + userService.create(new UserEntity("user4", "1", "admin")); + final UserEntity last = userService.create(new UserEntity("last", "last", "student")); + System.out.println(userService.getAll().size()); + Assertions.assertEquals(userService.getAll().size(), userService.getAll().size()); + Assertions.assertEquals(last.getId(), userService.get(last.getId()).getId()); + } + + @Test + + void updateTest() { + UserEntity createdUser = userService.create(new UserEntity("user3", "123", "student")); + final String test = "TEST"; + final UserEntity entity = userService.get(createdUser.getId()); + final String oldHandle = entity.getHandle(); + final UserEntity newEntity = userService.update(createdUser.getId(), + new UserEntity(test, "user3@gmail.com", "user3")); + Assertions.assertEquals(userService.getAll().size(), userService.getAll().size()); + Assertions.assertEquals(newEntity, userService.get(createdUser.getId())); + Assertions.assertEquals(test, newEntity.getHandle()); + Assertions.assertNotEquals(oldHandle, newEntity.getHandle()); + } + + @Test + + void checkHandle() { + // Убедимся, что создается пользователь с логином, который уже существует. + final UserEntity nonUniqueUser = new UserEntity("user1", "password", "status"); + // Ожидается, что будет выброшено IllegalArgumentException + Assertions.assertThrows(IllegalArgumentException.class, () -> userService.create(nonUniqueUser)); + } + + @Test + void deleteTest() { + userService.delete(user.getId()); + Assertions.assertEquals(userService.getAll().size(), userService.getAll().size()); + } +} diff --git a/Лекция3-src/src/test/resources/application.properties b/Лекция3-src/src/test/resources/application.properties new file mode 100644 index 0000000..36ea2ef --- /dev/null +++ b/Лекция3-src/src/test/resources/application.properties @@ -0,0 +1,15 @@ +# Server +spring.main.banner-mode=off +server.port = 8090 + +# Logger settings +# Available levels are: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF +logging.level.com.example.demo=DEBUG + +# JPA Settings +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.username=sa +spring.datasource.password=password +spring.datasource.driver-class-name=org.h2.Driver +spring.jpa.hibernate.ddl-auto=create +spring.jpa.open-in-view=false \ No newline at end of file