From 7328dcb13431f6872f69afcbf2d9297bc31bce2b Mon Sep 17 00:00:00 2001 From: yulia Date: Wed, 10 Jan 2024 00:13:23 +0400 Subject: [PATCH] podkorytova_yulia_lab_3 is ready --- podkorytova_yulia_lab_3/README.md | 161 +++++++++++++++ podkorytova_yulia_lab_3/docker-compose.yml | 36 ++++ podkorytova_yulia_lab_3/images/console.JPG | Bin 0 -> 16302 bytes podkorytova_yulia_lab_3/images/dockerhub1.JPG | Bin 0 -> 47567 bytes podkorytova_yulia_lab_3/images/dockerhub2.JPG | Bin 0 -> 75781 bytes podkorytova_yulia_lab_3/images/message.JPG | Bin 0 -> 92803 bytes podkorytova_yulia_lab_3/images/user.JPG | Bin 0 -> 85725 bytes .../message-service/.gitignore | 37 ++++ .../message-service/Dockerfile | 7 + .../message-service/build.gradle | 42 ++++ .../message-service/gradlew | 185 ++++++++++++++++++ .../message-service/gradlew.bat | 89 +++++++++ .../message-service/settings.gradle | 1 + .../main/java/com/example/app/MessageApp.java | 18 ++ .../app/controller/MessageController.java | 47 +++++ .../java/com/example/app/dto/MessageDto.java | 67 +++++++ .../app/dto/MessageWithUserInfoDto.java | 68 +++++++ .../java/com/example/app/dto/UserInfoDto.java | 43 ++++ .../java/com/example/app/model/Message.java | 77 ++++++++ .../app/repository/MessageRepository.java | 7 + .../app/service/MessageNotFoundException.java | 7 + .../example/app/service/MessageService.java | 70 +++++++ .../src/main/resources/application.properties | 11 ++ podkorytova_yulia_lab_3/nginx-conf/nginx.conf | 21 ++ .../user-service/.gitignore | 37 ++++ .../user-service/Dockerfile | 7 + .../user-service/build.gradle | 40 ++++ podkorytova_yulia_lab_3/user-service/gradlew | 185 ++++++++++++++++++ .../user-service/gradlew.bat | 89 +++++++++ .../user-service/settings.gradle | 1 + .../main/java/com/example/app/UserApp.java | 11 ++ .../app/controller/UserController.java | 46 +++++ .../java/com/example/app/dto/UserDto.java | 54 +++++ .../main/java/com/example/app/model/User.java | 65 ++++++ .../app/repository/UserRepository.java | 7 + .../app/service/UserNotFoundException.java | 7 + .../com/example/app/service/UserService.java | 51 +++++ .../src/main/resources/application.properties | 11 ++ 38 files changed, 1605 insertions(+) create mode 100644 podkorytova_yulia_lab_3/README.md create mode 100644 podkorytova_yulia_lab_3/docker-compose.yml create mode 100644 podkorytova_yulia_lab_3/images/console.JPG create mode 100644 podkorytova_yulia_lab_3/images/dockerhub1.JPG create mode 100644 podkorytova_yulia_lab_3/images/dockerhub2.JPG create mode 100644 podkorytova_yulia_lab_3/images/message.JPG create mode 100644 podkorytova_yulia_lab_3/images/user.JPG create mode 100644 podkorytova_yulia_lab_3/message-service/.gitignore create mode 100644 podkorytova_yulia_lab_3/message-service/Dockerfile create mode 100644 podkorytova_yulia_lab_3/message-service/build.gradle create mode 100644 podkorytova_yulia_lab_3/message-service/gradlew create mode 100644 podkorytova_yulia_lab_3/message-service/gradlew.bat create mode 100644 podkorytova_yulia_lab_3/message-service/settings.gradle create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/MessageApp.java create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/controller/MessageController.java create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/MessageDto.java create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/MessageWithUserInfoDto.java create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/UserInfoDto.java create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/model/Message.java create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/repository/MessageRepository.java create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/service/MessageNotFoundException.java create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/service/MessageService.java create mode 100644 podkorytova_yulia_lab_3/message-service/src/main/resources/application.properties create mode 100644 podkorytova_yulia_lab_3/nginx-conf/nginx.conf create mode 100644 podkorytova_yulia_lab_3/user-service/.gitignore create mode 100644 podkorytova_yulia_lab_3/user-service/Dockerfile create mode 100644 podkorytova_yulia_lab_3/user-service/build.gradle create mode 100644 podkorytova_yulia_lab_3/user-service/gradlew create mode 100644 podkorytova_yulia_lab_3/user-service/gradlew.bat create mode 100644 podkorytova_yulia_lab_3/user-service/settings.gradle create mode 100644 podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/UserApp.java create mode 100644 podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/controller/UserController.java create mode 100644 podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/dto/UserDto.java create mode 100644 podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/model/User.java create mode 100644 podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/repository/UserRepository.java create mode 100644 podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/service/UserNotFoundException.java create mode 100644 podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/service/UserService.java create mode 100644 podkorytova_yulia_lab_3/user-service/src/main/resources/application.properties diff --git a/podkorytova_yulia_lab_3/README.md b/podkorytova_yulia_lab_3/README.md new file mode 100644 index 0000000..ea2d7c0 --- /dev/null +++ b/podkorytova_yulia_lab_3/README.md @@ -0,0 +1,161 @@ +# Лабораторная работа 3. REST API, Gateway и синхронный обмен между микросервисами +### Задание на лабораторную работу +1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях. +2. Реализовать механизм синхронного обмена сообщениями между микросервисами. +3. Реализовать шлюз на основе прозрачного прокси-сервера nginx. + +*** +### Как запустить лабораторную работу +Для сборки и запуска программ необходимо перейти в директорию с файлом `docker-compose.yaml` и выполнить команду: +``` +docker-compose up -d +``` +*** +### Описание работы +Были созданы два микросервиса на *java*, каждый реализует CRUD-операции: список записей, подробности конкретной записи, создание, удаление и изменение записи. +Микросервисы реализованы при помощи фреймворка *spring*. + +**Описание сущностей:** +- *user* - пользователь. Поля: *id* (уникальный идентификатор пользователя), *fullName* (ФИО), *phoneNumber* (номер телефона), *role* (роль - ученик/репетитор). +- *message* - сообщение. Поля: *id* (уникальный идентификатор сообщения), *text* (текст), *status* (статус - отправлено/получено/прочитано), *date* (дата отправки), *userId* (id пользователя). + +Сущности связаны отношением один-ко-многим (пользователь-сообщения). + +**Реализация синхронного обмена:** + +Синхронный обмен между сообщениями реализуется при помощи RestTemplate. +При получении информации о сообщении через GET запрос к user-service получаются данные о пользователе-отправителе сообщения. + +Пример реализации при получении записи о сообщении в `MessageService`: +``` +private final MessageRepository messageRepository; +private final RestTemplate restTemplate; +private final String URL = "http://user-service:8085/user/"; + +@Autowired +public MessageService(MessageRepository messageRepository, RestTemplate restTemplate) { + this.messageRepository = messageRepository; + this.restTemplate = restTemplate; +} + +@Transactional(readOnly = true) +public MessageWithUserInfoDto findMessage(Long id) { + final Message message = messageRepository.findById(id).orElse(null); + if (message == null) { + throw new MessageNotFoundException(id); + } + UserInfoDto userInfo = restTemplate.getForObject(URL + message.getUserId(), UserInfoDto.class); + return new MessageWithUserInfoDto(message, userInfo); +} +``` + +**Dockerfile** + +Используется базовый образ *openjdk:17-jdk*, на основе которого будет создан контейнер. +Внутри контейнера создается директория `/usr/src/app/`, после устанавливается рабочая директория и файлы из каталога, где находится Dockerfile, копируются внутрь контейнера в директорию `/usr/src/app/`. +Выполняется сборка проекта с помощью инструмента gradlew. Задается порт и указывается точка входа для контейнера. Запуск java-приложения осуществляется посредством запуска jar-файла. + +Содержимое `Dockerfile` для сервиса `user-service`: +``` +FROM openjdk:17 +RUN mkdir -p /usr/src/app/ +WORKDIR /usr/src/app/ +COPY . /usr/src/app/ +RUN ./gradlew clean build +EXPOSE 8085 +ENTRYPOINT ["java","-jar","build/libs/user-service-1.0-SNAPSHOT.jar"] +``` +Аналогично был составлен `Dockerfile` для сервиса `message-service`. + +**Файл конфигурации nginx.conf** + +Файл `nginx.conf` содержит конфигурацию для сервера *nginx*. +Конфигурация позволяет перенаправлять запросы, начинающиеся с /user-service/ на сервер user-service на порту 8085, а запросы, начинающиеся с /message-service/, на сервер message-service на порту 8086. +``` +server { +listen 80; +listen [::]:80; +server_name localhost; + + location /user-service/ { + proxy_pass http://user-service:8085/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /user-service; + } + + location /message-service/ { + proxy_pass http://message-service:8086/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /message-service; + } +} +``` + +**Файл конфигурации docker-compose.yml** + +В файле `docker-compose.yml` указана версия синтаксиса *Docker Compose*, определен список сервисов, которые будут развернуты в приложении, и определена сеть с именем "network", которая будет использоваться для связи между контейнерами. +Файл определяет три сервиса: *user-service*, *message-service* и *nginx*. Для сервисов user-service и message-service используются образы приложений, созданные при помощи Dockerfile. +Сервис *nginx* использует образ *nginx*. +Параметр *depends_on* определяет зависимости сервисов (*nginx* зависит от сервисов *user-service* и *message-service* и разворачивается только после их запуска), в *ports* настраивается проброс портов. +``` +version: '3' + +services: + user-service: + build: + context: /user-service + dockerfile: Dockerfile + ports: + - 8085:8085 + networks: + - network + + message-service: + build: + context: /message-service + dockerfile: Dockerfile + ports: + - 8086:8086 + networks: + - network + + nginx: + image: nginx + ports: + - 8087:80 + networks: + - network + volumes: + - ./nginx-conf:/etc/nginx/conf.d + depends_on: + - user-service + - message-service + +networks: + network: + driver: bridge +``` + +*** +### Скриншоты +***Результаты сборки и запуска программ в консоли*** +![](images/console.jpg) + +***Образы в Dockerhub*** +![](images/dockerhub1.jpg) + +***Контейнеры в Dockerhub*** +![](images/dockerhub2.jpg) + +***Информация по пользователю*** +![](images/user.jpg) + +***Информация по сообщению*** +![](images/message.jpg) + +### Ссылка на видео: +https://drive.google.com/file/d/19pw4LWiuzK2tDHlSSbKbxNWPsvbUzWwd/view?usp=sharing \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/docker-compose.yml b/podkorytova_yulia_lab_3/docker-compose.yml new file mode 100644 index 0000000..ad68f62 --- /dev/null +++ b/podkorytova_yulia_lab_3/docker-compose.yml @@ -0,0 +1,36 @@ +version: '3' + +services: + user-service: + build: + context: /user-service + dockerfile: Dockerfile + ports: + - 8085:8085 + networks: + - network + + message-service: + build: + context: /message-service + dockerfile: Dockerfile + ports: + - 8086:8086 + networks: + - network + + nginx: + image: nginx + ports: + - 8087:80 + networks: + - network + volumes: + - ./nginx-conf:/etc/nginx/conf.d + depends_on: + - user-service + - message-service + +networks: + network: + driver: bridge \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/images/console.JPG b/podkorytova_yulia_lab_3/images/console.JPG new file mode 100644 index 0000000000000000000000000000000000000000..b4e97fae8f09146365a8662372189c34499a2000 GIT binary patch literal 16302 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 literal 0 HcmV?d00001 diff --git a/podkorytova_yulia_lab_3/images/dockerhub1.JPG b/podkorytova_yulia_lab_3/images/dockerhub1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..3dc7584537b6697ef421cae17fda2afa7bd08913 GIT binary patch literal 47567 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 ZpU-^o)&OtZid~3ZNS}`+ZQkeD3GAF~33M6H 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 I>i5il19F;xY5)KL literal 0 HcmV?d00001 diff --git a/podkorytova_yulia_lab_3/images/dockerhub2.JPG b/podkorytova_yulia_lab_3/images/dockerhub2.JPG new file mode 100644 index 0000000000000000000000000000000000000000..cf5d147c4feb9d3c229a74c47185dcb56efc3356 GIT binary patch literal 75781 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
9L%cGiDOQm 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 fbs-p-zTM$VtJU`H8~C~*3ZE%qy_~k(jkC= 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 literal 0 HcmV?d00001 diff --git a/podkorytova_yulia_lab_3/message-service/.gitignore b/podkorytova_yulia_lab_3/message-service/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/.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/podkorytova_yulia_lab_3/message-service/Dockerfile b/podkorytova_yulia_lab_3/message-service/Dockerfile new file mode 100644 index 0000000..0f0d13a --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:17 +RUN mkdir -p /usr/src/app/ +WORKDIR /usr/src/app/ +COPY . /usr/src/app/ +RUN ./gradlew clean build +EXPOSE 8086 +ENTRYPOINT ["java","-jar","build/libs/message-service-1.0-SNAPSHOT.jar"] \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/message-service/build.gradle b/podkorytova_yulia_lab_3/message-service/build.gradle new file mode 100644 index 0000000..f3af670 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/build.gradle @@ -0,0 +1,42 @@ +plugins { + id 'org.springframework.boot' version '2.6.3' + id 'io.spring.dependency-management' version '1.0.11.RELEASE' + id 'java' +} + +group 'com.example' +version '1.0-SNAPSHOT' +sourceCompatibility = '17' + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.springframework.boot:spring-boot-devtools' + implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' + + implementation 'org.webjars:bootstrap:5.1.3' + implementation 'org.webjars:jquery:3.6.0' + implementation 'org.webjars:font-awesome:6.1.0' + + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'com.h2database:h2:2.1.210' + + implementation 'org.hibernate.validator:hibernate-validator' + + implementation 'org.springdoc:springdoc-openapi-ui:1.6.5' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' + + implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.5' +} + +tasks.named('test') { + useJUnitPlatform() +} \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/message-service/gradlew b/podkorytova_yulia_lab_3/message-service/gradlew new file mode 100644 index 0000000..744e882 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or 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 UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# 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"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# 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" + which java >/dev/null 2>&1 || 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 + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/podkorytova_yulia_lab_3/message-service/gradlew.bat b/podkorytova_yulia_lab_3/message-service/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/gradlew.bat @@ -0,0 +1,89 @@ +@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=. +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%" == "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%"=="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! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/podkorytova_yulia_lab_3/message-service/settings.gradle b/podkorytova_yulia_lab_3/message-service/settings.gradle new file mode 100644 index 0000000..c8f9f89 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'message-service' \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/MessageApp.java b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/MessageApp.java new file mode 100644 index 0000000..4e56f89 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/MessageApp.java @@ -0,0 +1,18 @@ +package com.example.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.web.client.RestTemplate; + +@SpringBootApplication +public class MessageApp { + public static void main(String[] args) { + SpringApplication.run(MessageApp.class, args); + } + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } +} diff --git a/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/controller/MessageController.java b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/controller/MessageController.java new file mode 100644 index 0000000..a5bc784 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/controller/MessageController.java @@ -0,0 +1,47 @@ +package com.example.app.controller; + +import com.example.app.dto.MessageDto; +import com.example.app.dto.MessageWithUserInfoDto; +import com.example.app.service.MessageService; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.*; +import java.util.stream.*; + +@RestController +@RequestMapping("/message") +public class MessageController { + private final MessageService messageService; + + public MessageController(MessageService messageService) { + this.messageService = messageService; + } + + @GetMapping("/") + public List getMessages() { + return messageService.findAllMessages().stream() + .map(MessageDto::new) + .collect(Collectors.toList()); + } + + @GetMapping("/{id}") + public MessageWithUserInfoDto getMessage(@PathVariable Long id) { + return messageService.findMessage(id); + } + + @PostMapping("/") + public MessageDto createMessage(@RequestBody @Valid MessageDto messageDto) { + return messageService.addMessage(messageDto); + } + + @PutMapping("/{id}") + public MessageDto updateMessage(@RequestBody @Valid MessageDto messageDto) { + return messageService.updateMessage(messageDto); + } + + @DeleteMapping("/{id}") + public MessageDto deleteMessage(@PathVariable Long id) { + return messageService.deleteMessage(id); + } +} \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/MessageDto.java b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/MessageDto.java new file mode 100644 index 0000000..ddb67cf --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/MessageDto.java @@ -0,0 +1,67 @@ +package com.example.app.dto; + +import com.example.app.model.Message; + +import java.sql.Date; + +import lombok.Data; + +@Data +public class MessageDto { + private Long id; + private String text; + private String status; + private Date date; + private Long userId; + + public MessageDto() { + } + + public MessageDto(Message message) { + this.id = message.getId(); + this.text = message.getText(); + this.status = message.getStatus(); + this.date = message.getDate(); + this.userId = message.getUserId(); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } +} diff --git a/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/MessageWithUserInfoDto.java b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/MessageWithUserInfoDto.java new file mode 100644 index 0000000..bf7fad4 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/MessageWithUserInfoDto.java @@ -0,0 +1,68 @@ +package com.example.app.dto; + +import com.example.app.model.Message; +import lombok.Data; + +import java.sql.Date; + +@Data +public class MessageWithUserInfoDto { + private Long id; + private String text; + private String status; + private Date date; + private Long userId; + private UserInfoDto userInfo; + + public MessageWithUserInfoDto() { + } + + public MessageWithUserInfoDto(Message message, UserInfoDto userInfo) { + this.id = message.getId(); + this.text = message.getText(); + this.status = message.getStatus(); + this.date = message.getDate(); + this.userId = message.getUserId(); + this.userInfo = userInfo; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } +} diff --git a/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/UserInfoDto.java b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/UserInfoDto.java new file mode 100644 index 0000000..56382d4 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/dto/UserInfoDto.java @@ -0,0 +1,43 @@ +package com.example.app.dto; + +import lombok.Data; + +@Data +public class UserInfoDto { + private Long id; + private String fullName; + private String phoneNumber; + private String role; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } +} diff --git a/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/model/Message.java b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/model/Message.java new file mode 100644 index 0000000..37d9295 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/model/Message.java @@ -0,0 +1,77 @@ +package com.example.app.model; + +import javax.persistence.*; +import java.sql.Date; + +@Entity +@Table(name="messages") +public class Message { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String text; + private String status; + private Date date; + private Long userId; + + public Message() { + } + + public Message(String text, String status, Date date, Long userId) { + this.text = text; + this.status = status; + this.date = date; + this.userId = userId; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + @Override + public String toString() { + return "Message{" + + "id=" + id + + ", text='" + text + '\'' + + ", status='" + status + '\'' + + ", date='" + date + '\'' + + ", userId='" + userId + '\'' + + '}'; + } +} diff --git a/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/repository/MessageRepository.java b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/repository/MessageRepository.java new file mode 100644 index 0000000..a32c181 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/repository/MessageRepository.java @@ -0,0 +1,7 @@ +package com.example.app.repository; + +import com.example.app.model.Message; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MessageRepository extends JpaRepository { +} diff --git a/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/service/MessageNotFoundException.java b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/service/MessageNotFoundException.java new file mode 100644 index 0000000..d81dbff --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/service/MessageNotFoundException.java @@ -0,0 +1,7 @@ +package com.example.app.service; + +public class MessageNotFoundException extends RuntimeException{ + public MessageNotFoundException(Long id) { + super(String.format("Message with id [%s] is not found", id)); + } +} \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/service/MessageService.java b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/service/MessageService.java new file mode 100644 index 0000000..841250e --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/java/com/example/app/service/MessageService.java @@ -0,0 +1,70 @@ +package com.example.app.service; + +import com.example.app.dto.*; +import com.example.app.model.Message; +import com.example.app.repository.MessageRepository; +import org.springframework.beans.factory.annotation.*; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.client.RestTemplate; + +import java.util.*; + +@Service +public class MessageService { + private final MessageRepository messageRepository; + private final RestTemplate restTemplate; + private final String URL = "http://user-service:8085/user/"; + + @Autowired + public MessageService(MessageRepository messageRepository, RestTemplate restTemplate) { + this.messageRepository = messageRepository; + this.restTemplate = restTemplate; + } + + @Transactional(readOnly = true) + public MessageWithUserInfoDto findMessage(Long id) { + final Message message = messageRepository.findById(id).orElse(null); + if (message == null) { + throw new MessageNotFoundException(id); + } + UserInfoDto userInfo = restTemplate.getForObject(URL + message.getUserId(), UserInfoDto.class); + return new MessageWithUserInfoDto(message, userInfo); + } + + @Transactional + public MessageDto addMessage(MessageDto messageDto) { + final Message message = new Message(messageDto.getText(), messageDto.getStatus(), messageDto.getDate(), messageDto.getUserId()); + messageRepository.save(message); + return new MessageDto(message); + } + + @Transactional(readOnly = true) + public Message findMessageWithoutUserInfo(Long id) { + final Optional message = messageRepository.findById(id); + return message.orElseThrow(() -> new MessageNotFoundException(id)); + } + + @Transactional(readOnly = true) + public List findAllMessages() { + return messageRepository.findAll(); + } + + @Transactional + public MessageDto updateMessage(MessageDto messageDto) { + final Message message = findMessageWithoutUserInfo(messageDto.getId()); + message.setText(messageDto.getText()); + message.setStatus(messageDto.getStatus()); + message.setDate(messageDto.getDate()); + message.setUserId(messageDto.getUserId()); + messageRepository.save(message); + return new MessageDto(message); + } + + @Transactional + public MessageDto deleteMessage(Long id) { + final Message message = findMessageWithoutUserInfo(id); + messageRepository.delete(message); + return new MessageDto(message); + } +} diff --git a/podkorytova_yulia_lab_3/message-service/src/main/resources/application.properties b/podkorytova_yulia_lab_3/message-service/src/main/resources/application.properties new file mode 100644 index 0000000..db3df82 --- /dev/null +++ b/podkorytova_yulia_lab_3/message-service/src/main/resources/application.properties @@ -0,0 +1,11 @@ +spring.main.banner-mode=off +server.port=8086 +spring.datasource.url=jdbc:h2:file:./data +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password=password +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.hibernate.ddl-auto=update +spring.h2.console.enabled=true +spring.h2.console.settings.trace=false +spring.h2.console.settings.web-allow-others=false diff --git a/podkorytova_yulia_lab_3/nginx-conf/nginx.conf b/podkorytova_yulia_lab_3/nginx-conf/nginx.conf new file mode 100644 index 0000000..4cd9e27 --- /dev/null +++ b/podkorytova_yulia_lab_3/nginx-conf/nginx.conf @@ -0,0 +1,21 @@ +server { + listen 80; + listen [::]:80; + server_name localhost; + + location /user-service/ { + proxy_pass http://user-service:8085/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /user-service; + } + + location /message-service/ { + proxy_pass http://message-service:8086/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /message-service; + } +} \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/user-service/.gitignore b/podkorytova_yulia_lab_3/user-service/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/.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/podkorytova_yulia_lab_3/user-service/Dockerfile b/podkorytova_yulia_lab_3/user-service/Dockerfile new file mode 100644 index 0000000..67a0bcb --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:17 +RUN mkdir -p /usr/src/app/ +WORKDIR /usr/src/app/ +COPY . /usr/src/app/ +RUN ./gradlew clean build +EXPOSE 8085 +ENTRYPOINT ["java","-jar","build/libs/user-service-1.0-SNAPSHOT.jar"] \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/user-service/build.gradle b/podkorytova_yulia_lab_3/user-service/build.gradle new file mode 100644 index 0000000..878cd21 --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/build.gradle @@ -0,0 +1,40 @@ +plugins { + id 'org.springframework.boot' version '2.6.3' + id 'io.spring.dependency-management' version '1.0.11.RELEASE' + id 'java' +} + +group 'com.example' +version '1.0-SNAPSHOT' +sourceCompatibility = '17' + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.springframework.boot:spring-boot-devtools' + implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' + + implementation 'org.webjars:bootstrap:5.1.3' + implementation 'org.webjars:jquery:3.6.0' + implementation 'org.webjars:font-awesome:6.1.0' + + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'com.h2database:h2:2.1.210' + + implementation 'org.hibernate.validator:hibernate-validator' + + implementation 'org.springdoc:springdoc-openapi-ui:1.6.5' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +tasks.named('test') { + useJUnitPlatform() +} \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/user-service/gradlew b/podkorytova_yulia_lab_3/user-service/gradlew new file mode 100644 index 0000000..744e882 --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or 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 UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# 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"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# 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" + which java >/dev/null 2>&1 || 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 + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/podkorytova_yulia_lab_3/user-service/gradlew.bat b/podkorytova_yulia_lab_3/user-service/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/gradlew.bat @@ -0,0 +1,89 @@ +@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=. +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%" == "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%"=="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! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/podkorytova_yulia_lab_3/user-service/settings.gradle b/podkorytova_yulia_lab_3/user-service/settings.gradle new file mode 100644 index 0000000..4469b17 --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'user-service' \ No newline at end of file diff --git a/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/UserApp.java b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/UserApp.java new file mode 100644 index 0000000..337674b --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/UserApp.java @@ -0,0 +1,11 @@ +package com.example.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class UserApp { + public static void main(String[] args) { + SpringApplication.run(UserApp.class, args); + } +} diff --git a/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/controller/UserController.java b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/controller/UserController.java new file mode 100644 index 0000000..78ab0c2 --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/controller/UserController.java @@ -0,0 +1,46 @@ +package com.example.app.controller; + +import com.example.app.dto.UserDto; +import com.example.app.service.UserService; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.*; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/user") +public class UserController { + private final UserService userService; + + public UserController(UserService userService) { + this.userService = userService; + } + + @GetMapping("/") + public List getUsers() { + return userService.findAllUsers().stream() + .map(UserDto::new) + .collect(Collectors.toList()); + } + + @GetMapping("/{id}") + public UserDto getUser(@PathVariable Long id) { + return new UserDto(userService.findUser(id)); + } + + @PostMapping("/") + public UserDto createUser(@RequestBody @Valid UserDto userDto) { + return new UserDto(userService.addUser(userDto)); + } + + @PutMapping("/{id}") + public UserDto updateUser(@RequestBody @Valid UserDto userDto) { + return new UserDto(userService.updateUser(userDto)); + } + + @DeleteMapping("/{id}") + public UserDto deleteUser(@PathVariable Long id) { + return new UserDto(userService.deleteUser(id)); + } +} diff --git a/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/dto/UserDto.java b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/dto/UserDto.java new file mode 100644 index 0000000..c42d19d --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/dto/UserDto.java @@ -0,0 +1,54 @@ +package com.example.app.dto; + +import com.example.app.model.User; +import lombok.Data; + +@Data +public class UserDto { + private Long id; + private String fullName; + private String phoneNumber; + private String role; + + public UserDto() { + } + + public UserDto(User user) { + this.id = user.getId(); + this.fullName = user.getFullName(); + this.phoneNumber = user.getPhoneNumber(); + this.role = user.getRole(); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } +} diff --git a/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/model/User.java b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/model/User.java new file mode 100644 index 0000000..fbfc9c3 --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/model/User.java @@ -0,0 +1,65 @@ +package com.example.app.model; + +import javax.persistence.*; + +@Entity +@Table(name="users") +public class User { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String fullName; + private String phoneNumber; + private String role; + + public User() { + } + + public User(String fullName, String phoneNumber, String role) { + this.fullName = fullName; + this.phoneNumber = phoneNumber; + this.role = role; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", fullName='" + fullName + '\'' + + ", phoneNumber='" + phoneNumber + '\'' + + ", role='" + role + '\'' + + '}'; + } +} diff --git a/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/repository/UserRepository.java b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/repository/UserRepository.java new file mode 100644 index 0000000..c680c7e --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/repository/UserRepository.java @@ -0,0 +1,7 @@ +package com.example.app.repository; + +import com.example.app.model.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { +} diff --git a/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/service/UserNotFoundException.java b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/service/UserNotFoundException.java new file mode 100644 index 0000000..67e97d2 --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/service/UserNotFoundException.java @@ -0,0 +1,7 @@ +package com.example.app.service; + +public class UserNotFoundException extends RuntimeException { + public UserNotFoundException(Long id) { + super(String.format("User with id [%s] is not found", id)); + } +} diff --git a/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/service/UserService.java b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/service/UserService.java new file mode 100644 index 0000000..ba595eb --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/src/main/java/com/example/app/service/UserService.java @@ -0,0 +1,51 @@ +package com.example.app.service; + +import com.example.app.dto.UserDto; +import com.example.app.model.User; +import com.example.app.repository.UserRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +@Service +public class UserService { + private final UserRepository userRepository; + + public UserService(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @Transactional + public User addUser(UserDto userDto) { + final User user = new User(userDto.getFullName(), userDto.getPhoneNumber(), userDto.getRole()); + return userRepository.save(user); + } + + @Transactional(readOnly = true) + public User findUser(Long id) { + final Optional user = userRepository.findById(id); + return user.orElseThrow(() -> new UserNotFoundException(id)); + } + + @Transactional(readOnly = true) + public List findAllUsers() { + return userRepository.findAll(); + } + + @Transactional + public User updateUser(UserDto userDto) { + final User currentUser = findUser(userDto.getId()); + currentUser.setFullName(userDto.getFullName()); + currentUser.setPhoneNumber(userDto.getPhoneNumber()); + currentUser.setRole(userDto.getRole()); + return userRepository.save(currentUser); + } + + @Transactional + public User deleteUser(Long id) { + final User currentUser = findUser(id); + userRepository.delete(currentUser); + return currentUser; + } +} diff --git a/podkorytova_yulia_lab_3/user-service/src/main/resources/application.properties b/podkorytova_yulia_lab_3/user-service/src/main/resources/application.properties new file mode 100644 index 0000000..3ddc14e --- /dev/null +++ b/podkorytova_yulia_lab_3/user-service/src/main/resources/application.properties @@ -0,0 +1,11 @@ +spring.main.banner-mode=off +server.port=8085 +spring.datasource.url=jdbc:h2:file:./data +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password=password +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.hibernate.ddl-auto=update +spring.h2.console.enabled=true +spring.h2.console.settings.trace=false +spring.h2.console.settings.web-allow-others=false