From 75ad4b3493aacaeb5a1bec9591aa6cb5a7649604 Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 13:13:25 -0300 Subject: [PATCH 01/14] feat: first version --- .idea/.gitignore | 3 + .idea/compiler.xml | 19 ++ .idea/encodings.xml | 6 + .idea/jarRepositories.xml | 25 ++ .idea/misc.xml | 15 + .idea/service-order.iml | 9 + .idea/sqldialects.xml | 6 + .idea/uiDesigner.xml | 124 +++++++ .idea/vcs.xml | 6 + compose-dev.yml | 11 + compose.yaml | 9 + mvnw | 308 ++++++++++++++++++ mvnw.cmd | 205 ++++++++++++ pom.xml | 188 +++++++++++ .../serviceorder/ServiceOrderApplication.java | 15 + .../serviceorder/adapter/OrderAdapter.java | 44 +++ .../serviceorder/adapter/ProductAdapter.java | 18 + .../controller/order/OrderAPIController.java | 68 ++++ .../order/dto/CreateOrderRequestDTO.java | 26 ++ .../product/ProductAPIController.java | 80 +++++ .../controller/OrderController.java | 49 +++ .../controller/ProductController.java | 55 ++++ .../controller/dto/OrderControllerDTO.java | 23 ++ .../dto/OrderItemControllerDTO.java | 19 ++ .../controller/dto/ProductControllerDTO.java | 23 ++ .../serviceorder/entity/order/Order.java | 37 +++ .../serviceorder/entity/order/OrderItem.java | 29 ++ .../serviceorder/entity/product/Category.java | 27 ++ .../serviceorder/entity/product/Product.java | 30 ++ .../IIdentificationGateway.java | 17 + .../gateway/identification/dto/ClientDTO.java | 16 + .../gateway/order/IOrderGateway.java | 14 + .../gateway/order/OrderJpaAdapter.java | 41 +++ .../gateway/order/OrderJpaRepository.java | 10 + .../entity/OrderItemPersistenceEntity.java | 54 +++ .../order/entity/OrderPersistenceEntity.java | 60 ++++ .../gateway/product/IProductGateway.java | 17 + .../gateway/product/ProductJpaAdapter.java | 47 +++ .../gateway/product/ProductJpaRepository.java | 13 + .../entity/CategoryPersistenceEntity.java | 38 +++ .../entity/ProductPersistenceEntity.java | 49 +++ .../presenter/OrderPresenter.java | 30 ++ .../presenter/ProductPresenter.java | 19 ++ .../usecase/order/IOrderUseCase.java | 21 ++ .../usecase/order/OrderUseCase.java | 67 ++++ .../usecase/product/IProductUseCase.java | 24 ++ .../usecase/product/ProductUseCase.java | 52 +++ src/main/resources/application-dev.yml | 28 ++ src/main/resources/application-prod.yml | 8 + src/main/resources/application.yml | 45 +++ src/main/resources/banner.txt | 14 + .../postgresql/V01__create-tables.sql | 44 +++ .../postgresql/V02__insert-fixed-data.sql | 4 + .../postgresql/V03__insert-example-data.sql | 27 ++ src/main/resources/messages_pt_BR.properties | 0 .../ServiceOrderApplicationTests.java | 13 + target/classes/application-dev.yml | 28 ++ target/classes/application-prod.yml | 8 + target/classes/application.yml | 45 +++ target/classes/banner.txt | 14 + .../ServiceOrderApplication.class | Bin 0 -> 842 bytes .../serviceorder/adapter/OrderAdapter.class | Bin 0 -> 4545 bytes .../serviceorder/adapter/ProductAdapter.class | Bin 0 -> 1311 bytes .../controller/order/OrderAPIController.class | Bin 0 -> 4770 bytes .../dto/CreateOrderRequestDTO$Item.class | Bin 0 -> 1089 bytes .../order/dto/CreateOrderRequestDTO.class | Bin 0 -> 1317 bytes .../product/ProductAPIController.class | Bin 0 -> 5760 bytes .../controller/OrderController.class | Bin 0 -> 4004 bytes .../controller/ProductController.class | Bin 0 -> 4740 bytes .../controller/dto/OrderControllerDTO.class | Bin 0 -> 2232 bytes .../dto/OrderItemControllerDTO.class | Bin 0 -> 1360 bytes .../controller/dto/ProductControllerDTO.class | Bin 0 -> 1409 bytes .../serviceorder/entity/order/Order.class | Bin 0 -> 4290 bytes .../serviceorder/entity/order/OrderItem.class | Bin 0 -> 2318 bytes .../entity/product/Category.class | Bin 0 -> 1095 bytes .../serviceorder/entity/product/Product.class | Bin 0 -> 1978 bytes .../IIdentificationGateway.class | Bin 0 -> 842 bytes .../identification/dto/ClientDTO.class | Bin 0 -> 713 bytes .../gateway/order/IOrderGateway.class | Bin 0 -> 1034 bytes .../gateway/order/OrderJpaAdapter.class | Bin 0 -> 3095 bytes .../gateway/order/OrderJpaRepository.class | Bin 0 -> 716 bytes .../entity/OrderItemPersistenceEntity.class | Bin 0 -> 4009 bytes .../order/entity/OrderPersistenceEntity.class | Bin 0 -> 5335 bytes .../gateway/product/IProductGateway.class | Bin 0 -> 1277 bytes .../gateway/product/ProductJpaAdapter.class | Bin 0 -> 3436 bytes .../product/ProductJpaRepository.class | Bin 0 -> 899 bytes .../entity/CategoryPersistenceEntity.class | Bin 0 -> 1709 bytes .../entity/ProductPersistenceEntity.class | Bin 0 -> 3525 bytes .../presenter/OrderPresenter.class | Bin 0 -> 2853 bytes .../presenter/ProductPresenter.class | Bin 0 -> 1331 bytes .../usecase/order/IOrderUseCase.class | Bin 0 -> 960 bytes .../usecase/order/OrderUseCase.class | Bin 0 -> 4393 bytes .../usecase/product/IProductUseCase.class | Bin 0 -> 1517 bytes .../usecase/product/ProductUseCase.class | Bin 0 -> 3571 bytes .../postgresql/V01__create-tables.sql | 44 +++ .../postgresql/V02__insert-fixed-data.sql | 4 + .../postgresql/V03__insert-example-data.sql | 27 ++ target/classes/messages_pt_BR.properties | 0 .../ServiceOrderApplicationTests.class | Bin 0 -> 577 bytes 99 files changed, 2419 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/service-order.iml create mode 100644 .idea/sqldialects.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 compose-dev.yml create mode 100644 compose.yaml create mode 100755 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/br/com/grupo63/serviceorder/ServiceOrderApplication.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/adapter/OrderAdapter.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/adapter/ProductAdapter.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/controller/OrderController.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/controller/ProductController.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/entity/order/Order.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/entity/order/OrderItem.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/entity/product/Category.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/entity/product/Product.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/order/IOrderGateway.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/order/OrderJpaRepository.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/product/IProductGateway.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/product/entity/CategoryPersistenceEntity.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/presenter/OrderPresenter.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/presenter/ProductPresenter.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.java create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-prod.yml create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/banner.txt create mode 100644 src/main/resources/db/migrations/postgresql/V01__create-tables.sql create mode 100644 src/main/resources/db/migrations/postgresql/V02__insert-fixed-data.sql create mode 100644 src/main/resources/db/migrations/postgresql/V03__insert-example-data.sql create mode 100644 src/main/resources/messages_pt_BR.properties create mode 100644 src/test/java/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.java create mode 100644 target/classes/application-dev.yml create mode 100644 target/classes/application-prod.yml create mode 100644 target/classes/application.yml create mode 100644 target/classes/banner.txt create mode 100644 target/classes/br/com/grupo63/serviceorder/ServiceOrderApplication.class create mode 100644 target/classes/br/com/grupo63/serviceorder/adapter/OrderAdapter.class create mode 100644 target/classes/br/com/grupo63/serviceorder/adapter/ProductAdapter.class create mode 100644 target/classes/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.class create mode 100644 target/classes/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO$Item.class create mode 100644 target/classes/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO.class create mode 100644 target/classes/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.class create mode 100644 target/classes/br/com/grupo63/serviceorder/controller/OrderController.class create mode 100644 target/classes/br/com/grupo63/serviceorder/controller/ProductController.class create mode 100644 target/classes/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.class create mode 100644 target/classes/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.class create mode 100644 target/classes/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.class create mode 100644 target/classes/br/com/grupo63/serviceorder/entity/order/Order.class create mode 100644 target/classes/br/com/grupo63/serviceorder/entity/order/OrderItem.class create mode 100644 target/classes/br/com/grupo63/serviceorder/entity/product/Category.class create mode 100644 target/classes/br/com/grupo63/serviceorder/entity/product/Product.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/IOrderGateway.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/OrderJpaRepository.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/IProductGateway.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/entity/CategoryPersistenceEntity.class create mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.class create mode 100644 target/classes/br/com/grupo63/serviceorder/presenter/OrderPresenter.class create mode 100644 target/classes/br/com/grupo63/serviceorder/presenter/ProductPresenter.class create mode 100644 target/classes/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.class create mode 100644 target/classes/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.class create mode 100644 target/classes/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.class create mode 100644 target/classes/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.class create mode 100644 target/classes/db/migrations/postgresql/V01__create-tables.sql create mode 100644 target/classes/db/migrations/postgresql/V02__insert-fixed-data.sql create mode 100644 target/classes/db/migrations/postgresql/V03__insert-example-data.sql create mode 100644 target/classes/messages_pt_BR.properties create mode 100644 target/test-classes/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.class diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..1fdac48 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..63e9001 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..947ef88 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a1f7a88 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/service-order.iml b/.idea/service-order.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/service-order.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 0000000..fbbd563 --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/compose-dev.yml b/compose-dev.yml new file mode 100644 index 0000000..c347dc4 --- /dev/null +++ b/compose-dev.yml @@ -0,0 +1,11 @@ +# This compose file is for development only! +name: soat-tech-challenge-service-payment +services: + db: + image: "postgres:15.4" + environment: + - "POSTGRES_DB=backend" + - "POSTGRES_PASSWORD=backend" + - "POSTGRES_USER=backend" + ports: + - 5432:5432 diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..7c8044f --- /dev/null +++ b/compose.yaml @@ -0,0 +1,9 @@ +services: + postgres: + image: 'postgres:latest' + environment: + - 'POSTGRES_DB=mydatabase' + - 'POSTGRES_PASSWORD=secret' + - 'POSTGRES_USER=myuser' + ports: + - '5432' diff --git a/mvnw b/mvnw new file mode 100755 index 0000000..66df285 --- /dev/null +++ b/mvnw @@ -0,0 +1,308 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + 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 + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..95ba6f5 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,205 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. 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, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..cf66896 --- /dev/null +++ b/pom.xml @@ -0,0 +1,188 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.2 + + + br.com.grupo63 + serviceorder + 4.0.0 + Service Order + FIAP SOAT1 2023 - Group 63 - Phase 4 + + 17 + + + + jitpack.io + https://jitpack.io + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.session + spring-session-core + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.springframework.boot + spring-boot-docker-compose + runtime + true + + + org.projectlombok + lombok + true + + + io.jsonwebtoken + jjwt-api + 0.12.3 + + + io.jsonwebtoken + jjwt-impl + 0.12.3 + + + io.jsonwebtoken + jjwt-jackson + 0.12.3 + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.flywaydb + flyway-core + + + com.github.soat-tech-challenge + service-common + 4.1.0 + + + org.postgresql + postgresql + runtime + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.1.0 + + + + org.springframework.cloud + spring-cloud-starter-openfeign + 4.1.0 + + + org.springframework.boot + spring-boot-starter-test + test + + + + + app + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + + src/main/resources + true + + + + + + dev + + true + + + dev + + + + prod + + prod + + + + coverage + + + + org.jacoco + jacoco-maven-plugin + 0.8.11 + + + prepare-agent + + prepare-agent + + + + report + + report + + + + XML + + + + + + + + + + diff --git a/src/main/java/br/com/grupo63/serviceorder/ServiceOrderApplication.java b/src/main/java/br/com/grupo63/serviceorder/ServiceOrderApplication.java new file mode 100644 index 0000000..fe8b3fe --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/ServiceOrderApplication.java @@ -0,0 +1,15 @@ +package br.com.grupo63.serviceorder; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication +@EnableFeignClients +public class ServiceOrderApplication { + + public static void main(String[] args) { + SpringApplication.run(ServiceOrderApplication.class, args); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/adapter/OrderAdapter.java b/src/main/java/br/com/grupo63/serviceorder/adapter/OrderAdapter.java new file mode 100644 index 0000000..fa97c67 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/adapter/OrderAdapter.java @@ -0,0 +1,44 @@ +package br.com.grupo63.serviceorder.adapter; + +import br.com.grupo63.serviceorder.api.controller.order.dto.CreateOrderRequestDTO; +import br.com.grupo63.serviceorder.controller.dto.OrderControllerDTO; +import br.com.grupo63.serviceorder.controller.dto.OrderItemControllerDTO; +import br.com.grupo63.serviceorder.entity.order.Order; +import br.com.grupo63.serviceorder.entity.order.OrderItem; +import br.com.grupo63.serviceorder.entity.product.Product; + +import java.util.stream.Collectors; + +public class OrderAdapter { + + public static void fillEntity(CreateOrderRequestDTO dto, Long clientId, Order order) { + OrderControllerDTO orderDTO = new OrderControllerDTO(); + orderDTO.setClientId(clientId); + + if (dto.getItems() != null) { + orderDTO.setItems(dto.getItems().stream() + .map(i -> new OrderItemControllerDTO(i.getQuantity(), null, i.getId())) + .collect(Collectors.toList())); + } + + fillEntity(orderDTO, order); + } + + public static void fillEntity(OrderControllerDTO dto, Order entity) { + entity.setTotalPrice(dto.getTotalPrice()); + entity.setItems(dto.getItems().stream().map(item -> { + OrderItem orderItem = entity.getByProductId(item.getProductId()); + + orderItem.setQuantity(item.getQuantity()); + orderItem.setPrice(item.getPrice()); + if (orderItem.getProduct() == null) + orderItem.setProduct(new Product(item.getProductId())); + + return orderItem; + }).toList()); + + entity.setClientId(dto.getClientId()); + entity.setPaymentId(dto.getPaymentId()); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/adapter/ProductAdapter.java b/src/main/java/br/com/grupo63/serviceorder/adapter/ProductAdapter.java new file mode 100644 index 0000000..f22aa3e --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/adapter/ProductAdapter.java @@ -0,0 +1,18 @@ +package br.com.grupo63.serviceorder.adapter; + +import br.com.grupo63.serviceorder.controller.dto.ProductControllerDTO; +import br.com.grupo63.serviceorder.entity.product.Category; +import br.com.grupo63.serviceorder.entity.product.Product; + +public class ProductAdapter { + + public static void fillEntity(ProductControllerDTO dto, Product entity) { + entity.setName(dto.getName()); + entity.setPrice(dto.getPrice()); + + if (dto.getCategory() != null) { + entity.setCategory(new Category(dto.getCategory())); + } + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.java b/src/main/java/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.java new file mode 100644 index 0000000..231bc03 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.java @@ -0,0 +1,68 @@ +package br.com.grupo63.serviceorder.api.controller.order; + +import br.com.grupo63.serviceorder.api.controller.order.dto.CreateOrderRequestDTO; +import br.com.grupo63.serviceorder.controller.OrderController; +import br.com.grupo63.serviceorder.controller.dto.OrderControllerDTO; +import br.com.grupo63.techchallenge.common.api.controller.AbstractAPIController; +import br.com.grupo63.techchallenge.common.api.controller.dto.DefaultResponseDTO; +import br.com.grupo63.techchallenge.common.exception.NotFoundException; +import br.com.grupo63.techchallenge.common.exception.ValidationException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Tag(name = "Pedidos", description = "Gerencia o processo de pedidos.") +@RequiredArgsConstructor +@RestController +@RequestMapping("/orders") +public class OrderAPIController extends AbstractAPIController { + + private final OrderController controller; + + @Operation( + tags = "2ª chamada - Fluxo principal - Pedido", + summary = "Fake checkout: Tela de resumo do pedido", + description = "Registra um pedido a ser realizado, retorna o valor total", + security = @SecurityRequirement(name = "bearerAuth")) + @PostMapping + public ResponseEntity create(@Valid @RequestBody CreateOrderRequestDTO createOrderRequestDTO, + HttpServletRequest request) throws ValidationException, NotFoundException { + return ResponseEntity.ok(controller + .create(Long.parseLong((String) request.getAttribute("clientId")), + createOrderRequestDTO)); + } + + @Operation( + tags = {"3ª chamada - Fluxo principal - Pagamento", "5ª chamada - Fluxo principal - Acompanhamento e entrega"}, + summary = "Recupera pedido", + description = "Exibe os dados de um pedido a partir de seu id") + @GetMapping("/{id}") + public ResponseEntity read(@PathVariable("id") Long id) throws NotFoundException { + return ResponseEntity.ok(controller.read(id)); + } + + @Operation( + summary = "Listar pedidos", + description = "Lista todos os pedidos") + @GetMapping + public ResponseEntity> list() { + return ResponseEntity.ok(controller.list()); + } + + @Operation( + summary = "Excluir pedido", + description = "Exclui um pedido por id") + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable("id") Long id) throws NotFoundException { + controller.delete(id); + return ResponseEntity.ok().build(); + } + +} \ No newline at end of file diff --git a/src/main/java/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO.java b/src/main/java/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO.java new file mode 100644 index 0000000..40a321b --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO.java @@ -0,0 +1,26 @@ +package br.com.grupo63.serviceorder.api.controller.order.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class CreateOrderRequestDTO { + + @Setter + @Getter + @AllArgsConstructor + public static class Item { + private Long id; + private Long quantity; + } + + private List items; + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.java b/src/main/java/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.java new file mode 100644 index 0000000..82dc7d8 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.java @@ -0,0 +1,80 @@ +package br.com.grupo63.serviceorder.api.controller.product; + +import br.com.grupo63.serviceorder.controller.ProductController; +import br.com.grupo63.serviceorder.controller.dto.ProductControllerDTO; +import br.com.grupo63.techchallenge.common.api.controller.AbstractAPIController; +import br.com.grupo63.techchallenge.common.api.controller.dto.DefaultResponseDTO; +import br.com.grupo63.techchallenge.common.exception.NotFoundException; +import br.com.grupo63.techchallenge.common.exception.ValidationException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Tag(name = "Produtos", description = "CRUD de produtos para gerenciamento e exibição ao cliente") +@RequiredArgsConstructor +@RestController +@RequestMapping("/products") +public class ProductAPIController extends AbstractAPIController { + + private final ProductController controller; + + @Operation( + tags = "2ª chamada - Fluxo principal - Pedido", + summary = "Listar produtos por categoria", + description = "Lista todos os produtos por nome da categoria") + @GetMapping("/by-category") + public ResponseEntity> listByCategoryName( + @Schema(allowableValues = {"Lanche", "Acompanhamento", "Bebida", "Sobremesa"}) + @RequestParam(value = "categoria") String categoryName) { + return ResponseEntity.ok(controller.listByCategoryName(categoryName)); + } + + @Operation( + summary = "Criar um produto", + description = "Cria um produto com nome, preço, estoque inicial e categoria. Possíveis categorias (IDs): " + + "1 - Lanche, 2 - Acompanhamento, 3 - Bebida, 4 - Sobremesa") + @PostMapping + public ResponseEntity create(@Valid @RequestBody ProductControllerDTO dto) throws ValidationException { + return ResponseEntity.ok(controller.create(dto)); + } + + @Operation( + summary = "Recuperar produto", + description = "Exibe os dados de um produto a partir de seu id") + @GetMapping("/{id}") + public ResponseEntity read(@PathVariable("id") Long id) throws NotFoundException { + return ResponseEntity.ok(controller.read(id)); + } + + @Operation( + summary = "Listar produtos", + description = "Lista todos os produtos") + @GetMapping + public ResponseEntity> list() { + return ResponseEntity.ok(controller.list()); + } + + @Operation( + summary = "Atualizar produto", + description = "Atualiza um produto por id com os dados enviados") + @PutMapping("/{id}") + public ResponseEntity update(@Valid @RequestBody ProductControllerDTO dto, @PathVariable("id") Long id) throws ValidationException, NotFoundException { + return ResponseEntity.ok(controller.update(dto, id)); + } + + @Operation( + summary = "Excluir produto", + description = "Exclui um produto por id") + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable("id") Long id) throws NotFoundException, NotFoundException { + controller.delete(id); + return ResponseEntity.ok().build(); + } + +} \ No newline at end of file diff --git a/src/main/java/br/com/grupo63/serviceorder/controller/OrderController.java b/src/main/java/br/com/grupo63/serviceorder/controller/OrderController.java new file mode 100644 index 0000000..c4f8862 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/controller/OrderController.java @@ -0,0 +1,49 @@ +package br.com.grupo63.serviceorder.controller; + +import br.com.grupo63.serviceorder.adapter.OrderAdapter; +import br.com.grupo63.serviceorder.api.controller.order.dto.CreateOrderRequestDTO; +import br.com.grupo63.serviceorder.controller.dto.OrderControllerDTO; +import br.com.grupo63.serviceorder.entity.order.Order; +import br.com.grupo63.serviceorder.presenter.OrderPresenter; +import br.com.grupo63.serviceorder.usecase.order.OrderUseCase; +import br.com.grupo63.techchallenge.common.exception.NotFoundException; +import br.com.grupo63.techchallenge.common.exception.ValidationException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@RequiredArgsConstructor +@Service +public class OrderController { + + private final OrderUseCase orderUseCase; + + public OrderControllerDTO create(Long clientId, CreateOrderRequestDTO dto) throws ValidationException, NotFoundException { + Order entity = new Order(); + OrderAdapter.fillEntity(dto, clientId, entity); + entity = orderUseCase.create(entity, clientId); + return OrderPresenter.toDto(entity); + } + + public OrderControllerDTO read(Long orderId) throws NotFoundException { + return OrderPresenter.toDto(orderUseCase.read(orderId)); + } + + public List list() { + return orderUseCase.list().stream().map(OrderPresenter::toDto).toList(); + } + + public OrderControllerDTO update(OrderControllerDTO dto, Long orderId) throws ValidationException, NotFoundException { + Order entity = orderUseCase.read(orderId); + OrderAdapter.fillEntity(dto, entity); + entity = orderUseCase.update(entity); + return OrderPresenter.toDto(entity); + } + + public void delete(Long orderId) throws NotFoundException { + Order entity = orderUseCase.read(orderId); + orderUseCase.delete(entity); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/controller/ProductController.java b/src/main/java/br/com/grupo63/serviceorder/controller/ProductController.java new file mode 100644 index 0000000..a7c6f25 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/controller/ProductController.java @@ -0,0 +1,55 @@ +package br.com.grupo63.serviceorder.controller; + +import br.com.grupo63.serviceorder.adapter.ProductAdapter; +import br.com.grupo63.serviceorder.controller.dto.ProductControllerDTO; +import br.com.grupo63.serviceorder.entity.product.Product; +import br.com.grupo63.serviceorder.gateway.product.IProductGateway; +import br.com.grupo63.serviceorder.presenter.ProductPresenter; +import br.com.grupo63.serviceorder.usecase.product.ProductUseCase; +import br.com.grupo63.techchallenge.common.exception.NotFoundException; +import br.com.grupo63.techchallenge.common.exception.ValidationException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@RequiredArgsConstructor +@Service +public class ProductController { + + private final ProductUseCase useCase; + private final IProductGateway gateway; + + public ProductControllerDTO create(ProductControllerDTO productControllerDTO) throws ValidationException { + Product product = new Product(); + ProductAdapter.fillEntity(productControllerDTO, product); + product = useCase.create(product, gateway); + return ProductPresenter.toDto(product); + } + + public ProductControllerDTO read(Long id) throws NotFoundException { + return ProductPresenter.toDto(useCase.read(id, gateway)); + } + + public List list() { + return useCase.list(gateway).stream().map(ProductPresenter::toDto).toList(); + } + + public ProductControllerDTO update(ProductControllerDTO productControllerDTO, Long id) throws ValidationException, NotFoundException { + Product entity = useCase.read(id, gateway); + ProductAdapter.fillEntity(productControllerDTO, entity); + entity = useCase.update(entity, gateway); + return ProductPresenter.toDto(entity); + } + + public void delete(Long id) throws NotFoundException { + Product entity = useCase.read(id, gateway); + useCase.delete(entity, gateway); + } + + public List listByCategoryName(String categoryName) { + List entities = useCase.listByCategoryName(categoryName, gateway); + return entities.stream().map(ProductPresenter::toDto).toList(); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.java b/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.java new file mode 100644 index 0000000..cde0f9e --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.java @@ -0,0 +1,23 @@ +package br.com.grupo63.serviceorder.controller.dto; + +import br.com.grupo63.techchallenge.common.controller.dto.AbstractControllerDTO; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class OrderControllerDTO extends AbstractControllerDTO { + + private Double totalPrice; + private Long clientId; + private List items = new ArrayList<>(); + private Long paymentId; + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.java b/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.java new file mode 100644 index 0000000..7a87c12 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.java @@ -0,0 +1,19 @@ +package br.com.grupo63.serviceorder.controller.dto; + +import br.com.grupo63.techchallenge.common.controller.dto.AbstractControllerDTO; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class OrderItemControllerDTO extends AbstractControllerDTO { + + private Long quantity; + private Double price; + private Long productId; + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.java b/src/main/java/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.java new file mode 100644 index 0000000..d6767ab --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.java @@ -0,0 +1,23 @@ +package br.com.grupo63.serviceorder.controller.dto; + +import br.com.grupo63.techchallenge.common.controller.dto.AbstractControllerDTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter + +public class ProductControllerDTO extends AbstractControllerDTO { + + private String name; + + private Double price; + + private Long category; + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/entity/order/Order.java b/src/main/java/br/com/grupo63/serviceorder/entity/order/Order.java new file mode 100644 index 0000000..8db9e0d --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/entity/order/Order.java @@ -0,0 +1,37 @@ +package br.com.grupo63.serviceorder.entity.order; + +import br.com.grupo63.techchallenge.common.domain.Entity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class Order extends Entity { + + private Double totalPrice; + private Long clientId; + private List items = new ArrayList<>(); + private Long paymentId; + + public Order(Long id, boolean deleted, Double totalPrice, Long clientId, List items, Long paymentId) { + super(id, deleted); + this.totalPrice = totalPrice; + this.clientId = clientId; + this.items = items; + this.paymentId = paymentId; + } + + public OrderItem getByProductId(Long id) { + List selectedItems = this.items.stream().filter(item -> item.getProduct().getId().equals(id)).toList(); + + return selectedItems.isEmpty() ? new OrderItem() : selectedItems.get(0); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/entity/order/OrderItem.java b/src/main/java/br/com/grupo63/serviceorder/entity/order/OrderItem.java new file mode 100644 index 0000000..23725d5 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/entity/order/OrderItem.java @@ -0,0 +1,29 @@ +package br.com.grupo63.serviceorder.entity.order; + +import br.com.grupo63.serviceorder.entity.product.Product; +import br.com.grupo63.techchallenge.common.domain.Entity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class OrderItem extends Entity { + + private Long quantity; + private Double price; + private Order order; + private Product product; + + public OrderItem(Long id, boolean deleted, Long quantity, Double price, Order order, Product product) { + super(id, deleted); + this.quantity = quantity; + this.price = price; + this.order = order; + this.product = product; + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/entity/product/Category.java b/src/main/java/br/com/grupo63/serviceorder/entity/product/Category.java new file mode 100644 index 0000000..330acad --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/entity/product/Category.java @@ -0,0 +1,27 @@ +package br.com.grupo63.serviceorder.entity.product; + +import br.com.grupo63.techchallenge.common.domain.Entity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter + +public class Category extends Entity { + + private String name; + + public Category(Long id, boolean deleted, String name) { + super(id, deleted); + this.name = name; + } + + public Category(Long id) { + this.id = id; + } + +} \ No newline at end of file diff --git a/src/main/java/br/com/grupo63/serviceorder/entity/product/Product.java b/src/main/java/br/com/grupo63/serviceorder/entity/product/Product.java new file mode 100644 index 0000000..ed2133f --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/entity/product/Product.java @@ -0,0 +1,30 @@ +package br.com.grupo63.serviceorder.entity.product; + +import br.com.grupo63.techchallenge.common.domain.Entity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class Product extends Entity { + + private String name; + private Double price; + private Category category; + + public Product(Long id) { + this.id = id; + } + + public Product(Long id, boolean deleted, String name, Double price, Category category) { + super(id, deleted); + this.name = name; + this.price = price; + this.category = category; + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.java b/src/main/java/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.java new file mode 100644 index 0000000..084c77c --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.java @@ -0,0 +1,17 @@ +package br.com.grupo63.serviceorder.gateway.identification; + +import br.com.grupo63.serviceorder.gateway.identification.dto.ClientDTO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import java.util.Optional; + +@FeignClient(name = "identification", url = "/clients") +public interface IIdentificationGateway { + + @RequestMapping(method = RequestMethod.GET, value = "/{id}") + Optional getById(@PathVariable("id") Long orderId); + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.java b/src/main/java/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.java new file mode 100644 index 0000000..56211e8 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.java @@ -0,0 +1,16 @@ +package br.com.grupo63.serviceorder.gateway.identification.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class ClientDTO { + + Long id; + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/order/IOrderGateway.java b/src/main/java/br/com/grupo63/serviceorder/gateway/order/IOrderGateway.java new file mode 100644 index 0000000..b693716 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/order/IOrderGateway.java @@ -0,0 +1,14 @@ +package br.com.grupo63.serviceorder.gateway.order; + +import br.com.grupo63.serviceorder.entity.order.Order; +import br.com.grupo63.techchallenge.common.gateway.IPersistenceEntityGateway; + +import java.util.Optional; + +public interface IOrderGateway extends IPersistenceEntityGateway { + + Optional findByIdAndDeletedFalse(Long id); + + Order saveAndFlush(Order order); + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.java b/src/main/java/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.java new file mode 100644 index 0000000..cf45ce6 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.java @@ -0,0 +1,41 @@ +package br.com.grupo63.serviceorder.gateway.order; + +import br.com.grupo63.serviceorder.entity.order.Order; +import br.com.grupo63.serviceorder.gateway.order.entity.OrderPersistenceEntity; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Optional; + +@Component +@RequiredArgsConstructor +public class OrderJpaAdapter implements IOrderGateway { + + private final OrderJpaRepository jpaRepository; + + @Override + public Optional findByIdAndDeletedFalse(Long id) { + return jpaRepository.findByIdAndDeletedFalse(id) + .map(OrderPersistenceEntity::toModel); + } + + @Override + @Transactional + public Order saveAndFlush(Order order) { + OrderPersistenceEntity entity = new OrderPersistenceEntity(order); + + entity = jpaRepository.saveAndFlush(entity); + + return entity.toModel(); + } + + @Override + public List findByDeletedFalse() { + return jpaRepository.findByDeletedFalse().stream() + .map(OrderPersistenceEntity::toModel) + .toList(); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/order/OrderJpaRepository.java b/src/main/java/br/com/grupo63/serviceorder/gateway/order/OrderJpaRepository.java new file mode 100644 index 0000000..4c59cfd --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/order/OrderJpaRepository.java @@ -0,0 +1,10 @@ +package br.com.grupo63.serviceorder.gateway.order; + +import br.com.grupo63.serviceorder.gateway.order.entity.OrderPersistenceEntity; +import br.com.grupo63.techchallenge.common.gateway.repository.IJpaRepository; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface OrderJpaRepository extends JpaRepository, IJpaRepository { +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.java b/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.java new file mode 100644 index 0000000..0a5a90d --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.java @@ -0,0 +1,54 @@ +package br.com.grupo63.serviceorder.gateway.order.entity; + +import br.com.grupo63.serviceorder.entity.order.OrderItem; +import br.com.grupo63.serviceorder.gateway.product.entity.ProductPersistenceEntity; +import br.com.grupo63.techchallenge.common.gateway.repository.entity.PersistenceEntity; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor + +@Entity +@Table(name = "ori_order_item", indexes = {}) +public class OrderItemPersistenceEntity extends PersistenceEntity { + + @Basic + @Column(name = "quantity", nullable = false) + private Long quantity; + + @Basic + @Column(name = "price", nullable = false) + private Double price; + + @JoinColumn(name = "ori_order", foreignKey = @ForeignKey(name = "fk_order_item_order"), nullable = false) + @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.REFRESH}, fetch = FetchType.LAZY) + private OrderPersistenceEntity order; + + @JoinColumn(name = "product", foreignKey = @ForeignKey(name = "fk_order_item_product"), nullable = false) + @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.REFRESH}, fetch = FetchType.LAZY) + private ProductPersistenceEntity product; + + public OrderItemPersistenceEntity(OrderItem item, OrderPersistenceEntity order) { + super(item); + this.quantity = item.getQuantity(); + this.price = item.getPrice(); + this.order = order; + this.product = new ProductPersistenceEntity(item.getProduct()); + } + + public OrderItem toModel() { + return new OrderItem(this.getId(), + this.isDeleted(), + this.getQuantity(), + this.getPrice(), + null, + this.product.toModel()); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.java b/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.java new file mode 100644 index 0000000..9826524 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.java @@ -0,0 +1,60 @@ +package br.com.grupo63.serviceorder.gateway.order.entity; + +import br.com.grupo63.serviceorder.entity.order.Order; +import br.com.grupo63.techchallenge.common.gateway.repository.entity.PersistenceEntity; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter + +@Entity +@Table(name = "ord_order", indexes = {}) +public class OrderPersistenceEntity extends PersistenceEntity { + + @Basic + @Column(name = "total_price", nullable = false) + private Double totalPrice; + + @Basic + @Column(name = "ord_client", nullable = false) + private Long clientId; + + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "order") + private List items = new ArrayList<>(); + + @Basic + @Column(name = "ord_payment", nullable = false) + private Long paymentId; + + public OrderPersistenceEntity(Long id) { + this.id = id; + } + + public OrderPersistenceEntity(Order order) { + super(order); + this.totalPrice = order.getTotalPrice(); + this.clientId = order.getClientId(); + this.paymentId = order.getPaymentId(); + this.items = order.getItems().stream().map(item -> new OrderItemPersistenceEntity(item, this)).toList(); + } + + public Order toModel() { + return new Order( + this.getId(), + this.isDeleted(), + this.getTotalPrice(), + this.getClientId(), + this.getItems().stream().map(OrderItemPersistenceEntity::toModel).toList(), + this.getPaymentId()); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/product/IProductGateway.java b/src/main/java/br/com/grupo63/serviceorder/gateway/product/IProductGateway.java new file mode 100644 index 0000000..4d64eed --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/product/IProductGateway.java @@ -0,0 +1,17 @@ +package br.com.grupo63.serviceorder.gateway.product; + +import br.com.grupo63.serviceorder.entity.product.Product; +import br.com.grupo63.techchallenge.common.gateway.IPersistenceEntityGateway; + +import java.util.List; +import java.util.Optional; + +public interface IProductGateway extends IPersistenceEntityGateway { + + Product saveAndFlush(Product product); + + Optional findByIdAndDeletedFalse(Long id); + + List findByDeletedFalseAndCategory_Name(String categoryName); + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.java b/src/main/java/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.java new file mode 100644 index 0000000..15e0fad --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.java @@ -0,0 +1,47 @@ +package br.com.grupo63.serviceorder.gateway.product; + +import br.com.grupo63.serviceorder.entity.product.Product; +import br.com.grupo63.serviceorder.gateway.product.entity.ProductPersistenceEntity; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Optional; + +@Component +@RequiredArgsConstructor +public class ProductJpaAdapter implements IProductGateway { + + private final ProductJpaRepository productJpaRepository; + + @Override + public Product saveAndFlush(Product product) { + ProductPersistenceEntity entity = new ProductPersistenceEntity(product); + + entity = productJpaRepository.saveAndFlush(entity); + + return entity.toModel(); + } + + @Override + public Optional findByIdAndDeletedFalse(Long id) { + return productJpaRepository.findByIdAndDeletedFalse(id).map(ProductPersistenceEntity::toModel); + } + + @Override + public List findByDeletedFalseAndCategory_Name(String categoryName) { + return productJpaRepository.findByDeletedFalseAndCategory_Name(categoryName) + .stream() + .map(ProductPersistenceEntity::toModel) + .toList(); + } + + @Override + public List findByDeletedFalse() { + return productJpaRepository.findByDeletedFalse() + .stream() + .map(ProductPersistenceEntity::toModel) + .toList(); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.java b/src/main/java/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.java new file mode 100644 index 0000000..1612a53 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.java @@ -0,0 +1,13 @@ +package br.com.grupo63.serviceorder.gateway.product; + +import br.com.grupo63.serviceorder.gateway.product.entity.ProductPersistenceEntity; +import br.com.grupo63.techchallenge.common.gateway.repository.IJpaRepository; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ProductJpaRepository extends JpaRepository, IJpaRepository { + + List findByDeletedFalseAndCategory_Name(String categoryName); + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/product/entity/CategoryPersistenceEntity.java b/src/main/java/br/com/grupo63/serviceorder/gateway/product/entity/CategoryPersistenceEntity.java new file mode 100644 index 0000000..0dcf237 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/product/entity/CategoryPersistenceEntity.java @@ -0,0 +1,38 @@ +package br.com.grupo63.serviceorder.gateway.product.entity; + +import br.com.grupo63.serviceorder.entity.product.Category; +import br.com.grupo63.techchallenge.common.gateway.repository.entity.PersistenceEntity; +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter + +@Entity +@Table(name = "cat_category", indexes = {}) +public class CategoryPersistenceEntity extends PersistenceEntity { + + @Basic + @Column(name = "name", nullable = false) + private String name; + + public CategoryPersistenceEntity(Category category) { + super(category); + this.name = category.getName(); + } + + public Category toModel() { + return new Category(this.getId(), + this.isDeleted(), + this.getName()); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.java b/src/main/java/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.java new file mode 100644 index 0000000..a41e201 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.java @@ -0,0 +1,49 @@ +package br.com.grupo63.serviceorder.gateway.product.entity; + +import br.com.grupo63.serviceorder.entity.product.Product; +import br.com.grupo63.techchallenge.common.gateway.repository.entity.PersistenceEntity; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor + +@Getter +@Setter + +@Entity +@Table(name = "prd_product", indexes = {}) +public class ProductPersistenceEntity extends PersistenceEntity { + + @Basic + @Column(name = "name", nullable = false) + private String name; + + @Basic + @Column(name = "price", nullable = false) + private Double price; + + @JoinColumn(name = "category", foreignKey = @ForeignKey(name = "fk_product_category"), nullable = false) + @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.REFRESH}, fetch = FetchType.EAGER) + private CategoryPersistenceEntity category; + + public ProductPersistenceEntity(Product product) { + super(product); + this.name = product.getName(); + this.price = product.getPrice(); + if (product.getCategory() != null) + this.category = new CategoryPersistenceEntity(product.getCategory()); + } + + public Product toModel() { + return new Product(this.getId(), + this.isDeleted(), + this.getName(), + this.getPrice(), + this.getCategory() != null ? this.getCategory().toModel() : null); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/presenter/OrderPresenter.java b/src/main/java/br/com/grupo63/serviceorder/presenter/OrderPresenter.java new file mode 100644 index 0000000..f5ec721 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/presenter/OrderPresenter.java @@ -0,0 +1,30 @@ +package br.com.grupo63.serviceorder.presenter; + +import br.com.grupo63.serviceorder.controller.dto.OrderControllerDTO; +import br.com.grupo63.serviceorder.controller.dto.OrderItemControllerDTO; +import br.com.grupo63.serviceorder.entity.order.Order; + +public class OrderPresenter { + + public static OrderControllerDTO toDto(Order entity) { + OrderControllerDTO dto = new OrderControllerDTO(); + + dto.setId(entity.getId()); + dto.setTotalPrice(entity.getTotalPrice()); + dto.setPaymentId(entity.getPaymentId()); + dto.setClientId(entity.getClientId()); + dto.setItems(entity.getItems().stream().map(orderItemEntity -> { + OrderItemControllerDTO orderItemUseCaseDTO = new OrderItemControllerDTO(); + + orderItemUseCaseDTO.setId(orderItemEntity.getId()); + orderItemUseCaseDTO.setQuantity(orderItemEntity.getQuantity()); + orderItemUseCaseDTO.setPrice(orderItemEntity.getPrice()); + orderItemUseCaseDTO.setProductId(orderItemEntity.getProduct().getId()); + + return orderItemUseCaseDTO; + }).toList()); + + return dto; + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/presenter/ProductPresenter.java b/src/main/java/br/com/grupo63/serviceorder/presenter/ProductPresenter.java new file mode 100644 index 0000000..3cfbabe --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/presenter/ProductPresenter.java @@ -0,0 +1,19 @@ +package br.com.grupo63.serviceorder.presenter; + +import br.com.grupo63.serviceorder.controller.dto.ProductControllerDTO; +import br.com.grupo63.serviceorder.entity.product.Product; + +public class ProductPresenter { + + public static ProductControllerDTO toDto(Product entity) { + ProductControllerDTO dto = new ProductControllerDTO(); + + dto.setId(entity.getId()); + dto.setName(entity.getName()); + dto.setPrice(entity.getPrice()); + dto.setCategory(entity.getCategory().getId()); + + return dto; + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.java b/src/main/java/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.java new file mode 100644 index 0000000..c1128f2 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.java @@ -0,0 +1,21 @@ +package br.com.grupo63.serviceorder.usecase.order; + +import br.com.grupo63.serviceorder.entity.order.Order; +import br.com.grupo63.techchallenge.common.exception.NotFoundException; +import br.com.grupo63.techchallenge.common.exception.ValidationException; + +import java.util.List; + +public interface IOrderUseCase { + + Order create(Order entity, Long clientId) throws ValidationException, NotFoundException; + + Order read(Long id) throws NotFoundException; + + List list(); + + Order update(Order entity) throws ValidationException; + + void delete(Order entity); + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.java b/src/main/java/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.java new file mode 100644 index 0000000..f148dd3 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.java @@ -0,0 +1,67 @@ +package br.com.grupo63.serviceorder.usecase.order; + +import br.com.grupo63.serviceorder.entity.order.Order; +import br.com.grupo63.serviceorder.entity.order.OrderItem; +import br.com.grupo63.serviceorder.entity.product.Product; +import br.com.grupo63.serviceorder.gateway.identification.IIdentificationGateway; +import br.com.grupo63.serviceorder.gateway.identification.dto.ClientDTO; +import br.com.grupo63.serviceorder.gateway.order.IOrderGateway; +import br.com.grupo63.serviceorder.gateway.product.IProductGateway; +import br.com.grupo63.techchallenge.common.domain.validation.group.Create; +import br.com.grupo63.techchallenge.common.domain.validation.group.Update; +import br.com.grupo63.techchallenge.common.exception.NotFoundException; +import br.com.grupo63.techchallenge.common.exception.ValidationException; +import br.com.grupo63.techchallenge.common.usecase.Validator; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@RequiredArgsConstructor +@Service +public class OrderUseCase implements IOrderUseCase { + + private final IProductGateway productGateway; + private final IOrderGateway gateway; + private final IIdentificationGateway identificationGateway; + + private void fillCurrentPrices(Order order) throws NotFoundException { + double totalPrice = 0.0D; + for (OrderItem orderItem : order.getItems()) { + Product product = productGateway.findByIdAndDeletedFalse(orderItem.getProduct().getId()).orElseThrow(NotFoundException::new); + orderItem.setPrice(product.getPrice()); + totalPrice += product.getPrice() * orderItem.getQuantity(); + } + order.setTotalPrice(totalPrice); + } + + @Override + public Order create(Order entity, Long clientId) throws NotFoundException { + // identificationGateway.getById(clientId).orElseThrow(NotFoundException::new); + + fillCurrentPrices(entity); + return gateway.saveAndFlush(entity); + } + + @Override + public Order read(Long id) throws NotFoundException { + return gateway.findByIdAndDeletedFalse(id).orElseThrow(NotFoundException::new); + } + + @Override + public List list() { + return gateway.findByDeletedFalse(); + } + + @Override + public Order update(Order entity) { + return gateway.saveAndFlush(entity); + } + + @Override + public void delete(Order entity) { + entity.delete(); + gateway.saveAndFlush(entity); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.java b/src/main/java/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.java new file mode 100644 index 0000000..2c15cda --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.java @@ -0,0 +1,24 @@ +package br.com.grupo63.serviceorder.usecase.product; + +import br.com.grupo63.serviceorder.entity.product.Product; +import br.com.grupo63.serviceorder.gateway.product.IProductGateway; +import br.com.grupo63.techchallenge.common.exception.NotFoundException; +import br.com.grupo63.techchallenge.common.exception.ValidationException; + +import java.util.List; + +public interface IProductUseCase { + + Product create(Product entity, IProductGateway gateway) throws ValidationException; + + Product read(Long id, IProductGateway gateway) throws NotFoundException; + + List list(IProductGateway gateway); + + Product update(Product entity, IProductGateway gateway) throws NotFoundException, ValidationException; + + void delete(Product entity, IProductGateway gateway); + + List listByCategoryName(String categoryName, IProductGateway gateway); + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.java b/src/main/java/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.java new file mode 100644 index 0000000..47844d9 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.java @@ -0,0 +1,52 @@ +package br.com.grupo63.serviceorder.usecase.product; + +import br.com.grupo63.serviceorder.entity.product.Product; +import br.com.grupo63.serviceorder.gateway.product.IProductGateway; +import br.com.grupo63.techchallenge.common.domain.validation.group.Create; +import br.com.grupo63.techchallenge.common.domain.validation.group.Update; +import br.com.grupo63.techchallenge.common.exception.NotFoundException; +import br.com.grupo63.techchallenge.common.exception.ValidationException; +import br.com.grupo63.techchallenge.common.usecase.Validator; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@RequiredArgsConstructor + +@Service +public class ProductUseCase implements IProductUseCase { + + @Override + public Product create(Product entity, IProductGateway gateway) { + return gateway.saveAndFlush(entity); + } + + @Override + public Product read(Long id, IProductGateway gateway) throws NotFoundException {or a street fighter player + return gateway.findByIdAndDeletedFalse(id).orElseThrow(NotFoundException::new); + } + + @Override + public List list(IProductGateway gateway) { + return gateway.findByDeletedFalse(); + } + + + @Override + public Product update(Product entity, IProductGateway gateway) { + return gateway.saveAndFlush(entity); + } + + @Override + public void delete(Product entity, IProductGateway gateway) { + entity.delete(); + gateway.saveAndFlush(entity); + } + + @Override + public List listByCategoryName(String categoryName, IProductGateway gateway) { + return gateway.findByDeletedFalseAndCategory_Name(categoryName); + } + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..503d02e --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,28 @@ +spring: + datasource: + driver-class-name: org.postgresql.Driver + password: ${DB_PASSWORD:backend} + url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:backend} + username: ${DB_USERNAME:backend} + docker: + compose: + enabled: true + file: compose-dev.yml + start: + command: up + stop: + command: down + jpa: + hibernate: + ddl-auto: validate + flyway: + locations: classpath:db/migrations/{vendor}/ + enabled: true +jwt: + token: + key: + public: "${JWT_PUBLIC_KEY:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqStd8n4SGNM0eZhV/hzU+urHA5/IMZPoP9YQ9ZcLKWiX33nI6bSuZMCrLZcJExf63xS+uxDpGxM8Mnk2zOdl+lPwANXLzP1us5P1PyA3YPycW9J7C5YTQW0GiEL3M93ZX7vMJiVoBYblP3JPlYnoYlBORuc0JPk33KtfEZP+78qXpPHM8imYrJLe8ceiDLLFDU/nh5KC2dWAy3ci1ahoJ1Q9ELhp3IZLvOTX57H/T2VKOYOya5+ST41h+JjzI+qGTVnLcKaW+k25YLlVnkSspvdx98+yQDi7kbOTS6yRZHUPD6wPk/nUozpD0nZKccoH4W+zMwmQVtsAA6JCA9gfGwIDAQAB}" + +server: + servlet: + context-path: "/order" \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..36c599d --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,8 @@ +spring: + datasource: + driver-class-name: org.postgresql.Driver + password: ${DB_PASSWORD:backend} + url: jdbc:postgresql://${DB_HOST:localhost}/${DB_NAME:backend-db} + username: ${DB_USERNAME:backend} + devtools: + add-properties: false diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..b61411b --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,45 @@ +# Global config +spring: + docker: + compose: + # We don't want to use docker compose in prod and test + enabled: false + jpa: + hibernate: + ddl-auto: validate + show-sql: true + profiles: + # Value comes from Maven profile (pom.xml) + active: '@spring.profiles.active@' + flyway: + locations: classpath:db/migrations/{vendor}/ + enabled: true +jwt: + token: + key: + public: "${JWT_PUBLIC_KEY}" + +springdoc: + swagger-ui: + path: / + tags-sorter: alpha + show-actuator: true +management: + info: + env: + enabled: true + endpoint: + health: + show-components: always + endpoints: + web: + exposure: + include: health, info +info: + name: '@project.name@' + description: '@project.description@' + version: '@project.version@' + +docs: + api: + url: "${DOCS_API_URL:https://9ah1j49vm1.execute-api.us-east-2.amazonaws.com}" diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt new file mode 100644 index 0000000..bf0da39 --- /dev/null +++ b/src/main/resources/banner.txt @@ -0,0 +1,14 @@ + _______ _ _____ _ _ _ + |__ __| | | / ____| | | | | + | | ___ ___| |__ | | | |__ __ _| | | ___ _ __ __ _ ___ + | |/ _ \/ __| '_ \ | | | '_ \ / _` | | |/ _ \ '_ \ / _` |/ _ \ + | | __/ (__| | | | | |____| | | | (_| | | | __/ | | | (_| | __/ + |_|\___|\___|_| |_| \_____|_| |_|\__,_|_|_|\___|_| |_|\__, |\___| + __/ | + |___/ +Grupo 63 +- RM 350013 - Gabriel Otani +- RM 350008 - Henrique Zaim +- RM 350009 - Marcelo Vilas Boas +- RM 350383 - Thiago Bezerra +Version ${info.version} - Spring Boot ${spring-boot.version} diff --git a/src/main/resources/db/migrations/postgresql/V01__create-tables.sql b/src/main/resources/db/migrations/postgresql/V01__create-tables.sql new file mode 100644 index 0000000..d3a48ee --- /dev/null +++ b/src/main/resources/db/migrations/postgresql/V01__create-tables.sql @@ -0,0 +1,44 @@ +CREATE TABLE IF NOT EXISTS cat_category ( + deleted BOOLEAN NOT NULL, + creation_date TIMESTAMP(6) NOT NULL, + id BIGSERIAL PRIMARY KEY, + last_update_date TIMESTAMP(6) NOT NULL, + name VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS ord_order ( + id BIGSERIAL PRIMARY KEY, + deleted BOOLEAN NOT NULL, + total_price DOUBLE PRECISION NOT NULL, + ord_client BIGINT NOT NULL, + ord_payment BIGINT UNIQUE, + creation_date TIMESTAMP(6) NOT NULL, + last_update_date TIMESTAMP(6) NOT NULL +); + +CREATE TABLE IF NOT EXISTS prd_product ( + deleted BOOLEAN NOT NULL, + price DOUBLE PRECISION NOT NULL, + category BIGINT NOT NULL + CONSTRAINT fk_product_category + REFERENCES cat_category, + creation_date TIMESTAMP(6) NOT NULL, + id BIGSERIAL PRIMARY KEY, + last_update_date TIMESTAMP(6) NOT NULL, + name VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS ori_order_item ( + deleted BOOLEAN NOT NULL, + price DOUBLE PRECISION NOT NULL, + creation_date TIMESTAMP(6) NOT NULL, + id BIGSERIAL PRIMARY KEY, + last_update_date TIMESTAMP(6) NOT NULL, + ori_order BIGINT NOT NULL + CONSTRAINT fk_order_item_order + REFERENCES ord_order, + product BIGINT NOT NULL + CONSTRAINT fk_order_item_product + REFERENCES prd_product, + quantity BIGINT NOT NULL +); \ No newline at end of file diff --git a/src/main/resources/db/migrations/postgresql/V02__insert-fixed-data.sql b/src/main/resources/db/migrations/postgresql/V02__insert-fixed-data.sql new file mode 100644 index 0000000..1f6fd7a --- /dev/null +++ b/src/main/resources/db/migrations/postgresql/V02__insert-fixed-data.sql @@ -0,0 +1,4 @@ +insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Lanche'); +insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Acompanhamento'); +insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Bebida'); +insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Sobremesa'); \ No newline at end of file diff --git a/src/main/resources/db/migrations/postgresql/V03__insert-example-data.sql b/src/main/resources/db/migrations/postgresql/V03__insert-example-data.sql new file mode 100644 index 0000000..ad5dac8 --- /dev/null +++ b/src/main/resources/db/migrations/postgresql/V03__insert-example-data.sql @@ -0,0 +1,27 @@ +-- Registros para a categoria 'Lanche' +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 10.99, (SELECT id FROM cat_category WHERE name = 'Lanche'), NOW(), NOW(), 'Hambúrguer'); + +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 8.99, (SELECT id FROM cat_category WHERE name = 'Lanche'), NOW(), NOW(), 'Sanduíche de Frango'); + +-- Registros para a categoria 'Acompanhamento' +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 3.99, (SELECT id FROM cat_category WHERE name = 'Acompanhamento'), NOW(), NOW(), 'Batata Frita'); + +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 2.99, (SELECT id FROM cat_category WHERE name = 'Acompanhamento'), NOW(), NOW(), 'Nuggets'); + +-- Registros para a categoria 'Bebida' +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 4.99, (SELECT id FROM cat_category WHERE name = 'Bebida'), NOW(), NOW(), 'Refrigerante'); + +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 2.49, (SELECT id FROM cat_category WHERE name = 'Bebida'), NOW(), NOW(), 'Suco'); + +-- Registros para a categoria 'Sobremesa' +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 6.99, (SELECT id FROM cat_category WHERE name = 'Sobremesa'), NOW(), NOW(), 'Sorvete'); + +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 4.49, (SELECT id FROM cat_category WHERE name = 'Sobremesa'), NOW(), NOW(), 'Bolo de Chocolate'); \ No newline at end of file diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties new file mode 100644 index 0000000..e69de29 diff --git a/src/test/java/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.java b/src/test/java/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.java new file mode 100644 index 0000000..9ce661b --- /dev/null +++ b/src/test/java/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.java @@ -0,0 +1,13 @@ +package br.com.grupo63.serviceorder; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ServiceOrderApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml new file mode 100644 index 0000000..503d02e --- /dev/null +++ b/target/classes/application-dev.yml @@ -0,0 +1,28 @@ +spring: + datasource: + driver-class-name: org.postgresql.Driver + password: ${DB_PASSWORD:backend} + url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:backend} + username: ${DB_USERNAME:backend} + docker: + compose: + enabled: true + file: compose-dev.yml + start: + command: up + stop: + command: down + jpa: + hibernate: + ddl-auto: validate + flyway: + locations: classpath:db/migrations/{vendor}/ + enabled: true +jwt: + token: + key: + public: "${JWT_PUBLIC_KEY:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqStd8n4SGNM0eZhV/hzU+urHA5/IMZPoP9YQ9ZcLKWiX33nI6bSuZMCrLZcJExf63xS+uxDpGxM8Mnk2zOdl+lPwANXLzP1us5P1PyA3YPycW9J7C5YTQW0GiEL3M93ZX7vMJiVoBYblP3JPlYnoYlBORuc0JPk33KtfEZP+78qXpPHM8imYrJLe8ceiDLLFDU/nh5KC2dWAy3ci1ahoJ1Q9ELhp3IZLvOTX57H/T2VKOYOya5+ST41h+JjzI+qGTVnLcKaW+k25YLlVnkSspvdx98+yQDi7kbOTS6yRZHUPD6wPk/nUozpD0nZKccoH4W+zMwmQVtsAA6JCA9gfGwIDAQAB}" + +server: + servlet: + context-path: "/order" \ No newline at end of file diff --git a/target/classes/application-prod.yml b/target/classes/application-prod.yml new file mode 100644 index 0000000..36c599d --- /dev/null +++ b/target/classes/application-prod.yml @@ -0,0 +1,8 @@ +spring: + datasource: + driver-class-name: org.postgresql.Driver + password: ${DB_PASSWORD:backend} + url: jdbc:postgresql://${DB_HOST:localhost}/${DB_NAME:backend-db} + username: ${DB_USERNAME:backend} + devtools: + add-properties: false diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..786c369 --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,45 @@ +# Global config +spring: + docker: + compose: + # We don't want to use docker compose in prod and test + enabled: false + jpa: + hibernate: + ddl-auto: validate + show-sql: true + profiles: + # Value comes from Maven profile (pom.xml) + active: 'dev' + flyway: + locations: classpath:db/migrations/{vendor}/ + enabled: true +jwt: + token: + key: + public: "${JWT_PUBLIC_KEY}" + +springdoc: + swagger-ui: + path: / + tags-sorter: alpha + show-actuator: true +management: + info: + env: + enabled: true + endpoint: + health: + show-components: always + endpoints: + web: + exposure: + include: health, info +info: + name: 'Service Order' + description: 'FIAP SOAT1 2023 - Group 63 - Phase 4' + version: '4.0.0' + +docs: + api: + url: "${DOCS_API_URL:https://9ah1j49vm1.execute-api.us-east-2.amazonaws.com}" diff --git a/target/classes/banner.txt b/target/classes/banner.txt new file mode 100644 index 0000000..bf0da39 --- /dev/null +++ b/target/classes/banner.txt @@ -0,0 +1,14 @@ + _______ _ _____ _ _ _ + |__ __| | | / ____| | | | | + | | ___ ___| |__ | | | |__ __ _| | | ___ _ __ __ _ ___ + | |/ _ \/ __| '_ \ | | | '_ \ / _` | | |/ _ \ '_ \ / _` |/ _ \ + | | __/ (__| | | | | |____| | | | (_| | | | __/ | | | (_| | __/ + |_|\___|\___|_| |_| \_____|_| |_|\__,_|_|_|\___|_| |_|\__, |\___| + __/ | + |___/ +Grupo 63 +- RM 350013 - Gabriel Otani +- RM 350008 - Henrique Zaim +- RM 350009 - Marcelo Vilas Boas +- RM 350383 - Thiago Bezerra +Version ${info.version} - Spring Boot ${spring-boot.version} diff --git a/target/classes/br/com/grupo63/serviceorder/ServiceOrderApplication.class b/target/classes/br/com/grupo63/serviceorder/ServiceOrderApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..18e302214880a8da0ac256a7e0d79088069e903f GIT binary patch literal 842 zcmbVK!EO^V5PeRQZW;n@Qz#S)Qg3Mv_)xV%3RHrKo)(G-3I|T!jk9&x*pb&;_$^K# z4txL~g_zk^N)F3~m3GE6<9W8r4<`Kk7Dd>x!~@N%)pO{#)%wu26C zMd)^M8+QZ-&S$b%cw@7fS9ATv`Oh+OF353}T{Irr82L>A+ z#&yW4vq66ia^&pHWTjV0u2+trG?#}0&5@gGfz8-h{kEJZ+JE4^0=?L!DxWBCIKD|X z!-XjXj^qCzgb$l5Ll4{S*S%vxb>%aH->E5+Qg3v)aMO2+=?mJ^#?IK4KGkQ2FTDQ` zA)Ydc0(>BAnA&4l8w3861&Wk*II9dPTCWkVy}FRtu2kuAEA@ z&~~OxX60+kRG#sAlpAeBF~k8P8c6;c5ImA(Hz|_j1^L$CJH)rDyhWDFzy`L-cCR;} zhn*^S7xxH+n@=h*pxuiGKd|v}+0WC@oe@pt5~Gb>+^75l`dg$Axd!$s`w)-FbK5@o G$G~4p!th=*FJQ42$ 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 GsQm>SD?4id literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.class b/target/classes/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.class new file mode 100644 index 0000000000000000000000000000000000000000..9a5d28aff3c945e073072c9cd30303ba7dfd59b3 GIT binary patch literal 5760 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 NME$k)QNwc#{Rcf*g1P_z literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/controller/ProductController.class b/target/classes/br/com/grupo63/serviceorder/controller/ProductController.class new file mode 100644 index 0000000000000000000000000000000000000000..c74475383de4aaa9ea41c7d4ead59b48d41e07e4 GIT binary patch literal 4740 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 literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.class b/target/classes/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..3b825a4e26110020cfc19ddb3ea22dae355eaba0 GIT binary patch literal 1360 zcmbtSNsrSo6n^f$q;#EO-?z3bIUqPNfHayBVx$f;h*3{m+{9{w+PJvRNc=01sE|1D z1Nc#h_nat%G)PEX@?!g2p1_qC@#GH8w7^HXlmxj(f>(x2{--5Cp- z&|*+rDwJl>Nr3icFqsPj>sZjGma0o7-N4ZYE`!JY1l9;9))6pIM^J%+&q5qCE;I=rfe#X5o-l-SqBui;?A zz@K8Jh)O2x^rbDs-VPCQ#HA==inECC*2H)NZe~d~{#BA*1v3*u$#8KiyUUG-@V72$ O=&@ut?AvBAcYXoG-}Ny7 literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.class b/target/classes/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..442516397bae1d54b735cf219ac8ea71bb8e040f GIT binary patch literal 1409 zcmbtS*>2N76g`v8Y2whVg|hD?X7K|ONUW+-As*5asa2kMah#E3lz6I%Q;ELP*;6~@ z?${kWlL-$zuD(n~KqUyJpq{ixp|JOcvrsy2*j={wk3TRJUipC^zG29=JA*A0v1OoS zq70MaZNg^8<*Dy-AxET{knc+|ns2D*0%yt@>b+0Ssbf!^z_X7+=?C6RWp%;CHmVHy z6G^h`uzfKfPPm5EO*GJCD7sF_Jt03cR96Ihg5(&Uw^w?x$x0{ITj^+CXTXr_iV?YQ z_xyk#&Zk2zj~((>^9a|O3>@jJbKJ~@V}Hi5*Za?KXyobv565EEcO<10a!Im=$HPON zS+m_)88-eQ3V{IqD6Vxx{DTZ-LUfl&)z@U=tc=+omsUz@Dw851Vw*Kc?4lrLf}Hy_ zR)v<)mX5?+y8NB5;@nN!ktb?1aErDfL#v*pC#@d6Wz=fuN_S7S2-*|0sJ}y}k5qG1 zo7Oil>)`^1^=N^L^>~5WSIxRe&jN9P5-!oxityOQWjYa4`>5|t?WEkBYR_nfEA(E; z5}>L-HK;0cC8x}7s*0Fb=1I4*b~7VD?8a~v*EYy!FussV2Ir&JQpwkGBZXW^k{hYy zo0M&G>@(Do^>&=os(fUYca(UnSL6 fFnvQL86EE9L7L>oBK&Pib?HmV=(5}TVmiM8*tr8B literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/entity/order/Order.class b/target/classes/br/com/grupo63/serviceorder/entity/order/Order.class new file mode 100644 index 0000000000000000000000000000000000000000..3e566c3e3ff6ebc1b4a297cd0362edf4fb540349 GIT binary patch literal 4290 zcmb_f+jA3T6#so~nl0&uhTfpuM5NlJK)Bz62ows{P^!f$^}0=#b|J}z%?7P_zdPfL zkG}Zoiw`;@Fu;uCv*VxSIR4JJ+jN^orgWIh-p+R}zw{hZxw`@6;?D>lC_zMd0lTO9) zPbu^b=dWA0tZd1u%w_X#WiB_9o;J{_(5vNj-zjC!c%HS8cWQnD1`-msOQC%@J-rS| ztT)hYB83eKdz+BdZ10v+uwAccds$nD&ITWsMWoQ-_;$IbkP1NPU=k-Mj(bh?pUCj$4JTc0i2T6d#~O&C<@ER-Au8ZS0{E+r;Dx0u)}dh4pzLRl+zVLP5O zu*1aD*r~97DQf{jrfR-tTV;hU!|4dhK$@M>gSj3SW|xT}JgX4%ZL!<8g4n3}wR)xC zJFLs3XBVA<<=eR~3?pqIV`2om6*evbSr&_kt~n)N*gGDE(6qJi7!A10hmN(^L>Bw# z&Ub@MdzK}r%OK<&FmVuv6bz?!zFd{&VdZBG98oy%c=aAv#Nw2R7jT-bK;=o#E!GRPIYPXv08kC|$+Whk)3X>gaL&Ye zjIAz*CKv2m;*cI|P`1=%30%auffr4@g#2PZHHJyIeY0+r*z^6-1_={R&#*P8oVkkS z*FARoSft~mASYLoaAbxFK3fhwBY&EA%ZcU3#L0X(@D3ZM3l=bjqX+Sh={U z-`H{12u{JI*U81rMDxE4*|J$40+V^uRf|IFjk2ldp6GN^Cj`8x(7>A$h4Ij=Azfn@ z;>%>PNFEzYR(ZB)?P7M3M%~5z;=&57k2#z5q9iL_%waVY4z0zWd%=`j_X_ryBdbk9 zA1L<9p2?m6tn2#R@T_XE5Y$r0cgOL5f(L*F6E3PL+*UX`yq3V}8M^u?fsgTtflp0* zhR+pt>djg=pHsQz-mtTIO&{Z1*Q|o?dfYaCDL1dr+B&Fs|Oix;rp4d+wkoGZ?#rfy`is2nOSKu=zJCx8r5rw`;>qh%@j8 zx*ou0hS-9gybog=UZKv#z&WOHg21nK=40lDpgQ<5(O1#Nl6Q8`H_lK@8Zzly~YxcLaVLi5?3R z-AtO^Vk&Ko1OkcF<868{(e@Aa7}(Ae(qWxahterYk=~(Gf&BxY!o^VL9!^F}G$JM1 zEfr$1SRfWFQlRx3lS#yV=w>7-$f3Yd1Lu$?UkWm$`$n=FlK(E+c1ZV3tbsiko8Xv` zzd;NzckU^bOAxH%av!SmnpW>^7 z1?-V(1P)w+~P+Hfh= zSGa)^t1LX_qbN;r8LSqMMj0$sOLII80=es*mt zAv+*Ng8y`g-yFG%=kMZ7<}NP$LV48jjtJMLp6FCy*WQFjFYTyleIIo#RrrvyTX+v2 Q;0sC;)cF!$<68{=2fma0IRF3v literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/entity/order/OrderItem.class b/target/classes/br/com/grupo63/serviceorder/entity/order/OrderItem.class new file mode 100644 index 0000000000000000000000000000000000000000..5d8320875c938507c1afb46faa3aef95af6127f8 GIT binary patch literal 2318 zcmc&!*>2N76g`u*%|f%ZO_P?elqE?QccTRYys!wQ07ala^vz91iBS?4*QvxO@CS&m z0Ews)4}1V0g}8TYf^m$LJ`rg=Gxojbo^$4Ae*FCQ9l(9uNg#x99FY{FhzV>SSz6QV zX>Dt8Z0>GrwrqBq9lhI?{kG&UJ+rU1%${!awa0ziu-^;B?iqcb*-!S z+giiyx9f-1gK11*I*vpNNu&g}d<9OVb!s%FX|<%KNrk96o0t6RnJs$)Q||`4TP))* z!T1+am_bG$dTbGvK+Y5N$Q&GXWu3!vDdaIrVXA<@M&o>B6v%uE1uO`}k1ew`Xxaih zlfbyq+P;%jXWvU~`l3L%Qaup(H13{9hO*PMcV$gd+GA&Zl6XH=CKq{Vw#e9-hS8TV z2E8L`z0t{5w%Tm!-2>e+c<;W9*d60!LSsDa_^|5&A)`h1wq#e@l2+nSAoE<>9kaEs zTY8V)S_J-K%&!0EPO>fSSEClqRjM8;>foq_DP-U2&e^}dy9en+sGg@k2}PWh3lOgzzS|EAim69JbnVVsXVq7hA-T+t1?+{nacICWU7$Bi)xN7z$g7Aw`Ft5#l z)s#;R?$ry55qH@--&43kcS4A+!3aI+a-vm;?-4cAMWJT;uhX0a-5OY;?-yzJ5n;q> zF4tC;&LC=QL&R&v$PnpTF*-!HR*VfX_eJHG=~+UIp7Zo95Yhs&DAKA#Sc|wsU!FQ> zxJ-=rSH@LhBh+dc*A&OHVi;EMm}5k(m}OM0m}d;vX*awH21I$_hvf2_P{Z0Wn1;p~&tyStGI~MU2UolzD7uiSJo5iC0W4qKIW9 z6q->%d729}n9w3U*;S2ZhKVwvKjt~Lld863O4O|_a1)iW>lhot zjV{!AMCsqI&R`Q;L6GT5A-Nw%kj`csJ3)}yNg=s^Mv&Ys0=KXm1Uc5G{}RrPID&MV JZ%;MK?O$rA({ca+ literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/entity/product/Category.class b/target/classes/br/com/grupo63/serviceorder/entity/product/Category.class new file mode 100644 index 0000000000000000000000000000000000000000..a4fd968f6dc71ca99b31a30996e7490fc460f0f3 GIT binary patch literal 1095 zcmbVK&2G~`5dJoaZQ?pjXp*)-`6(cjq=FTy;6S05ik?D+RFp%-#j#h8k>jm4n@YSD zNK};B=10C3kyIp6OZ}-}*eLOzY88`$@xN}& zHyNtET<*4q4YV05amdgrVKPq)&sKewk_zJfh-8msNV3ggoQjkAbS%^-f1G4SWZ)+w zU&SUaE^B%c&lp|}|D(hM1}7AW(1I+pGqU|b=!pzJ`id&oLJ@I$#kTR-E#H>BJCV>Q zS=Tzf{%U!oH(MmQr*f_WaU7e{8jG&KFtfxijjuvqg}P}5NGF@l7CIDnDf)~mYP5TU zy`3wt!ShQv-zlzOlh$>51=@t^5W0&kiUxT;wsD6dLYiR_r#aoly-Y3pEQH;m+eVcV zKu;hFW5mM!Lj0I^W6m91p)uIIL~B`ki^R53Cn+PnnP*>1yM?rovFLjh^bZR9!)5wX zWu^-t;+ttrrmXxGrnTsLVoE#tHsuw`8TGn_NJ8KXf{LSdBQAs(%Of57=hNqM7l jaO+0!E*1s7DGIVpuU3ljO2ydMJ+ia0FBS7R6Mpg+<^8&w literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/entity/product/Product.class b/target/classes/br/com/grupo63/serviceorder/entity/product/Product.class new file mode 100644 index 0000000000000000000000000000000000000000..f51b651b913d9cfccd61f196b50366855b70bd27 GIT binary patch literal 1978 zcmb_d%TC)s6upxt1Oo<~kWl)jZDJm7d9+n&+0e2|5fT*(#Kt(I#8qM=;~;h44{9YM zq%Qga{iv$vj!g(jDizd7_SiG$o^$TKGtRHyKYkL?JKD%mf|6NEX_Tgnpclu1<@hbD z9<)#Vmupriorcq}n@#D}C9kx6&#L(?+x4suUg(Bj1ZCd3o*QlnN|q}JqclRJS;}cN zMw+12KE6{KoVkwlgPII1sR*o-z^}EP(AtYeK?%1eNUwgj&upt{dv&Yod-Y9rI>9z4 z1sUc3)x$`7N~39-5tQ=mmJ~GI1KSS+7c^`zuTgz4d`8}RY zg$?&q(E3d*#5IKj{i6&Uer?YVP?=B$U}_DRIvlK5&rDpJo9K5-!0BddvI%K4R~!mD z>Q#@M^FPJvGTc?0z$jOGcw;4W6@a~{|JM<5nu5lFxJ*FME707o`PtJ;EBPTgb7e+= zh`n5c#8wzG2FR6}*X3JzVWQl=-wqtPM%-_iSxOj=28~jl?&GZxq3HpX_?P341Q;LT zIgJ!CF#Y40{wpXlm@Ar#^A|L3E_X;bOQ{YSW+~mF;+0qdQNRIR0?Qmt!R#z-vglUC z(G@MmqKsdlC(2S$rOSqkD&drR;*`_MTt2PLEns>YR{_@?E;jo#HhYAT!;H&X=;jhT zh3Oun8N?9k!N$x8-!*0^6TEIH6I@w?zd$GhS7HSG-DmvP5nK)_AiMMrk!*MwUiuZgNrSY$nd_uaE+#URl(&{kEfsODt Pm)!I&Wz_67)tL1^-%fVp literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.class b/target/classes/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.class new file mode 100644 index 0000000000000000000000000000000000000000..375ca8cffe5398c09a10216eeabb38f44c431ade GIT binary patch literal 842 zcmbVKO>Yx15FLkn&{9guXG=M8KyYD%Dix#v5?`$%rApOSy>N1NCtHV&z1ZGF72=O^ z;0N%d5N|h9QKTLU2d{U=GjHCTnP0zu{3N0`^r%A(Mg5WI#7#N#W#M*rIEbH_M4V5> zbEc!r^*NhVY&2t&=xChfet*f{Uqp4Nsi-^AGtIfS84pJjNur`oCh`4wKUMVP>EQ44 zz}c+#Y~d)Q$$3~*;5zRCTX}Y7tgDiD|&Hhp(J-@%B~PQ7L1kms_&xhsL{0O zq@wlZ{e#}p=Zda#QqL!}6~Tw4CQ?o4r#3aI1FMA~Tq`&YTBRGfHxar9>*i-tLhE#k ny7&vULAUX`Rw3QN=?1!ssC#wh{W`M?_XGGg18vd6K-+%+-e&)H literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.class b/target/classes/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..748b00b5ece73b3db6671bd8c46e8b6c404fa3db GIT binary patch literal 713 zcmbtR%T59@6g@>AG9n=OT)IO{?83x_C^2eGOvXo|abITYSTamaDH#7s6OD-rKfsSN z-U7Y|I~TpZk8@AYy?y_9eFLzIl{`|I${}4q23dx^mf?Z!@W}LT_0}fuO4CS*_C|FX_Wl13*C1Klp{#0cT$K}DK9TlDhv&kGjfgc5Pj<=F>L}Z<)eIFQ30twAV8>qRG>kT45?IvxUTKN-fFX3t=B>Q4g49d za6p{-QHY5XLmQ-s_TXL5%)Xg7Z+3tF`t}{bGu#dl2y7)TO6@4hU3F+5J%~zjW0jJ1 z8M%mzSNtO%?f$gzyHGWPg5HomC0Tl4Ki-*6>0L6^`$OJ;Lc|Jw{mPv&irdf<&}P(i~I#x=McXrJ~#_q0@ileb(w=# z_{c-v1Kzv$?*D-JilqQwYUEX3JB$OPH+b#U|6N?eb+(#pTq&59x`CS<2yp8+n&vVL literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.class b/target/classes/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..74354584ed4ba0e949a873d3b2cf59fbbf14669b GIT binary patch literal 3095 zcmbtWYg5}s6g_J&s*M7!LqaHoM+y`SMQLag5))bjfsmR&fzqV!wY?aDENLW}4AVc= z&a`AmXFB=Z>2K=vt|V*=7!OWA$m_kkd+)jDK6d~9_sw4b9^)W^7}^xHtB9k6;bFni zidID{J5}4dKdZUIIns;5a!SI{%G?vL_^}quHl*yC&2uGgd%|J3c3|@@VOy^5Sq>4_c4D? z*7BBF&Q1n`s;3*;hVAK=$&GB9`07&8jTA$i+qOX-4ox&}-K&~KxmjBY|74R$ZT(<~DLK#=_5hjTHApX(Nrz7#p6Csp!8B8gdR`D@r z7`o~qlgq@7>p6l~82Te;1F5#{FOrhG_(Z`y8TVPry}FXfK8CrghdpxAxA2*Y`_i=z z&yv`Zn8QN_k7N+D45@lj2fR|MO-$}8c+4=<8j(rr5ueMDe!)^QNl2E=XFy&uT~1e+2I9)B26}5M+ z@e$WCy+nkcZzCjH7v8>A+T;$eP{(n|P-0szo7}591n9+;I?sGlXqVLB0wId~Magit z)x(rdfl7w8re~v^gfM(+F7y_{)3;TnHd7J1x~miUIn%T}E}JD$@+faPWzDr6-7N1( zre0ajq2@W}7tp{#><;w#rYt)tGKB|yVvHMz@>+_tJtQLN}P z*?P`4h1cVZEJudSrM^-lc7){}+d^BiDz;@3o#b0;(Xu?Mdu|7LXNaC@gBQlqHRl$iW?=@ZA;zlg-bDx3GU#g=UwyVQlN3plGRU zrYW2ygS)P973?vLUEt(0_Y~08IM{qERb{{hMyMChfgwjj4_;Ik_E1x zLW|M#Q-(T_G}>wRD47_;EsPVKQ6G#NXbHgt4sVmJ-?tzwEs!Nia5D264>D7Kfc-|Z zfLDnO#CDy}WX-LlAFdjoaimf?`A!OXoDJ0`GE;9ce}aWN)L{pxh^g30+RC;SRj9Fiko3mUKkQAjC-e=EEVXv5yJ?!!T-&9HR{ F@B#jd^>_dP literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.class b/target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.class new file mode 100644 index 0000000000000000000000000000000000000000..ac7a4fcf9d390187ac80a36408b2e806d1672dca GIT binary patch literal 4009 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 literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/product/IProductGateway.class b/target/classes/br/com/grupo63/serviceorder/gateway/product/IProductGateway.class new file mode 100644 index 0000000000000000000000000000000000000000..b8c7de4f9f04895dde340c450c2f06166f4bcc87 GIT binary patch literal 1277 zcmbVMO>fgc5PfUhxNQQ2QYhaAgirwqOCY#}B9+phNT!Vx#G$H$HumCdyexaYxPc-A(4sC#~Fvc7)#+)srW z$WUk#3F8Z8r5*ZxqoXXeely?8aIxZ{RDp+8hT0;8m|O9MPazr;jCZ-6p_1}}*i%tG z$HCY7lbDijA}!A^^-z8AKmqb4`JCoFx&;7!D2*!nD0^k&$IsQR}eA%9foNh%l~ z?gUd>fmSgUI5uQfCjL?1O09TOV{l}|u-1~X;x;oBd2*)6SIfxtn)2PxDbKPc^83`w zSexOeL#mSD!7PWCHFA!BKw1%2C7guiQO9S9TAKGig64fLB%NtJk#hHSL?v7dq!Nc& zuPw|6-cHD}5$KR7AGwjE^Tg=dj-;0EE|jwvlj0K1-2h7Zb*9@Ba`TAG4dBvxt+#Y$ zLQ$8a(l_TAKOK!?iL}BR7|Qf7ab22gtkUT`omLnwkd0JC6;5HgM4kL^*B L@(#Ai;o$CH0Cj=X literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.class b/target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..70f3447527bdd1f44ed13143f6f0d3dffe77ad41 GIT binary patch literal 3436 zcmbVO@lz8=6#g~}*Muvi!J^a_)S@MUdaYQs4WfXeXiyZTYHjT%w}gYs?akc`cd>JN=tFeVbdjBazfHnakb2-TmJ8-oE$t{q@i5KLK2YZy>{Pw;EVA*|6$C z)0dZ~tWX47PEE+b7J*ggk$B0sEkBTUvldyxi=1fNT8@XyA_$!@5?)Q*Y)$0AaMVN( zdKr4B9nXno7%q=jx~b5RyBaifxwx9ed&nBdndpPbaJ3sqJ5P;r$LF&)_ahN79Mc*| z_E7jTbRrpSGt6}*cQ9^(QSL)O1`Om)e1HPO^}`WO02$1XZ;4sYUT~Y?I>Wi~$_C%! zmdm}mb-%hHYEik^DN^1)X5vE(F&L3tlD2ReE{zwvns|W!l~E^54C5n)<7SA*%u9Z{)=PC0T1}csx?ll`#5j^5mmn4OXtZ{dh2aXzR;n8T_2^p?+CEKpE zqrR0X<#mB$xY!lz?d~Rk-gt&#sq6lBE*ei$>bMgKIKL#Kb!jj2fKrKyF`1ijY?7yH zSgUw2WLKQJ$D?LI?s}e1xdV&KbXT$m7&}9(%$m;dIKc}kGL(rbzZssTDQIcBo~SfA zG=bY48Fy%?o81$n{m7E=Np2mwaT#(evKiFGf}_H9C|Ra&(eoAG)-RVQ>P zkY_zlMqE{II@nT026Zd+l>^t*dB2pwrbSIcAY`=d3u|6BeCg4-sKA($GNRhV{WwCx zJPHFn7|f%}@YDaZ>A%A8P`BVfFYFuy)(q55tiz$(A}Mo@w-r;?7lbMTxjHZ?z$^Z zBvj%odY%a8T^@!aG(bJZ*$$t)%{&7h!$|j~RE1(+;560$Y3gWh(o;|^AoUQv^i3B6 zGPp&fDvr>PI*UKRo=*IZBTJ=UVNCAe{S4lKEls|{;LkLl!EO5QZ>=3fmKvnv^jjp^ zsdzu`;4X~_2^B1njw}Xo5BF*3GD&+Fi9up&hG>IQeT$|t^d3|iCw6c=gV#6-yuxUr zQL$B+O4Crhd{5IL9^fI(Yy1baWQCp#9+8l`60N7E^^9sgXEWGAk;Te(V5#9nhD7HO z-Nhi^Cz|N%GM|JR)&ly4m-HQ-ibny zoLC|^PT&M4sq-tgD3~#lrVv~Fgk(K1<2ae)di^g|&PH(m4dwTys Yk20x7$Mpg~f@6aust?~p0}{jk0;+(@d;kCd literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.class b/target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..79795451d771b2fa9a9fe499f8c49738fde009b1 GIT binary patch literal 899 zcmb`G%}xR_6oqe5MEpf}ZjB4w*oD!}DDe*x&8S2kz?9BqC=TtU(}B#Zx$pseDC31u zL}H8~ESmPV$;o%_xqW+oc?Ezo*e*eV!FkJaX?i@gX>3l8c!IXCBpMr_<)Lsm5E+lH z2~z2JBj0ah@rbcWlruIf!6Ji7SM&vsgbw*btBcZ=V2Q!8u^~@lt9015qK5-xpLrmh z;N4hoJC@*6g3AnQQ&5f+%tNNH=%U%LyEy}Tj}63yT%9|26Yi7c%g$U z@)Z*M(>+l!*xUEN`I~OY>mB4*sZ$a6RpLA{d55lJf`%A+acC0;Yw}Ym7b-VZsD(={ zi6;LLJ@uz-{@H!hPPyzWga!c+7ix*M(Suj@7^_Y=$&>K>nNpZ9+60wvsJm5f+WBk& z&zF)K2rEsKT8VWPQHDFe4gBG7R%p5zEI<&=ns@(h3ZwRiZmFst1oVhAS?L6qV7zGvF9YL>lv zO)f8*irW>tVmS_X%UpY^(lyJL;_t0P)8jSi3njfnlemC8~=x<11crFds~ z$}(%637ZcsU)bvm(rYzAA zhYP~x+x6-`_g?D6#9BexmQ%Dmq0fOatSW-QZ~xbM>W1vLu$KOq`?OXVMz*-B$kLAG zkv0@@N*Yyii@I|dR!9Q>Aag=C-aY*GtSPtO(!a4Q>z>V@2+i7Ti`+idF6cLM+GK;b zd73O5>=T#-(e$Q6RZO@g{(<|LBguvuN(kxqMvAyZr!lf!ru7P~DW4oy_b`trc_X++ zwhZ~6(W)bda`_{$T>dL!Uy%GnmJqVq4lS{1ikLwXv&hkDq8WiauG2~1xq$`BYSKQ! z=%6Ke6SwHwED@m{!TFBCSGlhkrQcclO&wwSBiWmU(g@Rj4sn8>B-o?0*ToXe*r1q( zew!k6-VItcbR&0!3%Ps`Y~7>=)`4rZ;Ti!&0o)Wu=rX-p`s%bMtvWcO({_kxW*qLq z6lr6kztO(n&q#KfYX(oA7`)hSXf0?cdSWxFu4ba`W}^Mggm8!8hp^NZ!7`m!$U-7m I#ogDyZ#7Pk!vFvP literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.class b/target/classes/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.class new file mode 100644 index 0000000000000000000000000000000000000000..15694ac20dcfaaf06b3e8a15e9cff28f25ef54f1 GIT binary patch literal 3525 zcmb_eYf}?f7=BJjvJiqGMya==RxJc|TeWz>8$$2~h(KvYTf1xyVI|qkY&N$1g#Hr0 zwlfMd?My%Vp+BnjIeUQ+HmN$DNzU0l@BMi%XaD}^kG}xigp)x69U78Zq>vVPyyEJn zQ_)Lqz3Pl!(miRenQKP5EbWq1l!{~PCBu_H8ymVSt4_`G9Ct&Pwr6=8`kZuYR?U;P zDGUCIK>CJdTiz{!(V^)NQC@T^hGpx4_}K7L2A$~AkjbJOS%Hg9I%?8=Wtq}(i_(p} zsJc$EZhHD$unTA<>CGAyDUcf)o_=Y(GW4=xm-GeCwd~SZ7xtl7LthsA(J%0*orx&+ z$VL=+U@9j5r0pB--)mMymdoNG4heM9!#S6MG`l$I)K|*Vck#0<4&#VGsv0mhstnnb z%41m^$L9jwR5`&+m6#uaD-66{TwxqhSdrkEh7$s9C0ig8Y1jiv27@@I%Iyn*t9xpq zT|Og~tO}K~Gg+L)m&DH8j&k;Y^>i#lE5ljjF+$V{=Yyg^|E>y}c33}(?R*v&pbK(D1UNb*Uw%mP;x(mj&kjBO4!!DP0)EXckvg;x*5iaf-66is709`no`6 zsG9EY|b5Z9AUfS&m&3 zI7++ghU*!6b!U9&ca555jtLx#rA|2Idc`KW)2^4x232-&o!#| zJy}>BpSVx4`NGtEVS!JnRq2^)0`aD%6fqP|6~^xs=2e$}Ovb|b$aWG)POxMIdZ#U0 z&ekg{(p^-jvfig1(^C*t+goP(CVJKpb!gT7P#D2b5rF-aR~G* zc!s$?V^l*w`(~uK<`m})mqXZNb*XFUqXuE5Tf;MfeLGi&>LCq32=wio1#P6^#jew! zl{6Rvmp)+v3)CBX_tRRnMJl3!x;Gc9B(z#|YaWd8Kyh@EBfPbCv4qn@v2>FqG9&P$ zeSLnCo0$ct?wWGSQq_9ARdroZX=*i13jVhW3ow2Z`Nc$PchxOMlYsD8c2WK!YdFcl zp5XB5;K~mO4xw9o%kk|t_dDveM#A_q?(&&ecs$49h=Z3}$T3R(3F@W%SxnwRf#-al z3OMhPdjA;`5)bfDEsroQF@srT$d|%n(&y;GuSoIZ2FK{m2)&#q9ZM z(f)UQ?uB?y#)O7_8ZRT@d;U{`9BNcw!Beiv!`IOG1kj1jr}<3`@qdp0ulWC(|BLVF zFSkv6^BPI9g{!}jyV1Wqx@f3}*7xH)vA=*}UfasQY@j*xPkD6>iT4ab&?}_r6@MC* z`TAVLkMGIgQ?zD^hM%Y^g_RK2=iHOz&gHi-mLE}&o+F<5^C5f*AHKA2zT0;tAMkHO zl?%&76^kkhm86{dreSCbsUBt?eI)hqu+KMsldD2Z=dKV-DdQ?xjn=Xafu}-itX?0A z-NJ9sqmXPA9*7m@N9rESZ!pj-d^A>=pFA7R1@I(G$8+6TKi=w4qs zsK)d*#OV;?u<#U|0urlnDhEDPWzfQ*N|haf64v5W`hC=hZYwW?o)1;3WG7(xiFvs_ QOxF2c<~avI1@<%GUrK3ftpET3 literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/presenter/OrderPresenter.class b/target/classes/br/com/grupo63/serviceorder/presenter/OrderPresenter.class new file mode 100644 index 0000000000000000000000000000000000000000..dbe4d76f7d435f53c4e1a38a44ef3bc094c676e8 GIT binary patch literal 2853 zcmbVOYgZFj6y29cg2@HKQ;}A!15OI+$&{Q+J5O~oWMtcNN$S}GkdeAE{*D9l7d!|>^g7khqfzBPnTgwXc zPfjJPkdw;ZiF5uwiGB=_n;WQ3Nu>>fq-)tQbb$-4;N%^{B?9Ry<9`uShf{%$gvwG2_a;r- zxLL@h4QErQ_NAsss*G-J>5j?sva!S4HK}11TJHV-ijkZ{ws+30`Og$eE?#A$$z(nn}6I|HDTlGRLn|ed|Jc7IULc)fM zL6PC>2=3#XFus-e4&Mu$twx#lf!a5;q<@T5PT$ruo^t40AEh&{&i<*bUJeS-UDxfb zWw>KWrS=Q?cnu=DNKCqPq3*0HtJl*=Y`%i1tKgQOzYY@7b8Si0*P zZWuoaj5l!7YZAt1>N~~=`R=m+CiTWgy@;3nMR|av2*$X#Gmxih73J< z8FYn55YvM(AdZVHu-7 zy5Rr;Ozcri7hS~run2LEW}Sk}h(%a_WMaq#a%af1kC7nA*L=t;C9E;Dw@SFdW2%G= z9=A$(zl4u!kewuEfIg}-Ko|xI*$^Qc#tgkNR{@$? literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/presenter/ProductPresenter.class b/target/classes/br/com/grupo63/serviceorder/presenter/ProductPresenter.class new file mode 100644 index 0000000000000000000000000000000000000000..2d1e0443ff1e0e4747f155a8ce507bf51db44b09 GIT binary patch literal 1331 zcmbW1ZBG+H5Xb-9rz`Ct6(}M;fr|D)IHg$7@(|O;#H2zKNE2UPdz*5ky=}I87`~Oh zDTyY206&y*mbGMx7t-N+!&6dpyY%WPVKt<1 z{I;t8TCE-Kr(htOLK>!lNfS3P#jrMx$vx$&Q>!1aMoflyhpTrE!*niR|DAYUc%6!l zanr;!X2@+2xXt7)d*z!tjjV||++r{Yw`cb_!|Vm%fs$^Bylr9ucgU5Hfot|pXy_SW z@0qxd2MkHVHY643GPfrDR+pcrx@6)Z9+59`L*EPF&@})rn|Ok!3~2&aZN)o6o-%Au z&i_%w(LoBI*NrGJl&*1H*ZG-=6s=78qhx;ZV7z z>aNH4{9cR8Lz_xPovw?v-EG>^)pocTQ%CNAVRP)~|2tfTZio^!B^W;D#xnkX4=dyA zeuaUc3=#pGVf{K8&~VbQF}xXj_-dJC-g9*%oQ5rF6sSE^+0=pXWt+csbqlhW+qJ4k z4@+33Ux|Jqpn@Vn@;O-+X+}C;I0O59zWsuv-qv!Bq!~D%gmtne@DgQ$=)*o~4PE&P zczqksUb32&kixK_1z&BwSGKAZir&>6CH>^2U(y18knRZ&rq0oOk$D#H$}2^ f;JE;f4Q!H?#4=vtH6>FaD^3$dieZan1lvCWLQiV$ literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.class b/target/classes/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.class new file mode 100644 index 0000000000000000000000000000000000000000..5dd5497f864fb57841b7d011866c2b7e184f1443 GIT binary patch literal 960 zcmb`G-A)@Z5QUGIWH+IO()7RZ0O1B-Ahj2vt@;B}q);lM=HBs+Hb%}m@_JGGYFzXI zc&Mtg*$_&RkhbD#?D3h;yJyCizb}3Pc!!+?k-*!Dm)gx_=F7Qzvo8zs=SGwBDS25I zq*Xz(-VINxKWZ6uC{pPogd00+e z=`|f0%ZT2M>E5eGF%}S5C5h3AS6+2kRLtb|yY;f2_^&TE!Ybj}QX)S0A qJYF33@Pw03SsdXRi=X4gU*gV!#$u-N;Y++?adknR;?3(t<@O(v78i&B literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.class b/target/classes/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.class new file mode 100644 index 0000000000000000000000000000000000000000..15c93418bce080e778f9d8752c128e1c644faf07 GIT binary patch literal 4393 zcmbVPX?NVz8Gi0~Q8HHSiR(BuZAnN19orBA2?0D=aO^ltn8YD=OdIGTYp%zNWogjj z#N9WbrG*ygzVCFSr#+`}Yd-Ywp`UvCQ~C>fPM7COnz6<)gWV6dM)$t^`@D<({+~Dh z3g8repGOWI8aj1!p+d6`y60=sH5 zEQfMA5a=%sSFW2YrV)joIJCwc|dK5I+!cCF!IVJR> zPeVb+Ui4GPhJ*%*fVOA`m*mY*prbf^O>qq9*oQ%ZPB%UtXvlUXJec-{=<4RclCRHdD$ zT0&-|Tt@kF3wtS#{Wz%OE*uibGb!mc4W#q!1gBYT$W8eu?+EVJaF34nqqx05Z4x2S zrNB|mAR~@{#dB-S>j*|Q+^ge092F?Fv+x~U7udgGyVbL+49{^qq~U~) zhw(@YE*nAxdOZIet(aZ(y&D1#q^7)$z|^iRLRAXJbd+#1sk6&IOHrT|&68d<@5ng) zr*)jcW26mK`eWLCS^rbg;ki7{VnV~Dj&qn2D8xk-YfeaLdNme1XF3rzvaBW*z8=?6 zR$%C1h@OnhxEbQjIMu|7WEwI~Rx;NxpP`aPgaRoCh+!ZB%dO=`caWWf# zrc*gw)iI}>+C!&iz0h=G&+;t759s(Ht_kd2upMV2@_iyXzGN>tR@@HeGo7q7Jf{l# z866+OhiO@gIe|yp3Ti+zkyMVG;`yXf3Gt7@)G)8Z0*m0`?Ld4BIRbiMu1G?A%87zS zf%%>L*4BsH+j?yJsItGNV^Ph8{-naP#ib_4bsbA^1iGtn)x}65x?Fe~>N=iPcNugg zotNY%ZPyM@tAGbOLPP|BT~&50*p{gZEsdeT6Kzdzguj*9D3`Yq#*WW2Y@3GGex0PV z*|0k&yef;KuVTCMQnWlT{aKTx$KX^v%XH>U-&XJGp_X<-f#Ypmc$@ai!ilkKuofNXF}6jx@gwZ z2<6Y+v}D|Y0}WpkIJ2ohLTN2pi>Bj9wHZD%KUn$y$Dqo`hu} z7DaFsE1q97g1T?JwFQN_8=k*p1Vo z3-Ai~vB1Rbd)iJbpw!ompXTv1{9MB?bo>&p3mn=Q?zX$)ElHzdF3(p@nqe-O7I$y1 zo;@s=jkkYfahNhCRzGgKRYwL#DxS9#)k_&9&x9%n*^?H=Sw`dkyG&HJ=gqDTsoDwl zjTt+X482}wl zp`ord99YBQbqwe5CJbN=$KJw`vF@R+q3$(2x`tE5^vAd&KEH+wFD_Z-*Z=#*Xz?$& zyoT97QeOvF`Tr0<%|JVIwDd3zU>paz$=$`7e~A0aVb1j<_!udU^TTkQ_aDb6XzyWu zGky}E;u-D6r|}s+)vwRubM&1H0X~l}@cA51b>#kyJ^Z-r{THs{d7gBV<^_C-zq$lj zz}FY?)yi&FfuD+WUJQOR?6RK3fYvjn`>pc4gs;Q(id@8ehwhC2Z>sZFt zo~ErmX_(SHsE`Pz`&ufulFBVG4fclYrxbLOJoLtKKf`oBhCYHr!6XStp{b;iixwr% z;+v_GXZY+S+rY@5u{<(*3qvFK-on!(_uYcOp(ycUAXYGv&^Hwf#5JZuIS^Nw3dMlh zC25>ex~GE#1zr_+SRnJac$mYtSy^B<1is7X_xPtG{Sz{MA3wm4@GG9=dGc%g7H?qa Ef6~~^YXATM literal 0 HcmV?d00001 diff --git a/target/classes/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.class b/target/classes/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.class new file mode 100644 index 0000000000000000000000000000000000000000..d0a7fa9a998b4e7e30578185e6716b6989bd7290 GIT binary patch literal 1517 zcmc&!O>fgc5PfS>n}kA3Dc@h$a$yfhTmn>WMG;bHD@F9aU5}it9B;H<7jj1Y27Utn zfdfCFKdS1uaneAkD+*N)mhI8J_h#OVX8+*FPXMp+G(sTI-f>dfzD!&(urFW8oZOz# zWL->77CC8^lN>l37uw7BTceMUIjwO#LPKDFSM4d8sw|P4JG-R4K&TxlPXgbUI(77v zdEN-|F_Hd%CC6l(K|M z!}>OpG{(qnm6}+U@Cgq)^MQQN##_p%K6!FEJ2NUkAgcNhXs}nYz?Y@Yv5_5{C6{1B zgn5DGzw3O%`gL1m@l@Y|;eHya$$1qv>o?%+X&#wUc$3Nw6Sf7KU6W+W7moMq>;Gkc zb)MaM!!?D)fTzy|g)yZ(Y5`wg*(rNitAD0f+X4%v>#M^xE+(;VxWS7jpr%)=>z(=c zOLIHs*d?JC6@7oMQ1c>;r!SSnT z@mDjzHGa)*a3%X0XwP3|cg_>S#kd zLw>_IOmEjH`(eeqcgF~Xzh|4m^DW^UWiG`&KQJo3XN9ITmR93Gi}5^z9`HRe>skv= z7;G_Y=ZekT30KK43kMH5ptu$1TG46Wn){IGOuBP;r72LR8jM) zjzPRefyLC+veH+RT+t3B<#P$I>$r+*4DD9LAyJVVTUXA8bi9EZ3^y8`5#t3CL)r5W zo-gxVqI@__c}eUc{b_8t`}&Ygmowq0A^*D%H~)r^BM5GD^qRilZj zo(7^o(;CK4(0Kj&Lyad6C=$~blp@2AXHs`lai6fk&bBoeS__^<0rwPbS1gCS8^T}X z8xGC%6+M$X>)f~1dotN7x9osnx@n~KG}Y3aCz|5j&2YD=pJRFegO+f?Fw@k*NtBVA z9t*kUS*zS9K}z9MZmm>8i{ZPpHlucME~qm#E{2Rvq4d@_CWh?%x2A|%QlQ~J!-G26 zOJQ!ATikJkTNbKm?@~t+hii;wPcC?&YgN5a+79h)hLz^RJ&DnDCyaJ4Lubh@yIh7o zY3lp`)_Zdq9wVRoN`PU-iuS2&9?&r^&ZmTR+FOe3xr4)Y7T()e<3w={8*s4GE*S3{g>RezLd=k>lVOOl%flX~|)^$C} z)p<-iJ6H7lvJq6&IkTxY{J!V!7y)g2;mL!FFiP=-h6K_(=Xo-aKCi?LBIv~`!^OkH zFn#p)bl^#rZc8J*SYs%V$vO98zNa1QSv1Q*l}Ja` z`6+0-iiZTIXe-gED$_mw0#}miJo`C{MV045^l_YMn1D`k9hIrOiq~B&Q+GmKLz(7D z0dbjXlyJRK36m*^bV`eO6xF6q35yh?QbNq$5}D9Fm!2v$gGME;wwu4;&7+iJ#q~ru sdTfxS(u$ABJcEx>q*2*Drg52m%I+y;utG8`;Y*sy(#%(Q4vxXU0bD-qasU7T literal 0 HcmV?d00001 diff --git a/target/classes/db/migrations/postgresql/V01__create-tables.sql b/target/classes/db/migrations/postgresql/V01__create-tables.sql new file mode 100644 index 0000000..d3a48ee --- /dev/null +++ b/target/classes/db/migrations/postgresql/V01__create-tables.sql @@ -0,0 +1,44 @@ +CREATE TABLE IF NOT EXISTS cat_category ( + deleted BOOLEAN NOT NULL, + creation_date TIMESTAMP(6) NOT NULL, + id BIGSERIAL PRIMARY KEY, + last_update_date TIMESTAMP(6) NOT NULL, + name VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS ord_order ( + id BIGSERIAL PRIMARY KEY, + deleted BOOLEAN NOT NULL, + total_price DOUBLE PRECISION NOT NULL, + ord_client BIGINT NOT NULL, + ord_payment BIGINT UNIQUE, + creation_date TIMESTAMP(6) NOT NULL, + last_update_date TIMESTAMP(6) NOT NULL +); + +CREATE TABLE IF NOT EXISTS prd_product ( + deleted BOOLEAN NOT NULL, + price DOUBLE PRECISION NOT NULL, + category BIGINT NOT NULL + CONSTRAINT fk_product_category + REFERENCES cat_category, + creation_date TIMESTAMP(6) NOT NULL, + id BIGSERIAL PRIMARY KEY, + last_update_date TIMESTAMP(6) NOT NULL, + name VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS ori_order_item ( + deleted BOOLEAN NOT NULL, + price DOUBLE PRECISION NOT NULL, + creation_date TIMESTAMP(6) NOT NULL, + id BIGSERIAL PRIMARY KEY, + last_update_date TIMESTAMP(6) NOT NULL, + ori_order BIGINT NOT NULL + CONSTRAINT fk_order_item_order + REFERENCES ord_order, + product BIGINT NOT NULL + CONSTRAINT fk_order_item_product + REFERENCES prd_product, + quantity BIGINT NOT NULL +); \ No newline at end of file diff --git a/target/classes/db/migrations/postgresql/V02__insert-fixed-data.sql b/target/classes/db/migrations/postgresql/V02__insert-fixed-data.sql new file mode 100644 index 0000000..1f6fd7a --- /dev/null +++ b/target/classes/db/migrations/postgresql/V02__insert-fixed-data.sql @@ -0,0 +1,4 @@ +insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Lanche'); +insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Acompanhamento'); +insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Bebida'); +insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Sobremesa'); \ No newline at end of file diff --git a/target/classes/db/migrations/postgresql/V03__insert-example-data.sql b/target/classes/db/migrations/postgresql/V03__insert-example-data.sql new file mode 100644 index 0000000..ad5dac8 --- /dev/null +++ b/target/classes/db/migrations/postgresql/V03__insert-example-data.sql @@ -0,0 +1,27 @@ +-- Registros para a categoria 'Lanche' +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 10.99, (SELECT id FROM cat_category WHERE name = 'Lanche'), NOW(), NOW(), 'Hambúrguer'); + +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 8.99, (SELECT id FROM cat_category WHERE name = 'Lanche'), NOW(), NOW(), 'Sanduíche de Frango'); + +-- Registros para a categoria 'Acompanhamento' +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 3.99, (SELECT id FROM cat_category WHERE name = 'Acompanhamento'), NOW(), NOW(), 'Batata Frita'); + +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 2.99, (SELECT id FROM cat_category WHERE name = 'Acompanhamento'), NOW(), NOW(), 'Nuggets'); + +-- Registros para a categoria 'Bebida' +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 4.99, (SELECT id FROM cat_category WHERE name = 'Bebida'), NOW(), NOW(), 'Refrigerante'); + +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 2.49, (SELECT id FROM cat_category WHERE name = 'Bebida'), NOW(), NOW(), 'Suco'); + +-- Registros para a categoria 'Sobremesa' +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 6.99, (SELECT id FROM cat_category WHERE name = 'Sobremesa'), NOW(), NOW(), 'Sorvete'); + +INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) +VALUES (false, 4.49, (SELECT id FROM cat_category WHERE name = 'Sobremesa'), NOW(), NOW(), 'Bolo de Chocolate'); \ No newline at end of file diff --git a/target/classes/messages_pt_BR.properties b/target/classes/messages_pt_BR.properties new file mode 100644 index 0000000..e69de29 diff --git a/target/test-classes/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.class b/target/test-classes/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.class new file mode 100644 index 0000000000000000000000000000000000000000..58adf4b990301b2917950476c45cc3ab997370dc GIT binary patch literal 577 zcmbVJ%Sr<=6uoJy)wbGN-3Tsp=L5__DB=sM;A*g7OZS;HjvmYvNM#**om@yIClo#>F0ThQaChvqzYFss9l+fV$hCI ztD7>5l^uyVrARk2Qlw*H(feP)n!86Lokag_c*>w9jdtqEMMg|WYxB0$4l^~z0;y47 zYvaOzl-r7oP588=bqRBHw2sJ;``JmUF*K!>>KgsLJAdtY=˗xaqUqE7Ct$kd~; z4?H%;aYvGL!!Q{ihKfsyhfc5!b$S*5d8Bs%2Fvuv$ub|=e*yL!(hWkN2BI_xTk`_4 nE93#JQnnJv2juy>U&Q7QBAqJ`+f?XfJ7g=c7O)H7(RF}NWR{Lo literal 0 HcmV?d00001 From fe1317f0185f59eae8307073d44db3e3383191f7 Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 13:16:58 -0300 Subject: [PATCH 02/14] fix: miss typing --- .../grupo63/serviceorder/usecase/product/ProductUseCase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.java b/src/main/java/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.java index 47844d9..fc785e2 100644 --- a/src/main/java/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.java +++ b/src/main/java/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.java @@ -23,7 +23,7 @@ public Product create(Product entity, IProductGateway gateway) { } @Override - public Product read(Long id, IProductGateway gateway) throws NotFoundException {or a street fighter player + public Product read(Long id, IProductGateway gateway) throws NotFoundException { return gateway.findByIdAndDeletedFalse(id).orElseThrow(NotFoundException::new); } From b4c4d09c01481562a268859cd01dfcbd8ad75bff Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 13:58:27 -0300 Subject: [PATCH 03/14] chore: creates jpa configurer --- .../product/ProductAPIController.java | 2 +- .../serviceorder/config/JPAConfigurer.java | 20 ++++++++++++++++++ .../controller/ProductController.java | 4 ++-- .../product/ProductAPIController.class | Bin 5760 -> 5750 bytes .../serviceorder/config/JPAConfigurer.class | Bin 0 -> 1493 bytes .../controller/ProductController.class | Bin 4740 -> 4657 bytes 6 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 src/main/java/br/com/grupo63/serviceorder/config/JPAConfigurer.java create mode 100644 target/classes/br/com/grupo63/serviceorder/config/JPAConfigurer.class diff --git a/src/main/java/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.java b/src/main/java/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.java index 82dc7d8..c9c6410 100644 --- a/src/main/java/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.java +++ b/src/main/java/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.java @@ -40,7 +40,7 @@ public ResponseEntity> listByCategoryName( description = "Cria um produto com nome, preço, estoque inicial e categoria. Possíveis categorias (IDs): " + "1 - Lanche, 2 - Acompanhamento, 3 - Bebida, 4 - Sobremesa") @PostMapping - public ResponseEntity create(@Valid @RequestBody ProductControllerDTO dto) throws ValidationException { + public ResponseEntity create(@Valid @RequestBody ProductControllerDTO dto) { return ResponseEntity.ok(controller.create(dto)); } diff --git a/src/main/java/br/com/grupo63/serviceorder/config/JPAConfigurer.java b/src/main/java/br/com/grupo63/serviceorder/config/JPAConfigurer.java new file mode 100644 index 0000000..28be824 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/config/JPAConfigurer.java @@ -0,0 +1,20 @@ +package br.com.grupo63.serviceorder.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.auditing.DateTimeProvider; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +import java.time.LocalDateTime; +import java.util.Optional; + +@Configuration +@EnableJpaAuditing(dateTimeProviderRef = "auditingDateTimeProvider") +public class JPAConfigurer { + + @Bean(name = "auditingDateTimeProvider") + public DateTimeProvider dateTimeProvider() { + return () -> Optional.of(LocalDateTime.now()); + } + +} diff --git a/src/main/java/br/com/grupo63/serviceorder/controller/ProductController.java b/src/main/java/br/com/grupo63/serviceorder/controller/ProductController.java index a7c6f25..93bfb3b 100644 --- a/src/main/java/br/com/grupo63/serviceorder/controller/ProductController.java +++ b/src/main/java/br/com/grupo63/serviceorder/controller/ProductController.java @@ -20,7 +20,7 @@ public class ProductController { private final ProductUseCase useCase; private final IProductGateway gateway; - public ProductControllerDTO create(ProductControllerDTO productControllerDTO) throws ValidationException { + public ProductControllerDTO create(ProductControllerDTO productControllerDTO) { Product product = new Product(); ProductAdapter.fillEntity(productControllerDTO, product); product = useCase.create(product, gateway); @@ -35,7 +35,7 @@ public List list() { return useCase.list(gateway).stream().map(ProductPresenter::toDto).toList(); } - public ProductControllerDTO update(ProductControllerDTO productControllerDTO, Long id) throws ValidationException, NotFoundException { + public ProductControllerDTO update(ProductControllerDTO productControllerDTO, Long id) throws NotFoundException { Product entity = useCase.read(id, gateway); ProductAdapter.fillEntity(productControllerDTO, entity); entity = useCase.update(entity, gateway); diff --git a/target/classes/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.class b/target/classes/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.class index 9a5d28aff3c945e073072c9cd30303ba7dfd59b3..97a7e1fad8ea8e20654e225f0609cb502a74bc69 100644 GIT binary patch delta 452 zcmZqB{id@)m6LJ(aJg0_rxuiC=I0f&Go&yw*iXL5uQEA`lWQ|K zk2@0^J3~GrgCkT-o^d}=tJ7pHW}(SieCnGo@UgHkvQ54!(d3F(ZQ{L;U0l zVdt;}hD0DQ2`I(_q>~w-)+7K0Al9UUt&u@klLoRToxu~R+$)-av6vwPY(5VoP#_Z| zSj>*+*&v-cK%F25C^FR>;N_(od15H*1dd*eTM+)IJkjcqNo}0W{R9hIEvtNo%2LQ-UMnnJr delta 455 zcmZutJxjw-6g}@n8)774lT<1qbm(H$p{roAT8pJP7HjKgtlFq)F%FLYhdVg?3luVo z2>uS;b$9l@)KHWThx_sFz2}_wy?D3ulsBx2%B|Pw-*kIHsAHEbYg0VZtJsKqBP&xn zP6bLdZ7oM{W>sneFZ@`h1uacqW)RIxJ!?XzzU|Uyy4cIjTLm-P|3hecUhZC+6nodIF@z8+gET)+o z(wr-rF1C2B)`AG($M+`%H!f5&gh#ql%U%8#c%?Q2-c$l|=+U*aJ+B1FSU`$n69Wl` ujGcP)?i7mtC_fqb$4|n{m-B3G#jVc{t*OhM-^=`m9zD1Pdz9=C_x=ZkJ4MO> diff --git a/target/classes/br/com/grupo63/serviceorder/config/JPAConfigurer.class b/target/classes/br/com/grupo63/serviceorder/config/JPAConfigurer.class new file mode 100644 index 0000000000000000000000000000000000000000..3a1cc41293e26e1ade7881239b4bf21903e216e1 GIT binary patch literal 1493 zcmbVMTT>G;6#i05SIZ&=Zy?@9E#88tcquvqsH0B3j4-_Tl(wM;w#iO51^rk0B*TM0 z!0|UZo@`rZi^!-Co8+8)=X~e3`SxSyD}aZXFCvG50QnGuC@_@P#irnq&`tijwl3?A zp)jwsa*r4W%G0Z3WOX3KK@{ntDcvix#V}W%t{U6qNoyF~ zag1Rs#kHM^`0LmyqeaA!Giwaxa>qv|!%Ej}AG{J^oMEPBdEK;l)3#$XcZ(;|ZmPO8 zmcpkCy{4M{#hZnt^whS}GUS&`Lo$q1m6osCt(vqeq85>6EKO=vSmoueGVk82gkiS& zuS6AU6_vNIpbQgl+u9d!RV9i@7PK}_`230E`kpPKB%J)@Ot)n8SH;<9Pmx_qkAn)DU#hVL3p)87W#D|?zDMZCDD zAw?(ndMvn=u}PFO_G7PgPqc5vi&!jlXOx^A-kr@`Nn=x5G{z;)iuk2;?@c2qVQQp+ z>qQ*LjSv@7X{Lyqm<@0%#BJPRIG;{oI%!I8nhl!kv|!{ytckjhgkh+amA+@kvuo60 zd?s`wlF3xnn2mN^$xQLG^M74d(`UHyF_!;#*`eIuw)^j7lUx!}w5*(@VusJPmUbx; zNg|T~_ZTkzR+GKb3-Ey9^!`wKe>%0mIch?V-X&lF%s*qaPLRZDXS5Gq`2zNt4mq5l z)n5a{n4~rA0B{ngNFq-7_s|>9kmPZN9R$E9I%Ta#GuDN!^%=q(BAc`HoqGqC;C!j* zM}uVV@l5Iu2(~e_jZyECWda&S9v4%ZO9TbIi8)-Ry-cWS@`WoT_;@*`c@@{_nVk;5nmo(j3 zSXoK@0)N2L(n_3Z#iEOobIHE|fKFx9a{UmpCD%CX7=ZXQ*j751@{V){5#8?rVW4JsLxLWXZPk)uM(Q zdN7uSqz|JK@CdAN9BZ&anczadg-xE~jJdgQVVz$rvgkD!R|y^@c9@vPE{&L_QAaMJ z(1$(5;Oa8^WqZ5TPMAfK-c4(`lc3n-SY(&Q$!g0Nk)qX5Vls^k=P87d#Xidqm<{|R zIY$0YOf%6r@Q`T_^7I*s%{wHY5rTyf zVQFD!?MwIq8fRCevY1TH_y7OQoZeJ7sK0$bzW`W5S3(h(r#agMeJcLma@Ov3uC{W8 zTC-HGG$djIVOns^_#&BdDW5UuP^Kq)N0r#=haC5+Xws`I6h|`E?eJp__zqXherqrJ) zK@Cq_OEXrGVIhnxeR%4#hFyV%0CI>xHG?)L(LvOqnDZ0njuqsot;eQ+cW4|lLdrke zO#223^rfd3i`eCj8vNKpiS7HWx`yO{$>1kN7Sdb_$}C%PNRQsgnj!KTUg#L*vY=vG gs;F_dv9Zqmh|8FH%719!7$>-5;$(7-4(>4i10xhpF8}}l From 6e9622be3d84f2cd529139f0b7095d2da46ced5b Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 13:59:00 -0300 Subject: [PATCH 04/14] chore: creates git ignore --- .gitignore | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..853418a --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +# MacOS +.DS_Store From 3414ded53ac29d02120290d06723ff62e7749dc1 Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 16:13:22 -0300 Subject: [PATCH 05/14] fix: small fixes and some missing configs --- .../serviceorder/ServiceOrderApplication.java | 10 +++++ .../serviceorder/adapter/OrderAdapter.java | 1 - .../controller/order/OrderAPIController.java | 9 ++-- .../serviceorder/config/JwtFilter.java | 40 ++++++++++++++++++ .../serviceorder/config/JwtFilterConfig.java | 23 ++++++++++ .../serviceorder/config/JwtService.java | 32 ++++++++++++++ .../serviceorder/config/ValidationConfig.java | 29 +++++++++++++ .../controller/dto/OrderControllerDTO.java | 1 - .../serviceorder/entity/order/Order.java | 4 +- .../order/entity/OrderPersistenceEntity.java | 8 +--- .../presenter/OrderPresenter.java | 1 - .../postgresql/V01__create-tables.sql | 1 - src/main/resources/messages_pt_BR.properties | 25 +++++++++++ .../ServiceOrderApplication.class | Bin 842 -> 1136 bytes .../serviceorder/adapter/OrderAdapter.class | Bin 4545 -> 4483 bytes .../controller/order/OrderAPIController.class | Bin 4770 -> 4815 bytes .../controller/dto/OrderControllerDTO.class | Bin 2232 -> 1976 bytes .../serviceorder/entity/order/Order.class | Bin 4290 -> 3978 bytes .../order/entity/OrderPersistenceEntity.class | Bin 5335 -> 4988 bytes .../presenter/OrderPresenter.class | Bin 2853 -> 2791 bytes .../postgresql/V01__create-tables.sql | 1 - target/classes/messages_pt_BR.properties | 25 +++++++++++ 22 files changed, 192 insertions(+), 18 deletions(-) create mode 100644 src/main/java/br/com/grupo63/serviceorder/config/JwtFilter.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/config/JwtFilterConfig.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/config/JwtService.java create mode 100644 src/main/java/br/com/grupo63/serviceorder/config/ValidationConfig.java diff --git a/src/main/java/br/com/grupo63/serviceorder/ServiceOrderApplication.java b/src/main/java/br/com/grupo63/serviceorder/ServiceOrderApplication.java index fe8b3fe..9fd7ee9 100644 --- a/src/main/java/br/com/grupo63/serviceorder/ServiceOrderApplication.java +++ b/src/main/java/br/com/grupo63/serviceorder/ServiceOrderApplication.java @@ -1,9 +1,19 @@ package br.com.grupo63.serviceorder; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; +import io.swagger.v3.oas.annotations.security.SecurityScheme; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; +@SecurityScheme( + name = "bearerAuth", + type = SecuritySchemeType.HTTP, + scheme = "bearer", + bearerFormat = "JWT", + in = SecuritySchemeIn.HEADER +) @SpringBootApplication @EnableFeignClients public class ServiceOrderApplication { diff --git a/src/main/java/br/com/grupo63/serviceorder/adapter/OrderAdapter.java b/src/main/java/br/com/grupo63/serviceorder/adapter/OrderAdapter.java index fa97c67..90ea5d4 100644 --- a/src/main/java/br/com/grupo63/serviceorder/adapter/OrderAdapter.java +++ b/src/main/java/br/com/grupo63/serviceorder/adapter/OrderAdapter.java @@ -38,7 +38,6 @@ public static void fillEntity(OrderControllerDTO dto, Order entity) { }).toList()); entity.setClientId(dto.getClientId()); - entity.setPaymentId(dto.getPaymentId()); } } diff --git a/src/main/java/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.java b/src/main/java/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.java index 231bc03..3e0866a 100644 --- a/src/main/java/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.java +++ b/src/main/java/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.java @@ -42,7 +42,8 @@ public ResponseEntity create(@Valid @RequestBody CreateOrder @Operation( tags = {"3ª chamada - Fluxo principal - Pagamento", "5ª chamada - Fluxo principal - Acompanhamento e entrega"}, summary = "Recupera pedido", - description = "Exibe os dados de um pedido a partir de seu id") + description = "Exibe os dados de um pedido a partir de seu id", + security = @SecurityRequirement(name = "bearerAuth")) @GetMapping("/{id}") public ResponseEntity read(@PathVariable("id") Long id) throws NotFoundException { return ResponseEntity.ok(controller.read(id)); @@ -50,7 +51,8 @@ public ResponseEntity read(@PathVariable("id") Long id) thro @Operation( summary = "Listar pedidos", - description = "Lista todos os pedidos") + description = "Lista todos os pedidos", + security = @SecurityRequirement(name = "bearerAuth")) @GetMapping public ResponseEntity> list() { return ResponseEntity.ok(controller.list()); @@ -58,7 +60,8 @@ public ResponseEntity> list() { @Operation( summary = "Excluir pedido", - description = "Exclui um pedido por id") + description = "Exclui um pedido por id", + security = @SecurityRequirement(name = "bearerAuth")) @DeleteMapping("/{id}") public ResponseEntity delete(@PathVariable("id") Long id) throws NotFoundException { controller.delete(id); diff --git a/src/main/java/br/com/grupo63/serviceorder/config/JwtFilter.java b/src/main/java/br/com/grupo63/serviceorder/config/JwtFilter.java new file mode 100644 index 0000000..b16a126 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/config/JwtFilter.java @@ -0,0 +1,40 @@ +package br.com.grupo63.serviceorder.config; + +import br.com.grupo63.serviceorder.ServiceOrderApplication; +import io.jsonwebtoken.Claims; +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; + +import java.io.IOException; +import java.security.GeneralSecurityException; + +@RequiredArgsConstructor +public class JwtFilter implements Filter { + + private final JwtService jwtService; + private static Logger logger = LoggerFactory.getLogger(ServiceOrderApplication.class); + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { + try { + String authHeader = ((HttpServletRequest) request).getHeader("Authorization"); + logger.info("Auth header: " + authHeader); + if (!StringUtils.hasLength(authHeader) || !StringUtils.startsWithIgnoreCase(authHeader, "Bearer ")) { + throw new GeneralSecurityException("Missing or invalid authorization header"); + } + String jwt = authHeader.substring(7); + Claims claims = jwtService.getClaims(jwt); + request.setAttribute("clientId", claims.get("sub")); + filterChain.doFilter(request, response); + } catch (Exception e) { + ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.getWriter().write("Unauthorized: Missing or incorrect JWT Token."); + logger.info("Unauthorized: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/br/com/grupo63/serviceorder/config/JwtFilterConfig.java b/src/main/java/br/com/grupo63/serviceorder/config/JwtFilterConfig.java new file mode 100644 index 0000000..128da9f --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/config/JwtFilterConfig.java @@ -0,0 +1,23 @@ +package br.com.grupo63.serviceorder.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.List; + +@Configuration +public class JwtFilterConfig { + + @Autowired + private JwtService jwtService; + + @Bean + public FilterRegistrationBean jwtFilterFilterRegistrationBean() { + FilterRegistrationBean jwtFilterFilterRegistrationBean = new FilterRegistrationBean<>(); + jwtFilterFilterRegistrationBean.setFilter(new JwtFilter(jwtService)); + jwtFilterFilterRegistrationBean.setUrlPatterns(List.of("/orders")); + return jwtFilterFilterRegistrationBean; + } +} diff --git a/src/main/java/br/com/grupo63/serviceorder/config/JwtService.java b/src/main/java/br/com/grupo63/serviceorder/config/JwtService.java new file mode 100644 index 0000000..3b430ef --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/config/JwtService.java @@ -0,0 +1,32 @@ +package br.com.grupo63.serviceorder.config; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.io.Decoders; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.security.Key; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; + +@Service +public class JwtService { + + @Value("${jwt.token.key.public}") + private String jwtSigningKey; + + public Claims getClaims(String token) throws NoSuchAlgorithmException, InvalidKeySpecException { + return Jwts.parser().setSigningKey(getSigningKey()).build().parseClaimsJws(token) + .getBody(); + } + + private Key getSigningKey() throws NoSuchAlgorithmException, InvalidKeySpecException { + byte[] keyBytes = Decoders.BASE64.decode(jwtSigningKey); + X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes); + KeyFactory kf = KeyFactory.getInstance("RSA"); + return kf.generatePublic(spec); + } +} diff --git a/src/main/java/br/com/grupo63/serviceorder/config/ValidationConfig.java b/src/main/java/br/com/grupo63/serviceorder/config/ValidationConfig.java new file mode 100644 index 0000000..79afe38 --- /dev/null +++ b/src/main/java/br/com/grupo63/serviceorder/config/ValidationConfig.java @@ -0,0 +1,29 @@ +package br.com.grupo63.serviceorder.config; + +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.i18n.FixedLocaleResolver; + +import java.util.Locale; + +@Configuration +public class ValidationConfig { + + @Bean + public MessageSource messageSource() { + ResourceBundleMessageSource source = new ResourceBundleMessageSource(); + source.setBasename("messages"); + source.setDefaultEncoding("UTF-8"); + return source; + } + + @Bean + public LocaleResolver localeResolver() { + FixedLocaleResolver localeResolver = new FixedLocaleResolver(); + localeResolver.setDefaultLocale(new Locale("pt", "BR")); // Default locale is Portuguese Brazil + return localeResolver; + } +} \ No newline at end of file diff --git a/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.java b/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.java index cde0f9e..e9b77a1 100644 --- a/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.java +++ b/src/main/java/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.java @@ -18,6 +18,5 @@ public class OrderControllerDTO extends AbstractControllerDTO { private Double totalPrice; private Long clientId; private List items = new ArrayList<>(); - private Long paymentId; } diff --git a/src/main/java/br/com/grupo63/serviceorder/entity/order/Order.java b/src/main/java/br/com/grupo63/serviceorder/entity/order/Order.java index 8db9e0d..230a15e 100644 --- a/src/main/java/br/com/grupo63/serviceorder/entity/order/Order.java +++ b/src/main/java/br/com/grupo63/serviceorder/entity/order/Order.java @@ -18,14 +18,12 @@ public class Order extends Entity { private Double totalPrice; private Long clientId; private List items = new ArrayList<>(); - private Long paymentId; - public Order(Long id, boolean deleted, Double totalPrice, Long clientId, List items, Long paymentId) { + public Order(Long id, boolean deleted, Double totalPrice, Long clientId, List items) { super(id, deleted); this.totalPrice = totalPrice; this.clientId = clientId; this.items = items; - this.paymentId = paymentId; } public OrderItem getByProductId(Long id) { diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.java b/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.java index 9826524..539c1cc 100644 --- a/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.java +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.java @@ -31,10 +31,6 @@ public class OrderPersistenceEntity extends PersistenceEntity { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "order") private List items = new ArrayList<>(); - @Basic - @Column(name = "ord_payment", nullable = false) - private Long paymentId; - public OrderPersistenceEntity(Long id) { this.id = id; } @@ -43,7 +39,6 @@ public OrderPersistenceEntity(Order order) { super(order); this.totalPrice = order.getTotalPrice(); this.clientId = order.getClientId(); - this.paymentId = order.getPaymentId(); this.items = order.getItems().stream().map(item -> new OrderItemPersistenceEntity(item, this)).toList(); } @@ -53,8 +48,7 @@ public Order toModel() { this.isDeleted(), this.getTotalPrice(), this.getClientId(), - this.getItems().stream().map(OrderItemPersistenceEntity::toModel).toList(), - this.getPaymentId()); + this.getItems().stream().map(OrderItemPersistenceEntity::toModel).toList()); } } diff --git a/src/main/java/br/com/grupo63/serviceorder/presenter/OrderPresenter.java b/src/main/java/br/com/grupo63/serviceorder/presenter/OrderPresenter.java index f5ec721..a508d76 100644 --- a/src/main/java/br/com/grupo63/serviceorder/presenter/OrderPresenter.java +++ b/src/main/java/br/com/grupo63/serviceorder/presenter/OrderPresenter.java @@ -11,7 +11,6 @@ public static OrderControllerDTO toDto(Order entity) { dto.setId(entity.getId()); dto.setTotalPrice(entity.getTotalPrice()); - dto.setPaymentId(entity.getPaymentId()); dto.setClientId(entity.getClientId()); dto.setItems(entity.getItems().stream().map(orderItemEntity -> { OrderItemControllerDTO orderItemUseCaseDTO = new OrderItemControllerDTO(); diff --git a/src/main/resources/db/migrations/postgresql/V01__create-tables.sql b/src/main/resources/db/migrations/postgresql/V01__create-tables.sql index d3a48ee..393467d 100644 --- a/src/main/resources/db/migrations/postgresql/V01__create-tables.sql +++ b/src/main/resources/db/migrations/postgresql/V01__create-tables.sql @@ -11,7 +11,6 @@ CREATE TABLE IF NOT EXISTS ord_order ( deleted BOOLEAN NOT NULL, total_price DOUBLE PRECISION NOT NULL, ord_client BIGINT NOT NULL, - ord_payment BIGINT UNIQUE, creation_date TIMESTAMP(6) NOT NULL, last_update_date TIMESTAMP(6) NOT NULL ); diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index e69de29..c7a81d6 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -0,0 +1,25 @@ +# Response messages +default.title.unknownError=Erro +default.title.unknownError.description=Ocorreu um erro desenhecido +default.title.validationError=Formulário com erros +default.title.notFoundError=Não encontrado +default.title.notFoundError.description=O objeto que esta tentando acessar não foi encontrado + +# Order +order.advanceStatus.title=Erro ao avançar status do pedido +order.advanceStatus.finished=Não é possível avançar um pedido já finalizado +order.advanceStatus.notPaid=O pedido ainda não foi pago +order.create.items.notEmpty=O pedido precisa ter ao menos 1 item para ser criado +order.create.item.productIdNotNull=O id do item do pedido precisa estar definida +order.create.item.productIdValid=O id do item do pedido precisa estar definida +order.create.item.quantityNotNull=A quantidade dos items dos pedido precisa estar definido +order.create.item.moreThan1Quantity=A quantidade dos items dos pedido precisa ser de pelo menos 1 + +# Product +product.id.notNull=Para atualizar um produto o nome é obrigatório +product.name.notEmpty=O nome é obrigatório +product.name.notNull=O nome é obrigatório +product.price.notNull=O preço é obrigatório +product.price.notLessThanZero=O preço precisa ser maior que 0 +product.category.notNull=A categoria precisa estar registrada +product.category.notLessThanOne=A categoria precisa estar registrada \ No newline at end of file diff --git a/target/classes/br/com/grupo63/serviceorder/ServiceOrderApplication.class b/target/classes/br/com/grupo63/serviceorder/ServiceOrderApplication.class index 18e302214880a8da0ac256a7e0d79088069e903f..f6bee5fcaf1a282fc13f73f28a0e0b6031c5e85f 100644 GIT binary patch delta 353 zcmX@b_JM=z)W2Q(7#J9A8MHTYi7?fh`()7R_ml^BlCl>1`=H=y=B$j06 z=N0Q0rzV#cWtLRx2SXXb$r-7+sn(1PEP08!sf-LWq_(q2&W=e9$faH3I4Ya7$<{a*C;_0wxy zSJ#~Qn42~g+;ZsRVu*`Dle;=`&*3y@LOd{NQ=>fzRqZQOWr1l0k8B?E#Nw&LGoJTs z3ltgN*9H;wJupmtE3nk70>AgIK}mliQoUF9S&ktGe9>NvZVB>e7i(sd4*Mi_asc*o zKyH2}(;=w6svg=7Y=m))r!4zDLv!t9;Bmo8V@`=aBdf!om(_6!Lbl$sq_u`F`8bdGiP4zL0+&Ve z;}R@$S+4yWmvtp^m*y`Fj`xwO*PvcDxonBQ6PAZ|^&>PgyQWdOKG~5{Vj^cbCsX_) z@H`hp+P~$LTdWWj^8EcOD&-H+Z&lbwvR;<3-4K)MWw#zO@ZG`#-mMVDC8>L;yqtwy k;i`DOgol#6#tm-wM|Zf-3#kp3TACm)Mb#_b@Q&es0sGdbJ^%m! delta 936 zcmY+CSx;0!5QV?XESI_VFn~s*0Z|d6!ypkAA5bE1l7QecDvAp#C?cRTD7XRQzGJ)Z z`@SK1Ni-obF){I1=!*}&`EHEWGpLxGbXQlMQ|ENo?aBU-?R@_AZV;HuK%eu`JI|(4 zQAN3h+E^E>s_kg1YmSv|a0IYOv6!F~TK_9VS!%OPvD}bK^+cysXZl9^S149eqlAA42wmH@i>u{)Loy~g12Gg}r{|HRe-+ZGAqtq)lQf!fIENpLBUuUol zip`Wt(#ZcwZc#MRtRw#U-mQrq+4`zKExm>93Lim3j49gKp$GkCfp%8gbXZjCuSuDD z?TEq*hjw-=_850Qkuz6~vd@q^`*+*lz1B@#uOeBu9cFMxagj@@TnhQQZxRm_y_`+u zk?vESDNh`p^33MB;sr1JOM>GpZ@)#3eic6YSS0}Ta6nE0ia02!E^UP>tZrQy%Bwf1FkV^baEQaQ zo9GBf(zp<6#m z&FVDb6B2#ml5%7^nscHO5R>P*AlClAM}bYPxR7xVxhR%D!i*>FJ<)2p`c6xhT?6bj zBEv^DYS^gKxXcx)dnmpdhh5{k?B)?3OY#P{xH}Zx;~}P1y42bU(I>86^9Gl(zXAOp Bvef_p diff --git a/target/classes/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.class b/target/classes/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.class index 43a2523acc39b0f518712e1ec94bd21c91777430..64be4568629e778f5af11179c29bbddda8b4fc0d 100644 GIT binary patch delta 151 zcmZ3adR}!ys{o_n9phNxnO9EO-^21W;l zSO!LhxMGI*$qxkl7_BDj3(6}fgLN^3loo-M7NaYT7qnt^X5e6OnLJO>PC*-?ycDFo K3|;wK!L0z&qad09 delta 112 zcmX@Fx=3|Hs{o_H9phNxnOoXPJ6{1`1J z+X>1Gihz|df#ixna>bKt1+7>e7&sUlC+`uo6P7{9mxAQW7|JJq6p){6Ei?rH&_o(m diff --git a/target/classes/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.class b/target/classes/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.class index 2b6ba13786ae09bf3ca8c30c46711f910e1808c2..70d4497c56810361e3f668bcba7a66f26be36fbe 100644 GIT binary patch delta 747 zcma)4IZgvX5UkltXz{VwD}yok;4rWT1GWf2LI{Zn@c>d19zkOH2T1b>QY?XF5fBkr zM0|r!AZmIR+rb7T+cmRYUDe$)UK$s}&!4w<0O#nB!b_#^)V(^<6V=y?&Xal|>gh-C zT3@&yy5vptx7R&&;h=;vSq>^#mRLX$3M+!ESRnSX3Kuor3>iJfhQ9UdgAtL7HGT_> zK#u=nvU6DHDY2QTqrnq7qND^FEk}@1bI~NuQORT#P~}aFIPa1Y(OAUGD7Ca9h5~+7 zO@~2iVDv+&mKS}aZEHoTw!$X1NH8578X}{gydZieaHIiK4^*3x{V91H?F@39lH252 zb~%&1gI#LW^jA<3t2Q^z$h9NiqgH~B;jr={^ zD;c4}J`OO*s2TsardgSiwXmjHi9(mtwD00(-ex#^7q;0yn^)4woKO4In)GQG7Rd6a ODzl{@QSDfo@BISwW-?s> literal 2232 zcmb_d?QYaY6g{(_$;Kfj*#sz|O>lu=Rm zX)kixVc+RS!-MetT}ONE{r0}w>v=)flbwDTa0ql1(iS-#9Xe0<20C)vdNVa|?L1eg zJoW=$ZzvSk)_1FzQdoHFzH^7&FXeUwi$5g54Ss3RhEj&RUqqf`>-h%MZL?hW$M++HqL}sY}>)d%JGr%Q`WZ z^uEvPet+U5CKFItnv8yUaLi!;?CJfmv+YK1-_u@1w)ZDb^>nJ7SFhQwr+3EMr@pp6 z21^=9VTQ2Hv~%VsK;~@NS%k>hGQ)J=ToBW*3a^fxQse1lrC^bHd(^J8gUOT@bLuUv zGDF-br-gBpNl7qM#3V@_15)`-0lZG!QtRm?C7~^HkEK<65e}oa_oFY}eD2f7;-mIj%N7KsEkC_00!N zAEDN`b_Ba|{Rs8O4Ow0&9pU`%1QziXzh^iC7HR7wv9Q9`y*LmheZv()8bQj;M3Tr{ zm1olUt{OQdd`qiEN%7t?_bzjOwnS%}nb>r&3AK|vR*m`!zoLGFaB;OW>P2Y52$i1% zFl&Uaa28Y9iAaSjxSGUrI7+N?;}6)saS{g*Dp1S{zp-;UbzZ}Ij&nWhypZeMz%^1x z7URsdtaClbIX=?s~g&nm#B9Zor f>v@mH@ACDV&L8iG&y_^3SgK#TR^dLC7x3U;1v}KC diff --git a/target/classes/br/com/grupo63/serviceorder/entity/order/Order.class b/target/classes/br/com/grupo63/serviceorder/entity/order/Order.class index 3e566c3e3ff6ebc1b4a297cd0362edf4fb540349..e58bf0765cef44e37164fddb56767bd43a2e8ccd 100644 GIT binary patch delta 1480 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 Q;0sC;)cF!$<68{=2fma0IRF3v diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.class b/target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.class index 37117ad9bc4c4931783733fd03c93dd29f6bb624..320567d77d80a99c78fea8669b09b65d770f2e4c 100644 GIT binary patch delta 1604 zcmaJ>ZC6xP6n@T~xp&}l=Y=s9QXD`=nL7w5k%Wp?WSOLCW&%-`j6ji^GgekMXlA9o zAI-PkRv-FU(S$5v)eqNt7qSP9cH4{t3%;7Rw;C#|Pa4fN>(CxShl5V6*WVbMtu6<5pc-d*~jM~_Zy>k7S!jzu2yGy<1 zpQ_Xv*{f8y{=I60{;6t}I!ozH=}2{2mApe-~Y@k40ml2)@t< zV_n4%45ZM=EcTJqJGgtC>wd0JI;=W8V`o=S6Bg&S zj3+m9Hfj^EaNIU874QzF9;69G+ z91n6lOeJ{I*RqEWd=*p#gld~Dq)ZyK~%!#apo-n zoaQP-rrcSmqC1bs;4G?{vYVYjgWEQPw7V`~AmlL+qXiHPh>v;xUEfDJ>r~Ju^y~G5 zFr1=IoVIz&emrtA!V}>p8lu9A1ho@9O$6OhVB97dCt3P(ZPU0^!1n4D_wc3QzOO_% zw-u0XlH5ADO5UdXBN`S66L&y;1u}ssyrc2Wniz z*zf%lgn9`tixd4va(Qt9u-3EjTiGhJY6YwYy(A5&@CwF)D0;aH(Uz1hz0k6L4*%uS zf3D)P$mb#SE1bluEQ?S$Q0dcq27VL#zfUQ&swlMO6}tQg7V7(2!jNBz$^P4k1=E!?*D+ W-V3DnQTs8j@zSQF>-ZdBqW)j_A;{eT delta 1955 zcma)6=~G)(96k5tW#Q$K1W*fOSws>bfd&e-P)h3pCIt4tL#nIVx#$bXW z6Ssqz-ON0kR4c%N2_8s zZo-ZG1tw&zK2SZnKXE7#pGz#v#77qwX8Kwuym&xhM1JQRF$_##QXQYlUD2yG)4zBi zx!1X7?pM#a&<0y%T;CilLXp$HI_-?w>XhI5#)`LdfB7Q9Oc&^wt26cqaax}Aw{4V) z`xz4_aVmsUK{wt}G~PAwB;J$1`1|w^1Ww2w^*Y&6)*+|Np1?;2KE@|roHKDApXSb) zRYLzlAS^4&H^@KDfXj=o)MneUY$1#`2JWsJgAR?vGF4&*}0=Tirqf7E^ zATs_0!7HJ&kFc+2!e$a~!2zyZ$5X(yNF&2h%_=R*2RU~Oe!v1dq`)|Ti@a38kPHUH z*=59{v5VNWg3SWaRrCNW*sig=RbUy$1)kKP($~SuK1N#g2%(Lo(@yO+kwhGWtnPIx zLwPDgyzOCTcc{!0K+w1&>=l)x$oe=1x-X-8GI|k%Y=qYPV6&VQ={TPZ{jIreg=%VKBRxg2&%;G-dmp_rWJ=;j!f=L1#Q z+GyJ{!qIl#KU$+xBBg@MQX#+*2skDLEZlB8G=J-`Q&ohssz<3EW=znE4O{N(c#5kw zBej?0o>HlT?lw^0X0`xZJDXiuPm{eH9wnXpIdnr-d16>j1}!#9e;Y59zv1;zm8dQl z=ctr+M}I)=x^xN-s40-goe#bdO(lZEPH>iSc64pYXg+r&SDe}?PTf!<*uL*ECXbe+ z5K|yo+k2ZrQwbD-XOML$Y~!e0@I+(Fs9mpVJG#P(wtpi}-bIh&qEox7=mn13|0JQt zuEGreUrhToaWIw10?*<(n!hBERc^3M{clpLj6^~4c&y^d|6;0UZ2eB~*z(!v0sd@G6)10KbOU)wBEto3iFZYV;-_ud~kVZM=`qxMvXPb9{-fQS&d* CnFx3Q diff --git a/target/classes/br/com/grupo63/serviceorder/presenter/OrderPresenter.class b/target/classes/br/com/grupo63/serviceorder/presenter/OrderPresenter.class index dbe4d76f7d435f53c4e1a38a44ef3bc094c676e8..09dbe055a55622175ef9ab2b05ee575e66349977 100644 GIT binary patch delta 798 zcmYk3$x>5M5Qe{V3AxGTNP+=^pn@RE6p?@^2x`CyMFnRDl_3$M2m(PxRGik9@jQSl z_F7cM0;^oQaO+B6z=bPcz_M@Dl1=yN|8)QTclUDf_af)>ueFarCokSPNoAH*aBGET z8zDvBTq4yynM_Qjdg2awRB5(TZN8|=yq(n8)N1Oee{FSmBbr?_nl7s$zlo?#v!;bT zim<7$!p2zLWlikW?4w%YO-=VE=TZ(f?V9~`n4eaa=YS%XPH#>R6`Do6An1so9ETX% zrb`huGv4Tu3l_NG5zSEoB5)#+>YpE-N+nYZ?&on$&p+Y+@fasHy@VA$$?uy@jwjsY z)0#7s2`E$k1!MGU&T>xSWHYDZ^W!N+YfWwM*leRI^+f#_Ttyc}Q94~^+C71Cm+G=+ z!0oHERN1PYxXqBFMP@RMxg{&#JU=WoYd+Zx%NuGkyL@Xb?+I1vw~k@roTbul&W$R|In-WT#if>g+q0Ym7+b zXOuCi9G3S>sdYIHn6LiorB!w))@XoLc3Wav6&c#<-%5ss%UX#~tRq$vWCJDSQ$awk zTSA-o4ob5fi~q1PPF(VRw36VusF;u_R|$-qR0eh>3p6k37E2KMKRYX1Eb#fxy+KpuIyN~j13SjZFvLPSBq0aOfvXjE{<0huC3hA;#bC!D91)N|#| zh2>U@s#su^?p^p7T@eY*Qc_S+o$>)(aXKoc)M*m2dP2V=>O z-szFpXtI64#-d15OhBP0|NHP!swpE=;S)w=IKDzC*K9HbpAc4YAC;OaLe3ji;tR9c zqDHfYtq=&93eW4q&bRj+Mehs93KE_N$&onI=~>2*a48fen&A*Apm6Vdo&(n#B< zX=cCk#Z{WtqG+C--Qc|R1lQO^aND$@Ee<+GY30suPv(q4vkZDz6J6HbIn_Iwj3=kf z=TXhEW!BP7!k(WWP2(wT8*TOY5TAg>^U^qoERF$G)o@&JcwJ=Y;OP)qWioK!t zlIg-!FURZr@n+9d;HQy1xssn23KqNNEL9}VRmsedqYg1F3PvPKR|4a=&AdjgKvR-# zB!oW^>H5flsFBc`qTSd-DUKN1k>Z50r&F9uadBCR87E&xg)C_l5E1KGPc}v55E9P} sza%Hj7~>LU5M+W$>Fp*du}k`26Khs diff --git a/target/classes/db/migrations/postgresql/V01__create-tables.sql b/target/classes/db/migrations/postgresql/V01__create-tables.sql index d3a48ee..393467d 100644 --- a/target/classes/db/migrations/postgresql/V01__create-tables.sql +++ b/target/classes/db/migrations/postgresql/V01__create-tables.sql @@ -11,7 +11,6 @@ CREATE TABLE IF NOT EXISTS ord_order ( deleted BOOLEAN NOT NULL, total_price DOUBLE PRECISION NOT NULL, ord_client BIGINT NOT NULL, - ord_payment BIGINT UNIQUE, creation_date TIMESTAMP(6) NOT NULL, last_update_date TIMESTAMP(6) NOT NULL ); diff --git a/target/classes/messages_pt_BR.properties b/target/classes/messages_pt_BR.properties index e69de29..c7a81d6 100644 --- a/target/classes/messages_pt_BR.properties +++ b/target/classes/messages_pt_BR.properties @@ -0,0 +1,25 @@ +# Response messages +default.title.unknownError=Erro +default.title.unknownError.description=Ocorreu um erro desenhecido +default.title.validationError=Formulário com erros +default.title.notFoundError=Não encontrado +default.title.notFoundError.description=O objeto que esta tentando acessar não foi encontrado + +# Order +order.advanceStatus.title=Erro ao avançar status do pedido +order.advanceStatus.finished=Não é possível avançar um pedido já finalizado +order.advanceStatus.notPaid=O pedido ainda não foi pago +order.create.items.notEmpty=O pedido precisa ter ao menos 1 item para ser criado +order.create.item.productIdNotNull=O id do item do pedido precisa estar definida +order.create.item.productIdValid=O id do item do pedido precisa estar definida +order.create.item.quantityNotNull=A quantidade dos items dos pedido precisa estar definido +order.create.item.moreThan1Quantity=A quantidade dos items dos pedido precisa ser de pelo menos 1 + +# Product +product.id.notNull=Para atualizar um produto o nome é obrigatório +product.name.notEmpty=O nome é obrigatório +product.name.notNull=O nome é obrigatório +product.price.notNull=O preço é obrigatório +product.price.notLessThanZero=O preço precisa ser maior que 0 +product.category.notNull=A categoria precisa estar registrada +product.category.notLessThanOne=A categoria precisa estar registrada \ No newline at end of file From af7b205a9ff7798fb1d8fa17ff974d44e8a2585a Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 16:14:28 -0300 Subject: [PATCH 06/14] fix: missing identification gateway call --- .../usecase/order/OrderUseCase.java | 2 +- .../usecase/order/OrderUseCase.class | Bin 4393 -> 4515 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.java b/src/main/java/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.java index f148dd3..c0f8ccd 100644 --- a/src/main/java/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.java +++ b/src/main/java/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.java @@ -37,7 +37,7 @@ private void fillCurrentPrices(Order order) throws NotFoundException { @Override public Order create(Order entity, Long clientId) throws NotFoundException { - // identificationGateway.getById(clientId).orElseThrow(NotFoundException::new); + identificationGateway.getById(clientId).orElseThrow(NotFoundException::new); fillCurrentPrices(entity); return gateway.saveAndFlush(entity); diff --git a/target/classes/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.class b/target/classes/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.class index 15c93418bce080e778f9d8752c128e1c644faf07..e5d434f09420eedd058c6f933c1c92701afb83f1 100644 GIT binary patch delta 1126 zcmZuwNlz3}5dL1zOgD7*v>lib5d>v|Vh^Z^7!wmS>d7(2o8p2iGvFY&vMY?@uBgaU z1UFRNP*iYO0te$+FJAl+9=)1qtk>N(V7yGdsaM}p^{R)82E*#--_suftV4QKo%E}j zSb!Zmc48Orma9z-mDr5H%b*N`p*uWGC8m4q>ctOGRW~nU7{hu z;44|ST}3lm6twDSLnE)1^JN96|1#+rMtX@-$NbkBqP$OwroUy3NtuHxy3k_cIq%V8 z#!D5iFr?tMjyD)if7h~^|2;!7U#u4s*(gH+9Se9YXhfR9a0)(TVIc}=Dp{frJJLWX zDv(5zRME~mgYB%N$5@(5(M34|*nmQu!CA-%(>ObEj&h*J&*K6`ak_|0Bp{&{mvM#S zRm$p+ej(^nVEn{3T%(MiYPxWPP60*`(BGTr7MgTU63j<2Y>lC!bPBtr6sEBPn82zE zD>8xobPIt6W8QxM_rOZ28zz@j%1G!_c0ssI2 delta 1072 zcmZ9L*-sNu6vn?hU4~Alb%cfl1vOxzPBoZ_aSN$DYKRXeiUKMK1;q-YD57HB5pjd- zzTkozE=0l>crZTelYfMNf-f44-<=r?_|Tr)bI*5vXSp3H8Z0!v{F(X$pcF&H#)RK6 zFb_LS>_nyP4{XV)Hn9u41@y++wq$#4hrl}dO)ro`T9!-&bLMUcqXxA)_L`_ey}%k- z7Ff)i?r;s_>aNkmzCL|^VUvjiNC^b%lc{7|Qoy%#*>(fXXwh-VL@QFVRL?g;#2+!y zhNJSUzaglj-OZUVTe6}f-Fiy+FAF5(uW({yZD>>r^&99yi-o81M|e~8xq$(^(DBm5 zE4&^lH*6we_|Uh(c@=K z7rJ>02ui@8SJ0!NJa47UM{C*faa7o&s7l8tu}8y4IyH3g+n@z((&JFIEpi2!IxJju z>R=LF!*xc_riL^IfLDrq12;YLW(KOnxe7{VQo|IAf%G_5eTFv84^jrKblADBB*V@{ zFNxwmBKz!hXnh=>=JZ*@AeF{Yv`I9G84bFC)egW!+6nUrk`fKKD7}q(FI9q86(05q zpEWEu*ZLX7hBL*6y+L`aP(u-Xrj=gaayM@p7FV% Date: Sun, 28 Jan 2024 16:18:16 -0300 Subject: [PATCH 07/14] fix: wrong context path --- .../identification/IIdentificationGateway.java | 2 +- .../identification/IIdentificationGateway.class | Bin 842 -> 857 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.java b/src/main/java/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.java index 084c77c..4e0268e 100644 --- a/src/main/java/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.java +++ b/src/main/java/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.java @@ -8,7 +8,7 @@ import java.util.Optional; -@FeignClient(name = "identification", url = "/clients") +@FeignClient(name = "identification", url = "/identification/clients") public interface IIdentificationGateway { @RequestMapping(method = RequestMethod.GET, value = "/{id}") diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.class b/target/classes/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.class index 375ca8cffe5398c09a10216eeabb38f44c431ade..5d7dadbc295019ead7e37f87e75cfae2945a845b 100644 GIT binary patch delta 28 jcmX@bc9U(xDJB7N{mhiqypqhc%;dz9%>2B`rvPi delta 13 Ucmcb~c8YDoDJDja$+wv50VZ7qBLDyZ From 4afaec0f2bc6bbb2575aa4c97a797fff4d590dcd Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 18:41:26 -0300 Subject: [PATCH 08/14] feat: first version of tests --- .../controller/OrderController.java | 2 +- .../order/OrderIntegrationTest.java | 112 ++++++++++++++++++ .../serviceorder/resources/application.yml | 22 ++++ .../controller/OrderController.class | Bin 4004 -> 4002 bytes 4 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 src/test/java/br/com/grupo63/serviceorder/order/OrderIntegrationTest.java create mode 100644 src/test/java/br/com/grupo63/serviceorder/resources/application.yml diff --git a/src/main/java/br/com/grupo63/serviceorder/controller/OrderController.java b/src/main/java/br/com/grupo63/serviceorder/controller/OrderController.java index c4f8862..9806732 100644 --- a/src/main/java/br/com/grupo63/serviceorder/controller/OrderController.java +++ b/src/main/java/br/com/grupo63/serviceorder/controller/OrderController.java @@ -34,7 +34,7 @@ public List list() { return orderUseCase.list().stream().map(OrderPresenter::toDto).toList(); } - public OrderControllerDTO update(OrderControllerDTO dto, Long orderId) throws ValidationException, NotFoundException { + public OrderControllerDTO update(OrderControllerDTO dto, Long orderId) throws NotFoundException { Order entity = orderUseCase.read(orderId); OrderAdapter.fillEntity(dto, entity); entity = orderUseCase.update(entity); diff --git a/src/test/java/br/com/grupo63/serviceorder/order/OrderIntegrationTest.java b/src/test/java/br/com/grupo63/serviceorder/order/OrderIntegrationTest.java new file mode 100644 index 0000000..b8bd76b --- /dev/null +++ b/src/test/java/br/com/grupo63/serviceorder/order/OrderIntegrationTest.java @@ -0,0 +1,112 @@ +package br.com.grupo63.serviceorder.order; + +import br.com.grupo63.serviceorder.api.controller.order.OrderAPIController; +import br.com.grupo63.serviceorder.api.controller.order.dto.CreateOrderRequestDTO; +import br.com.grupo63.serviceorder.controller.OrderController; +import br.com.grupo63.serviceorder.controller.dto.OrderControllerDTO; +import br.com.grupo63.serviceorder.entity.order.Order; +import br.com.grupo63.serviceorder.entity.order.OrderItem; +import br.com.grupo63.serviceorder.entity.product.Category; +import br.com.grupo63.serviceorder.entity.product.Product; +import br.com.grupo63.serviceorder.gateway.identification.IIdentificationGateway; +import br.com.grupo63.serviceorder.gateway.identification.dto.ClientDTO; +import br.com.grupo63.serviceorder.gateway.order.OrderJpaAdapter; +import br.com.grupo63.serviceorder.gateway.order.OrderJpaRepository; +import br.com.grupo63.serviceorder.gateway.order.entity.OrderPersistenceEntity; +import br.com.grupo63.serviceorder.gateway.product.ProductJpaAdapter; +import br.com.grupo63.serviceorder.gateway.product.ProductJpaRepository; +import br.com.grupo63.serviceorder.gateway.product.entity.ProductPersistenceEntity; +import br.com.grupo63.serviceorder.usecase.order.OrderUseCase; +import jakarta.servlet.http.HttpServletRequest; +import lombok.SneakyThrows; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.mock.web.MockHttpServletRequest; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; +import static org.mockito.Mockito.times; + +public class OrderIntegrationTest { + + @Mock + private ProductJpaRepository productJpaRepository; + @Mock + private OrderJpaRepository orderJpaRepository; + @Mock + private IIdentificationGateway identificationGateway; + @InjectMocks + private ProductJpaAdapter productJpaAdapter; + @InjectMocks + private OrderJpaAdapter orderJpaAdapter; + private OrderUseCase orderUseCase; + private OrderController orderController; + private OrderAPIController orderAPIController; + + private final Category defaultCategory = new Category(1L, false, "category"); + private final Product defaultProduct = new Product(1L, false, "product", 10.0, defaultCategory); + private final CreateOrderRequestDTO.Item defaultItem = new CreateOrderRequestDTO.Item(1L, 1L); + private final Order defaultOrder = new Order(1L, false, 10.0, 1L, List.of()); + + private final OrderPersistenceEntity defaultOrderPersistenceEntity = + new OrderPersistenceEntity(defaultOrder); + private final ProductPersistenceEntity defaultProductPersistenceEntity = new ProductPersistenceEntity(defaultProduct); + + private final CreateOrderRequestDTO defaultCreateOrderRequestDTO = new CreateOrderRequestDTO(List.of(defaultItem)); + private final ClientDTO defaultClientDTO = new ClientDTO(); + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + orderUseCase = new OrderUseCase(productJpaAdapter, orderJpaAdapter, identificationGateway); + orderController = new OrderController(orderUseCase); + orderAPIController = new OrderAPIController(orderController); + } + + @SneakyThrows + @Test + void testRead_EndToEnd() { + when(orderJpaRepository.findByIdAndDeletedFalse(1L)).thenReturn(Optional.of(defaultOrderPersistenceEntity)); + + ResponseEntity response = orderAPIController.read(1L); + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(Objects.requireNonNull(response.getBody()).getId(), 1L); + } + + @SneakyThrows + @Test + void testList_EndToEnd() { + when(orderJpaRepository.findByDeletedFalse()).thenReturn(List.of(defaultOrderPersistenceEntity)); + + ResponseEntity> response = orderAPIController.list(); + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(Objects.requireNonNull(response.getBody()).get(0).getId(), 1L); + } + + @SneakyThrows + @Test + void testCreate_EndToEnd() { + HttpServletRequest mockedRequest = new MockHttpServletRequest(); + mockedRequest.setAttribute("clientId", Long.toString(1L)); + + when(identificationGateway.getById(1L)).thenReturn(Optional.of(defaultClientDTO)); + when(productJpaRepository.findByIdAndDeletedFalse(1L)).thenReturn(Optional.of(defaultProductPersistenceEntity)); + when(orderJpaRepository.saveAndFlush(any())).thenReturn(defaultOrderPersistenceEntity); + + ResponseEntity response = orderAPIController.create(defaultCreateOrderRequestDTO, mockedRequest); + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertNotNull(response.getBody()); + assertEquals(response.getBody().getId(), 1L); + verify(orderJpaRepository, times(1)).saveAndFlush(any()); + } + +} diff --git a/src/test/java/br/com/grupo63/serviceorder/resources/application.yml b/src/test/java/br/com/grupo63/serviceorder/resources/application.yml new file mode 100644 index 0000000..7ef1c39 --- /dev/null +++ b/src/test/java/br/com/grupo63/serviceorder/resources/application.yml @@ -0,0 +1,22 @@ +app: + version: '@project.version@' +springdoc: + api-docs: + enabled: false +spring: + jpa: + hibernate: + ddl-auto: create + show-sql: true + main: + banner-mode: off + output: + ansi: + enabled: always +jwt: + token: + key: + public: "${JWT_PUBLIC_KEY:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoNgzDuoQFLRFb3ivIA5CEHFRuqltT7xR6hFu+6xPD5q0sq8Exjue5s5MIQwkJMldk8/Dhp85OT5ULmAA5x4hPZfFlQEMlMPT5QItQImQ7UFCxBbMwksZlUQEP37Aa5OJ+KhEPBDTe0AaXqXFKxIOLEjHYWqhFHq5whxNotbuPrqLWEopCAgY4lqCe0pSoT3V+7Jszpq+czLBOl6eCbD933pK98/aVD9yA2+7LNOwmkYVyR4kvXX25K5Q/DDUZgMWyQTm3TCnfCrbdH6IH/Z12/DkePNuGFygUKDCEYPkPYnHbRXee4CXbeDkEdgZwzGJPM8gPhSUFrrzFVeihvN5OQIDAQAB}" +management: + endpoints: + enabled-by-default: false \ No newline at end of file diff --git a/target/classes/br/com/grupo63/serviceorder/controller/OrderController.class b/target/classes/br/com/grupo63/serviceorder/controller/OrderController.class index 7af2c08ef2ecee62f52efa9dceb91c589a090aca..76bd650b39fc75c1daa82fbcf7935608ff7f62ff 100644 GIT binary patch delta 16 XcmZ1?zes*V3m-EJ1LNjSK50e(D@_D7 delta 16 XcmZ1^zeIjR3*TfNUjEG!`2-mOGE@Zy From 280afc77a20bf66a8c0fb8cec9251cc1eec909dd Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 18:42:47 -0300 Subject: [PATCH 09/14] chore: removed useless files --- target/classes/application-dev.yml | 28 ----------- target/classes/application-prod.yml | 8 ---- target/classes/application.yml | 45 ------------------ target/classes/banner.txt | 14 ------ .../ServiceOrderApplication.class | Bin 1136 -> 0 bytes .../serviceorder/adapter/OrderAdapter.class | Bin 4483 -> 0 bytes .../serviceorder/adapter/ProductAdapter.class | Bin 1311 -> 0 bytes .../controller/order/OrderAPIController.class | Bin 4815 -> 0 bytes .../dto/CreateOrderRequestDTO$Item.class | Bin 1089 -> 0 bytes .../order/dto/CreateOrderRequestDTO.class | Bin 1317 -> 0 bytes .../product/ProductAPIController.class | Bin 5750 -> 0 bytes .../serviceorder/config/JPAConfigurer.class | Bin 1493 -> 0 bytes .../controller/OrderController.class | Bin 4002 -> 0 bytes .../controller/ProductController.class | Bin 4657 -> 0 bytes .../controller/dto/OrderControllerDTO.class | Bin 1976 -> 0 bytes .../dto/OrderItemControllerDTO.class | Bin 1360 -> 0 bytes .../controller/dto/ProductControllerDTO.class | Bin 1409 -> 0 bytes .../serviceorder/entity/order/Order.class | Bin 3978 -> 0 bytes .../serviceorder/entity/order/OrderItem.class | Bin 2318 -> 0 bytes .../entity/product/Category.class | Bin 1095 -> 0 bytes .../serviceorder/entity/product/Product.class | Bin 1978 -> 0 bytes .../IIdentificationGateway.class | Bin 857 -> 0 bytes .../identification/dto/ClientDTO.class | Bin 713 -> 0 bytes .../gateway/order/IOrderGateway.class | Bin 1034 -> 0 bytes .../gateway/order/OrderJpaAdapter.class | Bin 3095 -> 0 bytes .../gateway/order/OrderJpaRepository.class | Bin 716 -> 0 bytes .../entity/OrderItemPersistenceEntity.class | Bin 4009 -> 0 bytes .../order/entity/OrderPersistenceEntity.class | Bin 4988 -> 0 bytes .../gateway/product/IProductGateway.class | Bin 1277 -> 0 bytes .../gateway/product/ProductJpaAdapter.class | Bin 3436 -> 0 bytes .../product/ProductJpaRepository.class | Bin 899 -> 0 bytes .../entity/CategoryPersistenceEntity.class | Bin 1709 -> 0 bytes .../entity/ProductPersistenceEntity.class | Bin 3525 -> 0 bytes .../presenter/OrderPresenter.class | Bin 2791 -> 0 bytes .../presenter/ProductPresenter.class | Bin 1331 -> 0 bytes .../usecase/order/IOrderUseCase.class | Bin 960 -> 0 bytes .../usecase/order/OrderUseCase.class | Bin 4515 -> 0 bytes .../usecase/product/IProductUseCase.class | Bin 1517 -> 0 bytes .../usecase/product/ProductUseCase.class | Bin 3571 -> 0 bytes .../postgresql/V01__create-tables.sql | 43 ----------------- .../postgresql/V02__insert-fixed-data.sql | 4 -- .../postgresql/V03__insert-example-data.sql | 27 ----------- target/classes/messages_pt_BR.properties | 25 ---------- .../ServiceOrderApplicationTests.class | Bin 577 -> 0 bytes 44 files changed, 194 deletions(-) delete mode 100644 target/classes/application-dev.yml delete mode 100644 target/classes/application-prod.yml delete mode 100644 target/classes/application.yml delete mode 100644 target/classes/banner.txt delete mode 100644 target/classes/br/com/grupo63/serviceorder/ServiceOrderApplication.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/adapter/OrderAdapter.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/adapter/ProductAdapter.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/api/controller/order/OrderAPIController.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO$Item.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/config/JPAConfigurer.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/controller/OrderController.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/controller/ProductController.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/entity/order/Order.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/entity/order/OrderItem.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/entity/product/Category.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/entity/product/Product.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/IOrderGateway.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/OrderJpaRepository.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderPersistenceEntity.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/IProductGateway.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/entity/CategoryPersistenceEntity.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/presenter/OrderPresenter.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/presenter/ProductPresenter.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.class delete mode 100644 target/classes/br/com/grupo63/serviceorder/usecase/product/ProductUseCase.class delete mode 100644 target/classes/db/migrations/postgresql/V01__create-tables.sql delete mode 100644 target/classes/db/migrations/postgresql/V02__insert-fixed-data.sql delete mode 100644 target/classes/db/migrations/postgresql/V03__insert-example-data.sql delete mode 100644 target/classes/messages_pt_BR.properties delete mode 100644 target/test-classes/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.class diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml deleted file mode 100644 index 503d02e..0000000 --- a/target/classes/application-dev.yml +++ /dev/null @@ -1,28 +0,0 @@ -spring: - datasource: - driver-class-name: org.postgresql.Driver - password: ${DB_PASSWORD:backend} - url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:backend} - username: ${DB_USERNAME:backend} - docker: - compose: - enabled: true - file: compose-dev.yml - start: - command: up - stop: - command: down - jpa: - hibernate: - ddl-auto: validate - flyway: - locations: classpath:db/migrations/{vendor}/ - enabled: true -jwt: - token: - key: - public: "${JWT_PUBLIC_KEY:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqStd8n4SGNM0eZhV/hzU+urHA5/IMZPoP9YQ9ZcLKWiX33nI6bSuZMCrLZcJExf63xS+uxDpGxM8Mnk2zOdl+lPwANXLzP1us5P1PyA3YPycW9J7C5YTQW0GiEL3M93ZX7vMJiVoBYblP3JPlYnoYlBORuc0JPk33KtfEZP+78qXpPHM8imYrJLe8ceiDLLFDU/nh5KC2dWAy3ci1ahoJ1Q9ELhp3IZLvOTX57H/T2VKOYOya5+ST41h+JjzI+qGTVnLcKaW+k25YLlVnkSspvdx98+yQDi7kbOTS6yRZHUPD6wPk/nUozpD0nZKccoH4W+zMwmQVtsAA6JCA9gfGwIDAQAB}" - -server: - servlet: - context-path: "/order" \ No newline at end of file diff --git a/target/classes/application-prod.yml b/target/classes/application-prod.yml deleted file mode 100644 index 36c599d..0000000 --- a/target/classes/application-prod.yml +++ /dev/null @@ -1,8 +0,0 @@ -spring: - datasource: - driver-class-name: org.postgresql.Driver - password: ${DB_PASSWORD:backend} - url: jdbc:postgresql://${DB_HOST:localhost}/${DB_NAME:backend-db} - username: ${DB_USERNAME:backend} - devtools: - add-properties: false diff --git a/target/classes/application.yml b/target/classes/application.yml deleted file mode 100644 index 786c369..0000000 --- a/target/classes/application.yml +++ /dev/null @@ -1,45 +0,0 @@ -# Global config -spring: - docker: - compose: - # We don't want to use docker compose in prod and test - enabled: false - jpa: - hibernate: - ddl-auto: validate - show-sql: true - profiles: - # Value comes from Maven profile (pom.xml) - active: 'dev' - flyway: - locations: classpath:db/migrations/{vendor}/ - enabled: true -jwt: - token: - key: - public: "${JWT_PUBLIC_KEY}" - -springdoc: - swagger-ui: - path: / - tags-sorter: alpha - show-actuator: true -management: - info: - env: - enabled: true - endpoint: - health: - show-components: always - endpoints: - web: - exposure: - include: health, info -info: - name: 'Service Order' - description: 'FIAP SOAT1 2023 - Group 63 - Phase 4' - version: '4.0.0' - -docs: - api: - url: "${DOCS_API_URL:https://9ah1j49vm1.execute-api.us-east-2.amazonaws.com}" diff --git a/target/classes/banner.txt b/target/classes/banner.txt deleted file mode 100644 index bf0da39..0000000 --- a/target/classes/banner.txt +++ /dev/null @@ -1,14 +0,0 @@ - _______ _ _____ _ _ _ - |__ __| | | / ____| | | | | - | | ___ ___| |__ | | | |__ __ _| | | ___ _ __ __ _ ___ - | |/ _ \/ __| '_ \ | | | '_ \ / _` | | |/ _ \ '_ \ / _` |/ _ \ - | | __/ (__| | | | | |____| | | | (_| | | | __/ | | | (_| | __/ - |_|\___|\___|_| |_| \_____|_| |_|\__,_|_|_|\___|_| |_|\__, |\___| - __/ | - |___/ -Grupo 63 -- RM 350013 - Gabriel Otani -- RM 350008 - Henrique Zaim -- RM 350009 - Marcelo Vilas Boas -- RM 350383 - Thiago Bezerra -Version ${info.version} - Spring Boot ${spring-boot.version} diff --git a/target/classes/br/com/grupo63/serviceorder/ServiceOrderApplication.class b/target/classes/br/com/grupo63/serviceorder/ServiceOrderApplication.class deleted file mode 100644 index f6bee5fcaf1a282fc13f73f28a0e0b6031c5e85f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 zcmbVMTTc@~6#k|K3bhJ?f+*f^r6kS+5lN~fSRqKN5ZaUnpJunic5rv5nVkjsSw3le z@CW##jAynaG^WOcO?J+l%Y5g|Ip6ND-#>l=c!QNP3MiH^R>3$X7-o*eiQuu&5#I}r zW#||tUMsEK21BvB+$mv_VKuNkGzpJv);DXbJeBrDh0@rrw7fM?_Pny$@5d?>P8nTB z8COcERB#p77;45wJndVhqa!O4d1~xu9vI_zD>n|Eq{KGU3_-PdQCuSyXQ1}8Pee@fG_)DOGgJnf zZDSKbOfBvnwiyb(r)!tU_Fhx2iJh&@cUuPx8zYI7Q&eQm5TkM?$#cTKCGHL}ijdYv z0)(;2y4>`oK9VZZd`o*iZTo#AR#LmPj)y4GSLvSunEx(mohFTwWF*IH-@v}+?ipIW z8<@j&S}TJ9%#sdF;RbFJh(ElRg8`GXrP_B)9bTOGzW`vKk}eEkOp;}R?6>G0Cz6sV qU@>2B;||Fc6tP6r-A!>1_az=s-H%c{#*-9J@l4`5s#vDL8t?}ojz4Jt diff --git a/target/classes/br/com/grupo63/serviceorder/adapter/OrderAdapter.class b/target/classes/br/com/grupo63/serviceorder/adapter/OrderAdapter.class deleted file mode 100644 index 1247b7d734cc011f1350c365f64c53827b574a6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4483 zcmbVP`EwLS7=4|DOtP84CR_r7908M%FkA+7IfMWLE-a9U;62$L!oXx_nVpT|eIIxr zsCeHep5PCQK$YcBT4nhsS(dMRhRuYHV?u4!&P;cI{k`vfufOj8^Pfw<0$7jp3Dlrg zL!FLEs24~cF^5gVG4q2)X5fgG^#$tJ*?HUFAW+-hv0p=j!1@8t$ht$upjRrmJ*$kO zo|PP`L24glW2>kV+bqLRMk5hMRQsU=3ZxDkNtXe9BWvVN>uS zkT_&J&eptd`^=8lo{pR0e>I+pHK)?)#R#OSP^btr+^pjkqy(C&$$r;2ojo4cmB6$s zbSrkYxTOKdB0KA`LBmEJw_=mPvN*ui9_fUPMx9KLF1*l(TzVRktq|BE1-w-t6HiUG zr&LsY)zXwgzfG!dstm}G{&woP9cdN@(lAmODyvhGpelp3Xi6Z1JsS4v*e8uP#qls! z;-soZ6(|9nj`w(Ou9Rg-l1}<{+=2aE|LoX&ywWAGElOHYttOay>7KdF;DC;USEAlq zGL=RWxEuFqxL3!0vQn;$i>;b@IdxE8N9N1m0Uf3knJj!tU(!idM^36pF0)GGAsvG_ z%%w3xhd>XtI1U(vfIcJSDy8Ab`0!t4n1BsOZcfb-W?qL2mb-+4sS+fxW?YKAYF@SC zJRH!#x|WFxXkr^mniJSoLUBEs~o- zpKoT5?lKEuVw1Zp|FE0eV|wP0#eGcf%K-`=o*Z*%AZNCX>}74-JI}_abBqus47#d_ zvg*ezs%oFA4pQW{Dq6j<)??9DjX$4AgLiIQNxNZ?C+rQvHG z-{7pkLUl}5A=vq0_o!v0)xu-!<{?v_mRaYUxI9O`{)$o&8U<8sH}g5iDz>Fv_h_jQ zEth@1XY&FSsZFB{`;Ql_YwHYL#@j{@HTVtF%UIUk^$S)?pS8;863z`?QyY*(Gq0)BFcpjV-_8r}izo3EZHNF*;~9l{9iGK=#Mgk;cpfis?ibnL0P#0^G@guK;#YGm4M7uda1hd( zFr;A`NS>B0CH%Eztdq~pDvYI<&>O~a5!(dH*e*MFl(B1sxY?u*JmxoGE`LjS^_s3=WKfi@8QGn?IV1OZ`s$%K9B17j-bBBk2r@}{{pQ6Eg=8^ diff --git a/target/classes/br/com/grupo63/serviceorder/adapter/ProductAdapter.class b/target/classes/br/com/grupo63/serviceorder/adapter/ProductAdapter.class deleted file mode 100644 index a2558072a05fff2e2af61946dd9758bbb5f80b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1311 zcmbVMTTc@~7(LS#7M3m40>wMxrB`JY5Ha-C@dX6D;(=A83gX1;#=_!+=+Jhc%++(N>^2u2xF2mFY;A#XL@?fQZ6 zG{fk#pcUvB4Do!SW@8NF7HkI-a2Q_JmFvl-+fbdhTwQh#g*pm6A(bzTqotJ$Lt6S; zx;skx9Zy$&{N32wX0RGUZ}FyJn8_EaKiPM+3R;b_jY&*dNIAHKG{e#`KGD*FK6cv? z&w!684hIyo`9B$=m}VTzBEv97a&{Dj@VlN3*{O%3r{}VRE4WH~3AexZ6mWlQ1bp4W z4cugyAm9quq9N5WL;6&#RY{RrxW%yi5AhAqY|P`fDc>E2>0blv!5S5lxaS~?9H}75 zgL4dP`Raf0l?ycsg>!1becsko_isv5M!R;O7PYL8Q1DI->;CvoIFN}Z}=e0--5-Ln$D>)<84EKpjPQKse} z3LG1~*NMRjsFd*vPL}X}2dCf)Tz)<)3Jm&MNvruEI|1dN*wr&TdOI+QH=WDNz11@E z?d5seut$JaM3<{Ae;Kdg^%CB2a2jXm-$d8Fv}xV*P|JpToanW}$BQa$CUL4}ViTID z0)5Gv!1YeuS}q)`_9!Da^{9g}oD=A$c7ecqodR=XeRBn0!FdO7;sQSsg*G&gj<&p> znK1IIq~%b4;NT+OqUQp|K&I!8Z3nYr?e(@b)+K=}l+&ZGZ`?|Pr?;{&;;F3+;|i{p z@Q#CPs0d6vhYW#%nw2In-a80tc^x-Oc-O&AObOiW3LT^TRex17%fxkM^HC#-yR*+! zEj3#DrYrRfPKI%4ZU`J09a|Cje00~a+-Hn4P4tv>co=##C9U2+odoppi`6hz53)v0 z>1A1qNI6O4s9ol(|*l$+DRA6TRYHd%{{P^)AIdmOnf$IL{e|>6TrqdhQ*am!W zHe?x@dE%?433=K}cpxyVO;HL3ar1Lvj1jQO{rR>Cx7bWX)_Vscy4 z7Gu>g@zTe#UT2rEKH()Y_2lLTZ@#H?zSl;-k#(}1dFx+axIFR=8A$g{cQ(qNB(BZ= ze%O=|DGMqHgM^WkW{rl_%=>3&<(eXo^4F5gTyvLIB;7!{T5(I_2IOz?3AWnT>wKCMI!EVOt9W!(o;x#2T`=`vT3S8PTYdlspuNKBZhY7ufBsKSCvuT?bfsRWQW8S=NE$rm(3t3hU zcl2g?9Txcb`K5jvp+7dUSFFl9of{j5>(xtp?44qDYs#3BZy8+W@}*T>vLGxnaO_EG z$MJ=kCt*#wN$Lg+QvRwfAgxXS5mATe-Z|`XAodW8P>WHU-yf0;C_dW`PPuP0) zEM`HP)s2Eh2Y%XnOE6iux!nkTb4S@Mb;$NqQnxI~JTsCLc$}^M_+O+5F8twJjHzDQ z7n@pdtA{d+cvC4FTH6KZpjl}mri!-TPZWd>XE&LWtb?!g?3vqnE4i67crv@n;Fhai zM-k}i)ho8GDla9O_SI}?`;-&gJBthUVk9uSM~<|)-&>Y8hn0#1Pfwh>qqJh)x5>Au z6JMn%v$@)E6}#uFJ!?(VnvNUg{#f(-12 z!xEPH9_Q#s=*Pd?=3p}~M4c?11w zj{Y(kTj={zgee|b1=g$rQMUpO3W{?rlN`AtNN8GOO1XlUvI>oAfnVaxnsV3z{}SUn z;J%jQc8YB++=W>`$br3{13O^RXp1J@j>a16V%u1AWU$6M(lVC!3=?1BvcP5>l=BVK zILN55F;H0TNZV>h_O_bo@Ocg{v*6ad!96Cl-Ar{8Pl&~u>P8E8`P|`-kwSoNxzvaBl M`4wJ*e>XVvKNVxBy8r+H diff --git a/target/classes/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO$Item.class b/target/classes/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO$Item.class deleted file mode 100644 index 9721e977df39161b1365f5d8b695e13b74557771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1089 zcmb_bT~8B16g{*3qU}m+0YC7o2oI$Y_rb&mQD16|HH8Wi-ly%PEZOeB?3BcRrHRDE z2Y-M+%6Mkm(4_Ri2X>RaGk4BCbI+OCKYxGy2JjYJMR>>*koA#6UZC4EL0^x8p&6g+ zS1*G^nai-Rv>7N9$n%hku{Ao1IGrR1RtGJkq*Yx9I#L&7mDu;k-L1A&BLOcQ2vj>~ z@=^wojE6x-$HP6h?UIk8+jHq+EMptmuO*b>7jVbNGAb;Z)pUDjs&57IZ^AgV?*uZ9 z?Gu4qqHLS=D~)-6x0-F~ffA^6!dM-QM?GbZWiMi;*3o?#ok$b9`81ier(q&+*tul~ z_9$du*;76EER7r~s|>d(v-88LZ0ZeC)fM|@r?ryvnE&5CjALu+N8jvg~f&W;Yx15Qbmpqe(W~Hlz@se19C$Ah8D|E-AePAr)<#idMZln;~_z*$rNACH@si zAS4d_0Dcr=yqktL4Y%}SduHr+9*;f0|NQ&~;0>PDP(ZPQl8Z7{1l|v{7sO+4q|-_K z`jwZEK2rh3dPv%n6UD*E=r|17%$-9Mdp%9kP~UF)K%Y`d%-f^BKv@|YCjt%sRGvvM zH7fLcm6)!BDryxtF6wYOo`pjhjlBNglma8LvaKRzb_9y;tz&`Op&CWfq?!bRIkjzn zdCbpunYg>t6{wELScCDK?X9_#9540aA;YZuDx&>#JRp4}2O)c!ejLc~SZZbMsk3BG z6f5~lL}doL0(MQcNM^OzXwR3zK2PiNoj*^`@7>rVa}o~^q?Thcq`3wk=M}Dl*+Myo zajFA)r|he2F8rb|?Z*?S@AHq{Bm0O+1&;;#Oa4&;?rs#3?u9Z*h>K9NUkgvT_p026 zf@khNo>$o_U=1Z+ucN{18|?Ae5+SLoR&WzT%LTf$$p)KNmhV=jsdA9X_#P0z(*{Xo2 GsQm>SD?4id diff --git a/target/classes/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.class b/target/classes/br/com/grupo63/serviceorder/api/controller/product/ProductAPIController.class deleted file mode 100644 index 97a7e1fad8ea8e20654e225f0609cb502a74bc69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5750 zcmc&&TXPi06+W%oveIG@#@IL}9t^f6v@iw0!Xr?UhuxX!IoFZE=9v*{G zxv`_|<@$AQd1;~blF@M6lF^0I!^Uk}HpglYG(AjvD4(O@0*z3C(fLOmh|vL0MtXj0 zfooAw;np=?6O4|Jm2UG5ZhPFX*sD5}er0;R-V|%;*(LM=h9_uWj`kO5lnyX@S%nol z3XJWo5Tk6W@Qz*8I=##Om4t2G9(5Z`S*MT6TC$}BJMCO?S9j0d)4FH(SXf?gml1hBJ8`C^jpd<8S zOk+ZbNRIUg(H^o2bd+9zo8rJt-1Mi%cTGtCeIFZ5&#NLhaeqDF|M&3 zM*FV{T~+QfH*%vz2nhLAS@F4!LqPpwnms%9!AzIh%{+8%DXrdC7-pwuv97}_F;uW7 z)@3B&z&YPnnrjJpWHerq%8oX9rGkBAW71YUvU%IUz8;7$u{8nGyn-$-o%!dVEl{S$ zU2dJUE_v}?Wf={2WWYVNEDKk(#4_Y#sdu$Rj z`tpAWd^eH~GO+-$3az--Brl`SOjD}GLfkFG<|1sw{V!C}LfjOhXF*mSiBuA8mY=eg zRTSO-%Z89qyEU@LmKLM&3)X3*U7b-y>kRHYNmaBa(N^bG(VD`2idttgQws=E>2str zPu8}APGxx(YIcW*n%l@T5ZdIn4f;zL+{iv@gU@CwMZf8^zBbB$>^n@K#NN3-CF{uu zsE{w-bwnaQQI25pdX_y>H2c`sl)j{5-))V;=z~YcxjO_LT@g-fw7Vs`jO>edWmy9!AH^yz4k_NR^t6BZkzmfGPclS5+K3;*vDw`r(F6$JfFs^KH*) z><8*5Q(@X`+>~bnesV0ZCm9VjBgB7U<*h{{PYq|FGDI0}p>h?dJ?r%o_DlhlllQ;4 z|GBcbvK&vMt^%y{nZ1J`=+pvt)-|cV+Mdlf4`+bCu;lw9T<~}lnG$d$^?67~ar$!_ z2SNDSG3P(H%i(^6&f)1*JiUSUeYh4*d_!#F9_7BLys?ppcx!5F`C8wAj1RE>-hCy$T?h(<8Ge%Y2gO3h!*K$M3?AtL|14Doqn3MzDXrm z9>pmNT}9)y8#EBn^@x@u`dLIPv}!CPTEpcjdJAZJA%3z4;^H=l*XidNtATjEh4>c< z;)4m|K7;g^2I;Tp1}uJ!U!K?@Tz-R}0X$*=n}^@x2VTSm2l*QdYT?V~$pdJoeZ9~`9`h-D^u6O;Ahx;G(I@g6%~?umtbNt zW3-VO$G)eR|4JtqwbNrbF(~1b>}o2iqpbyvCd;Tt)hxs56<6K8gxD-$gEmu3Fs$p2 z>lEF^kjCY+xEiFxC%&UsPE34D>}x!wGx%T%-f#=vaH0sUd>Ewt2*_5_^_>Ki3DCP3 g=)H*EH=sVC5ApV+7O>ybAI!9Pp1?`g$3yx501HmLLI3~& diff --git a/target/classes/br/com/grupo63/serviceorder/config/JPAConfigurer.class b/target/classes/br/com/grupo63/serviceorder/config/JPAConfigurer.class deleted file mode 100644 index 3a1cc41293e26e1ade7881239b4bf21903e216e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1493 zcmbVMTT>G;6#i05SIZ&=Zy?@9E#88tcquvqsH0B3j4-_Tl(wM;w#iO51^rk0B*TM0 z!0|UZo@`rZi^!-Co8+8)=X~e3`SxSyD}aZXFCvG50QnGuC@_@P#irnq&`tijwl3?A zp)jwsa*r4W%G0Z3WOX3KK@{ntDcvix#V}W%t{U6qNoyF~ zag1Rs#kHM^`0LmyqeaA!Giwaxa>qv|!%Ej}AG{J^oMEPBdEK;l)3#$XcZ(;|ZmPO8 zmcpkCy{4M{#hZnt^whS}GUS&`Lo$q1m6osCt(vqeq85>6EKO=vSmoueGVk82gkiS& zuS6AU6_vNIpbQgl+u9d!RV9i@7PK}_`230E`kpPKB%J)@Ot)n8SH;<9Pmx_qkAn)DU#hVL3p)87W#D|?zDMZCDD zAw?(ndMvn=u}PFO_G7PgPqc5vi&!jlXOx^A-kr@`Nn=x5G{z;)iuk2;?@c2qVQQp+ z>qQ*LjSv@7X{Lyqm<@0%#BJPRIG;{oI%!I8nhl!kv|!{ytckjhgkh+amA+@kvuo60 zd?s`wlF3xnn2mN^$xQLG^M74d(`UHyF_!;#*`eIuw)^j7lUx!}w5*(@VusJPmUbx; zNg|T~_ZTkzR+GKb3-Ey9^!`wKe>%0mIch?V-X&lF%s*qaPLRZDXS5Gq`2zNt4mq5l z)n5a{n4~rA0B{ngNFq-7_s|>9kmPZN9R$E9I%Ta#GuDN!^%=q(BAc`HoqGqC;C!j* zM}uVV@l5Iu2(~e_jZyECWda&S9v4%ZO9TbIi8)-Ry-cWS@`WoT_;@*`c@@{_nvGdZ7(MG;OpFM|1VSK$OSw1+iD;pe){qbkDYPa598&0Au{Vy0EGd#4;3?V{ z=sUDC6bhZ`19bXKot~8(-x8Eb!w+k>(6PF1gX zHP^XvN%y6S^H+(5@H8zr(FH2n3iho@*m%;!JC2?58AdYMk&%4dAhNTcN0WTi#EkNl6bu>1Y zEexb^6vvVn)^Hpn0+-`3bv^0R#0F{ZZ%hSx0_RrX2(0Zmf%t%1s;G$7QAx!rRfCfn zPT@571Ys--+|0fQR0eQH!&#i8Rm=1PflPKZGFuBwOD|BC+lwqllNi%5jtc_)A;BA; zSyw+`L{))fZMuAHRKc1l*& z;RZ0JVH!6WQOzy0&j>8NXVz`GO$KmNLms#2w=6BG{9f9*UnVe%?j$}JNH_c8{L)id zBFBE&#N1efjGZ;$-EK8*g}hT{-unxtE$3?0CFv~~OBN-Wf>ScAMZ+`Iye{kxR!o1p z_S!;{j@_LT*i*7h7UM2Ab-Hs;liX|x0)_Vp5sMoYpND6x-7P4>!}Ip@l62Kp^^;f> znCWPyfh?_*Rt%n&c15ZKzsgN5H+1wx!!k)|syFN;@mOGbXJ+P{VAiSG<%SW0cTWZ@ zPWis!8C5dZV^tn(qT251kqpmORjt0FS+R|v=8+r4wq~Y!$hBB#TNv?PE zn!d^XJ7e2U5E79@$rc>1qWi9A+LdL+pJ$G@s{3S-bb=SI)Qiz&l{HD?9lwF4hE2HyfpCuRE(!FBsLOvOy=t zvQY{gk4NTS61zG3r`2a&DT?WiVV5oGpD8%bYRzrEl=3`gimj41#Rca2|2{@8<8@mB zsk_ayQ54NU5?Jl7ZA&k28NM&sT6j{N-Gs?j=_Ro)FcQC%Eib}?cc^|IPT-%5jJja+ zt(WhExPva-2a={BA6;$%G9F>`2 z<>D1Sc!To-Z!rP9!G{SxJ`rf<9=SXny3``Qy322ABZ2QIo5uI`@Lft2u%Yb>41Z1m z`&kI=D_q|a*K_E@dE%O7fks6`DPOG=W_Tqb;G#Q7KD~%lxUrtTNUL ROgx20iTY#hqlRY~`VR-Af?@yw diff --git a/target/classes/br/com/grupo63/serviceorder/controller/ProductController.class b/target/classes/br/com/grupo63/serviceorder/controller/ProductController.class deleted file mode 100644 index 8f824bb87cfaff90692d42537698a18081dbd5e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4657 zcmb_gX>-$76g|&bOpHQ|p;=3zBtSM01xhJqX>bUevy_CibXR1>5wRs#mb0{U?@#D| z=+}0pltO3v13LXpot`Htwi08-(=eX+S@*qnmvipD?KiO-LRdU;i!h?n(n4ra_n41chxz6OhBMjK^xiy+OL?F>0T3P86H_o zU>`c-NGRA3Wf#?2PAj=I5$K%o9|aQ2W}$G?vn#MMoQ-l%w=LJP3k9mlx%QT-OjSC$ zFq@84@Z$K=Ba0n4fUY=_3JxMAaH&Zzf?#SM2*fL8BcqiKfh&=&aGB0!JF$M??@mjH z4l8&C-Bg*^Tw`6^6u26xGFVnsc_(o1mcKonKri~@=vOd+R|PId1sUxg^FVhDsulP- znz9Cn?o_iOF)H|yW0a|;maTJJ0)aNyo^)-2_5T%jwCl~} zwgcxh%N0v^P1{nZf*&+|5pTtDNx|E=EYMRkyiGTIVo@uxc?5KL*6X!3 z_D$NkqOeo5y|%ly3|b(y%{dPUnF8-9n2<%>UMb~RhffX1uzX zU3z5b#Pi2!P?{;h=mKd*18XE>=Lkku*0hY7N^!|>7PO@TC8?~fYlTJ4G39e0Y;{-6 zGCOu8HzC7y=TchWaLGT-GvVV>V4_)_4NqJiP=RWJ3z6CyWE^>#Hry3EH>WvF5%yii zIv-9Guc^HZ*kdO9WpZb`r1Yn~=kiV{UIxhRKFN#8# z7z#^+1`uwFUJVN<`nI-_3V9lA64>WiG7aWSKx*x{5a`}sN}Hvva+(Sq57JsR8x68n z5|D2qlxXG6QvEoZ>gem*9`6I>EHQ6a9Nm~QWsB;rYcFSHpB3o4U*Sc*Xe^p#lg(?w zvTRrLib`NOYdd+hT$25MS(f>_?X0S07Q11)q(+_hUqpy%@`i1@JX*Dq-xkVAI07fb zSo_^P9i&aD!Kb_0aU_Z39M%$8$3`5R3ckRX0>^8IfoZMTtA?7@ic2|-Mzm#3cX>hy z>}UU}J^d558Eo=>x~*Bcf>9pI+V*Otl&(+CkYwA&1;!d)-u$F*GJ0WU2EQS z4Fap&u`I*M6tr^LV4wS1;6xoJFA6V?Zv|e9Udnrij|K172XK$qtQb=AZHm8A@;!!Q zoG+3CnC8q3pG>sy104Mm;^9-YOplHKf%xce=p5(Qq2JLnO~H|0xFm*Iey7mN?_R!i z_MsE~{0v}@l4HIayo>vMqC(7Lfu{DM2M@5w-S1J_#xsQjW5)a3AU&Am7~`0fM#p@k zgWF8DbG=k3&2;-~t7ejThz~gbA?I2-ezaxgAq9e0;cMI=&D`ZE)f|&%d@HA(VNBpT z-T@%IL1KcSu&KBa5|p9NuTaFoalN&NwKgEM2N12j+jCa=#> zP>1FzA~{TCM;PR&XK&QkRSk0}K$H5tfMeXz1C6-0>wyb{As42m z#~YE*;-y=Hn!z`PPFx82F`E!)v;xQ%ie>`8|8+?bp{{RbsOf3Ka diff --git a/target/classes/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.class b/target/classes/br/com/grupo63/serviceorder/controller/dto/OrderControllerDTO.class deleted file mode 100644 index 70d4497c56810361e3f668bcba7a66f26be36fbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1976 zcmb_cYfscb6g{(VmI9SsKzso{cgv$H(GMF+;3egRm=Y90wBvq))3Bg62z#!WkDnGN1K z3ZAc;!m*on)ABsWZ#eQxEAVOY1rI33&AJH8&01S<%NAR4c>7?NA+zTCuGnBmmdb}& zG$MREkA(6SiQFpdd^^#KuWhabDP6Yx4Q4v_E4-~e;l z6;7+opjW$ulB*(lu4$M=fgvvfVR?I;3NuWGNYC;c=62Ajd5*$PX_&?gL(cYG#}_;G zxTZo@1HVyW7}<9lz9l-G3cVYkT&rHz%MNMp^HbR%j%THd3VR|-$pCewe8`a63hE?l zqU!q2+fJ+I@B@q7NymY0d50Ev<$DxNiKa{E_VUuA`vo&h_g6nTI%m+|IHDQU_bhI; z9N}*HqxicTbv1bm z@6VIs;MKSw5AA*rQ$r3^dL1QP*F>Qgr94PXjxdpnb3m+D4b+DyEskD|3(1||4?5g- zUb%8UXD(js6?vPnKzBGn|E?rG=_1oEAup*~>F)uC>uNuX9PQJ%LCBjF`9f=o);Z%0 z%=n4y$1{waB5y37LN}I9Q8bq6^&3HwxJA!#S^jcvyt#_5u3_YdN4T8!veL$&{mQd2B5l$|FLQn{ zxi};_Y+ISQ4J<}QUeGG7W>lBD2N3F?P*tWwMBI~1)DwByX}XMb$_z_b9#*pWza?dJ vnQ9=Fl+9yUA&cQ?ReM$TOwhkohQm5fD#P|=Xdq_0B;DzFOu;7vOW^5W)l0Ef diff --git a/target/classes/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.class b/target/classes/br/com/grupo63/serviceorder/controller/dto/OrderItemControllerDTO.class deleted file mode 100644 index 3b825a4e26110020cfc19ddb3ea22dae355eaba0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmbtSNsrSo6n^f$q;#EO-?z3bIUqPNfHayBVx$f;h*3{m+{9{w+PJvRNc=01sE|1D z1Nc#h_nat%G)PEX@?!g2p1_qC@#GH8w7^HXlmxj(f>(x2{--5Cp- z&|*+rDwJl>Nr3icFqsPj>sZjGma0o7-N4ZYE`!JY1l9;9))6pIM^J%+&q5qCE;I=rfe#X5o-l-SqBui;?A zz@K8Jh)O2x^rbDs-VPCQ#HA==inECC*2H)NZe~d~{#BA*1v3*u$#8KiyUUG-@V72$ O=&@ut?AvBAcYXoG-}Ny7 diff --git a/target/classes/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.class b/target/classes/br/com/grupo63/serviceorder/controller/dto/ProductControllerDTO.class deleted file mode 100644 index 442516397bae1d54b735cf219ac8ea71bb8e040f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1409 zcmbtS*>2N76g`v8Y2whVg|hD?X7K|ONUW+-As*5asa2kMah#E3lz6I%Q;ELP*;6~@ z?${kWlL-$zuD(n~KqUyJpq{ixp|JOcvrsy2*j={wk3TRJUipC^zG29=JA*A0v1OoS zq70MaZNg^8<*Dy-AxET{knc+|ns2D*0%yt@>b+0Ssbf!^z_X7+=?C6RWp%;CHmVHy z6G^h`uzfKfPPm5EO*GJCD7sF_Jt03cR96Ihg5(&Uw^w?x$x0{ITj^+CXTXr_iV?YQ z_xyk#&Zk2zj~((>^9a|O3>@jJbKJ~@V}Hi5*Za?KXyobv565EEcO<10a!Im=$HPON zS+m_)88-eQ3V{IqD6Vxx{DTZ-LUfl&)z@U=tc=+omsUz@Dw851Vw*Kc?4lrLf}Hy_ zR)v<)mX5?+y8NB5;@nN!ktb?1aErDfL#v*pC#@d6Wz=fuN_S7S2-*|0sJ}y}k5qG1 zo7Oil>)`^1^=N^L^>~5WSIxRe&jN9P5-!oxityOQWjYa4`>5|t?WEkBYR_nfEA(E; z5}>L-HK;0cC8x}7s*0Fb=1I4*b~7VD?8a~v*EYy!FussV2Ir&JQpwkGBZXW^k{hYy zo0M&G>@(Do^>&=os(fUYca(UnSL6 fFnvQL86EE9L7L>oBK&Pib?HmV=(5}TVmiM8*tr8B diff --git a/target/classes/br/com/grupo63/serviceorder/entity/order/Order.class b/target/classes/br/com/grupo63/serviceorder/entity/order/Order.class deleted file mode 100644 index e58bf0765cef44e37164fddb56767bd43a2e8ccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3978 zcmb_fYf~F#6n@@>urw?sQZBt&dQ}Ltq4eIg*p}WRv_(O*cwLeOwj^1)*;LVb_fPo6 zZ;oI5pfk1|+8M{sjz7t9e9pT|vH_+;(P8$Iv*+@h=bZDtFMs~?^mhOk@m&%z#0@l= zNT6Ba_^g-7yQR#$S6y;XpUC)jej&eL6^nLx-j**Vx11@sCCe#iu9bbqUshIwEkdy4BgDt#x}$?8GjGmVD7+pj@Hmvz}Nh_F%7pmrd+Lufq0veiD+L zRD932N(y`W`XhJ(X=YM?%yzH@2TUBqA%!O27Q3N!6h_VGs^z@zumTgFU2yW2Z)aO^ z1g{u))kGiq6?*DG8e$RAoKy6Lr*mNlP0$7&qX8Ry=vV_L262?`d^gCnqai^}xR8@E zF@)m^hEus#T9P(ljb{v;P#Au(%H~+sB!-a`x2H{$eOr-i!3^oCp@=M&C}*I@ooaZQlL+!wH=+lhD!!6o4A6}&E>Gh1v`{Dq?>A# z)%z)lYq)OUhKZZVt@cyxGwHVPSFIwuyDQotVZ!}03fm@~`Lg9#J@)nWNXJP*E^H>@ z$Seut*^w+AMS}$cy?$gO60Nc(c(#9<-973S2&{eFDciTJrCHmXvN&!sf^Oa_PFtQM zze8b@zu+*{p%;Wrz%hsP8U?#(`!?SciRo^Pu)MSyC3Va87u>>x-> zWD85%*&kPy!;X_iSNkoC<~{o3BJMKGGs1}F_<86uIAwpOB8 zc0}pY!y-B@)Cm!;D%1e#>B)s=HR%>%OR%1zRhlhWhZ|e%@Q}idb>Lob{`9gTYf+O! zz7-v2Rt$a^loSL^N`H|0NJ`be__CA41KZ9}i3AR0gnLhdm9qC<7kIN}e z_ubm0hxbmp-idAo+Dqv{o-gk3`$*st6L^Ea=p1iSL+Q6kOlhEpG|ae`3D73}CQuW2 zi|=NrpTZa=)0A{2=mwbN)yZoouN1E!ueYiG4(`&mWc34|;`(g*H<&BftuXKu`+*f4 zj`5aOxHY(fV+!A+?HPud@yVaiHW**QsTlsi@GrD&(y7W(2t1i?QEFZ zZtBbse5?jOkc?6CF6~Uj{>D)QdvXTPRgz9Z>2#zR@6oBi{+dtWp*Q^m=c1(;kWvgv zC0LY5A+~EYCXG7L&KQC)9k{3=?A1gI`MtU$B%faS4}rFIqD3-Bi6Co>(Q3{ zexC&MKMmdm=?GQDWoivl>5*83xHb(jF!D4j?^MQkAE$q-a z1;&Y*@kbclz_@#@@s16REgWSC$s!urTx;C9fpI{^EMwdWoZ~^<6A! XslvyU-G_%NzMv#Yoi8~r-(uIl^%}); diff --git a/target/classes/br/com/grupo63/serviceorder/entity/order/OrderItem.class b/target/classes/br/com/grupo63/serviceorder/entity/order/OrderItem.class deleted file mode 100644 index 5d8320875c938507c1afb46faa3aef95af6127f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2318 zcmc&!*>2N76g`u*%|f%ZO_P?elqE?QccTRYys!wQ07ala^vz91iBS?4*QvxO@CS&m z0Ews)4}1V0g}8TYf^m$LJ`rg=Gxojbo^$4Ae*FCQ9l(9uNg#x99FY{FhzV>SSz6QV zX>Dt8Z0>GrwrqBq9lhI?{kG&UJ+rU1%${!awa0ziu-^;B?iqcb*-!S z+giiyx9f-1gK11*I*vpNNu&g}d<9OVb!s%FX|<%KNrk96o0t6RnJs$)Q||`4TP))* z!T1+am_bG$dTbGvK+Y5N$Q&GXWu3!vDdaIrVXA<@M&o>B6v%uE1uO`}k1ew`Xxaih zlfbyq+P;%jXWvU~`l3L%Qaup(H13{9hO*PMcV$gd+GA&Zl6XH=CKq{Vw#e9-hS8TV z2E8L`z0t{5w%Tm!-2>e+c<;W9*d60!LSsDa_^|5&A)`h1wq#e@l2+nSAoE<>9kaEs zTY8V)S_J-K%&!0EPO>fSSEClqRjM8;>foq_DP-U2&e^}dy9en+sGg@k2}PWh3lOgzzS|EAim69JbnVVsXVq7hA-T+t1?+{nacICWU7$Bi)xN7z$g7Aw`Ft5#l z)s#;R?$ry55qH@--&43kcS4A+!3aI+a-vm;?-4cAMWJT;uhX0a-5OY;?-yzJ5n;q> zF4tC;&LC=QL&R&v$PnpTF*-!HR*VfX_eJHG=~+UIp7Zo95Yhs&DAKA#Sc|wsU!FQ> zxJ-=rSH@LhBh+dc*A&OHVi;EMm}5k(m}OM0m}d;vX*awH21I$_hvf2_P{Z0Wn1;p~&tyStGI~MU2UolzD7uiSJo5iC0W4qKIW9 z6q->%d729}n9w3U*;S2ZhKVwvKjt~Lld863O4O|_a1)iW>lhot zjV{!AMCsqI&R`Q;L6GT5A-Nw%kj`csJ3)}yNg=s^Mv&Ys0=KXm1Uc5G{}RrPID&MV JZ%;MK?O$rA({ca+ diff --git a/target/classes/br/com/grupo63/serviceorder/entity/product/Category.class b/target/classes/br/com/grupo63/serviceorder/entity/product/Category.class deleted file mode 100644 index a4fd968f6dc71ca99b31a30996e7490fc460f0f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1095 zcmbVK&2G~`5dJoaZQ?pjXp*)-`6(cjq=FTy;6S05ik?D+RFp%-#j#h8k>jm4n@YSD zNK};B=10C3kyIp6OZ}-}*eLOzY88`$@xN}& zHyNtET<*4q4YV05amdgrVKPq)&sKewk_zJfh-8msNV3ggoQjkAbS%^-f1G4SWZ)+w zU&SUaE^B%c&lp|}|D(hM1}7AW(1I+pGqU|b=!pzJ`id&oLJ@I$#kTR-E#H>BJCV>Q zS=Tzf{%U!oH(MmQr*f_WaU7e{8jG&KFtfxijjuvqg}P}5NGF@l7CIDnDf)~mYP5TU zy`3wt!ShQv-zlzOlh$>51=@t^5W0&kiUxT;wsD6dLYiR_r#aoly-Y3pEQH;m+eVcV zKu;hFW5mM!Lj0I^W6m91p)uIIL~B`ki^R53Cn+PnnP*>1yM?rovFLjh^bZR9!)5wX zWu^-t;+ttrrmXxGrnTsLVoE#tHsuw`8TGn_NJ8KXf{LSdBQAs(%Of57=hNqM7l jaO+0!E*1s7DGIVpuU3ljO2ydMJ+ia0FBS7R6Mpg+<^8&w diff --git a/target/classes/br/com/grupo63/serviceorder/entity/product/Product.class b/target/classes/br/com/grupo63/serviceorder/entity/product/Product.class deleted file mode 100644 index f51b651b913d9cfccd61f196b50366855b70bd27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1978 zcmb_d%TC)s6upxt1Oo<~kWl)jZDJm7d9+n&+0e2|5fT*(#Kt(I#8qM=;~;h44{9YM zq%Qga{iv$vj!g(jDizd7_SiG$o^$TKGtRHyKYkL?JKD%mf|6NEX_Tgnpclu1<@hbD z9<)#Vmupriorcq}n@#D}C9kx6&#L(?+x4suUg(Bj1ZCd3o*QlnN|q}JqclRJS;}cN zMw+12KE6{KoVkwlgPII1sR*o-z^}EP(AtYeK?%1eNUwgj&upt{dv&Yod-Y9rI>9z4 z1sUc3)x$`7N~39-5tQ=mmJ~GI1KSS+7c^`zuTgz4d`8}RY zg$?&q(E3d*#5IKj{i6&Uer?YVP?=B$U}_DRIvlK5&rDpJo9K5-!0BddvI%K4R~!mD z>Q#@M^FPJvGTc?0z$jOGcw;4W6@a~{|JM<5nu5lFxJ*FME707o`PtJ;EBPTgb7e+= zh`n5c#8wzG2FR6}*X3JzVWQl=-wqtPM%-_iSxOj=28~jl?&GZxq3HpX_?P341Q;LT zIgJ!CF#Y40{wpXlm@Ar#^A|L3E_X;bOQ{YSW+~mF;+0qdQNRIR0?Qmt!R#z-vglUC z(G@MmqKsdlC(2S$rOSqkD&drR;*`_MTt2PLEns>YR{_@?E;jo#HhYAT!;H&X=;jhT zh3Oun8N?9k!N$x8-!*0^6TEIH6I@w?zd$GhS7HSG-DmvP5nK)_AiMMrk!*MwUiuZgNrSY$nd_uaE+#URl(&{kEfsODt Pm)!I&Wz_67)tL1^-%fVp diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.class b/target/classes/br/com/grupo63/serviceorder/gateway/identification/IIdentificationGateway.class deleted file mode 100644 index 5d7dadbc295019ead7e37f87e75cfae2945a845b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmbVKO>Yx15PeSbK}#v&vn}Ps0l@_eA+?nPNPM-5lqywQ^}@-!JJ~uo_SW_$st|vS z13!Qtg_zw)ML|6j4qoq!XWqPdGe3WQ{{i3)9(T|X=qFyLZX$DE7H<2M4CJReCFe8p zGFOpi>O$&_Y}6y2s;Hfn{r-ZzKac95DbO9Osgg$7Tn>{lrBR@hQ+$8X&jg-68~k}5 zIGgvL&mCpdMh=S#T$vuD98f%S*`e}kLXmu6l$ue6vV5#_t77R%V0xE zJficGLOf7K!Lbb6<`%hGft`QGs1q4tY5&uSKx?W@$)dF6SDk$mc(Ta%Qq2Y8+t)67 zsN&hF@>+54T(hB>^2)I*eM)=UaNVt|_u@r0bAgvv7D|mPGwBMlBjT~jz3Mxcooh5L zD=DzHxPRPl>5ahp-+P(X;|gs74&faKM3dz}8%=cBY6;xnYne|2E4az`28XV)b?Y+( qVGXy@<-dSCxXZ7r71BLE-GKWX^`OptSZ8+Gz0SUkfK5CK*!m5O=mm`c diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.class b/target/classes/br/com/grupo63/serviceorder/gateway/identification/dto/ClientDTO.class deleted file mode 100644 index 748b00b5ece73b3db6671bd8c46e8b6c404fa3db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 713 zcmbtR%T59@6g@>AG9n=OT)IO{?83x_C^2eGOvXo|abITYSTamaDH#7s6OD-rKfsSN z-U7Y|I~TpZk8@AYy?y_9eFLzIl{`|I${}4q23dx^mf?Z!@W}LT_0}fuO4CS*_C|FX_Wl13*C1Klp{#0cT$K}DK9TlDhv&kGjfgc5Pj<=F>L}Z<)eIFQ30twAV8>qRG>kT45?IvxUTKN-fFX3t=B>Q4g49d za6p{-QHY5XLmQ-s_TXL5%)Xg7Z+3tF`t}{bGu#dl2y7)TO6@4hU3F+5J%~zjW0jJ1 z8M%mzSNtO%?f$gzyHGWPg5HomC0Tl4Ki-*6>0L6^`$OJ;Lc|Jw{mPv&irdf<&}P(i~I#x=McXrJ~#_q0@ileb(w=# z_{c-v1Kzv$?*D-JilqQwYUEX3JB$OPH+b#U|6N?eb+(#pTq&59x`CS<2yp8+n&vVL diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.class b/target/classes/br/com/grupo63/serviceorder/gateway/order/OrderJpaAdapter.class deleted file mode 100644 index 74354584ed4ba0e949a873d3b2cf59fbbf14669b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3095 zcmbtWYg5}s6g_J&s*M7!LqaHoM+y`SMQLag5))bjfsmR&fzqV!wY?aDENLW}4AVc= z&a`AmXFB=Z>2K=vt|V*=7!OWA$m_kkd+)jDK6d~9_sw4b9^)W^7}^xHtB9k6;bFni zidID{J5}4dKdZUIIns;5a!SI{%G?vL_^}quHl*yC&2uGgd%|J3c3|@@VOy^5Sq>4_c4D? z*7BBF&Q1n`s;3*;hVAK=$&GB9`07&8jTA$i+qOX-4ox&}-K&~KxmjBY|74R$ZT(<~DLK#=_5hjTHApX(Nrz7#p6Csp!8B8gdR`D@r z7`o~qlgq@7>p6l~82Te;1F5#{FOrhG_(Z`y8TVPry}FXfK8CrghdpxAxA2*Y`_i=z z&yv`Zn8QN_k7N+D45@lj2fR|MO-$}8c+4=<8j(rr5ueMDe!)^QNl2E=XFy&uT~1e+2I9)B26}5M+ z@e$WCy+nkcZzCjH7v8>A+T;$eP{(n|P-0szo7}591n9+;I?sGlXqVLB0wId~Magit z)x(rdfl7w8re~v^gfM(+F7y_{)3;TnHd7J1x~miUIn%T}E}JD$@+faPWzDr6-7N1( zre0ajq2@W}7tp{#><;w#rYt)tGKB|yVvHMz@>+_tJtQLN}P z*?P`4h1cVZEJudSrM^-lc7){}+d^BiDz;@3o#b0;(Xu?Mdu|7LXNaC@gBQlqHRl$iW?=@ZA;zlg-bDx3GU#g=UwyVQlN3plGRU zrYW2ygS)P973?vLUEt(0_Y~08IM{qERb{{hMyMChfgwjj4_;Ik_E1x zLW|M#Q-(T_G}>wRD47_;EsPVKQ6G#NXbHgt4sVmJ-?tzwEs!Nia5D264>D7Kfc-|Z zfLDnO#CDy}WX-LlAFdjoaimf?`A!OXoDJ0`GE;9ce}aWN)L{pxh^g30+RC;SRj9Fiko3mUKkQAjC-e=EEVXv5yJ?!!T-&9HR{ F@B#jd^>_dP diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.class b/target/classes/br/com/grupo63/serviceorder/gateway/order/entity/OrderItemPersistenceEntity.class deleted file mode 100644 index ac7a4fcf9d390187ac80a36408b2e806d1672dca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4009 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 L@(#Ai;o$CH0Cj=X diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.class b/target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaAdapter.class deleted file mode 100644 index 70f3447527bdd1f44ed13143f6f0d3dffe77ad41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3436 zcmbVO@lz8=6#g~}*Muvi!J^a_)S@MUdaYQs4WfXeXiyZTYHjT%w}gYs?akc`cd>JN=tFeVbdjBazfHnakb2-TmJ8-oE$t{q@i5KLK2YZy>{Pw;EVA*|6$C z)0dZ~tWX47PEE+b7J*ggk$B0sEkBTUvldyxi=1fNT8@XyA_$!@5?)Q*Y)$0AaMVN( zdKr4B9nXno7%q=jx~b5RyBaifxwx9ed&nBdndpPbaJ3sqJ5P;r$LF&)_ahN79Mc*| z_E7jTbRrpSGt6}*cQ9^(QSL)O1`Om)e1HPO^}`WO02$1XZ;4sYUT~Y?I>Wi~$_C%! zmdm}mb-%hHYEik^DN^1)X5vE(F&L3tlD2ReE{zwvns|W!l~E^54C5n)<7SA*%u9Z{)=PC0T1}csx?ll`#5j^5mmn4OXtZ{dh2aXzR;n8T_2^p?+CEKpE zqrR0X<#mB$xY!lz?d~Rk-gt&#sq6lBE*ei$>bMgKIKL#Kb!jj2fKrKyF`1ijY?7yH zSgUw2WLKQJ$D?LI?s}e1xdV&KbXT$m7&}9(%$m;dIKc}kGL(rbzZssTDQIcBo~SfA zG=bY48Fy%?o81$n{m7E=Np2mwaT#(evKiFGf}_H9C|Ra&(eoAG)-RVQ>P zkY_zlMqE{II@nT026Zd+l>^t*dB2pwrbSIcAY`=d3u|6BeCg4-sKA($GNRhV{WwCx zJPHFn7|f%}@YDaZ>A%A8P`BVfFYFuy)(q55tiz$(A}Mo@w-r;?7lbMTxjHZ?z$^Z zBvj%odY%a8T^@!aG(bJZ*$$t)%{&7h!$|j~RE1(+;560$Y3gWh(o;|^AoUQv^i3B6 zGPp&fDvr>PI*UKRo=*IZBTJ=UVNCAe{S4lKEls|{;LkLl!EO5QZ>=3fmKvnv^jjp^ zsdzu`;4X~_2^B1njw}Xo5BF*3GD&+Fi9up&hG>IQeT$|t^d3|iCw6c=gV#6-yuxUr zQL$B+O4Crhd{5IL9^fI(Yy1baWQCp#9+8l`60N7E^^9sgXEWGAk;Te(V5#9nhD7HO z-Nhi^Cz|N%GM|JR)&ly4m-HQ-ibny zoLC|^PT&M4sq-tgD3~#lrVv~Fgk(K1<2ae)di^g|&PH(m4dwTys Yk20x7$Mpg~f@6aust?~p0}{jk0;+(@d;kCd diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.class b/target/classes/br/com/grupo63/serviceorder/gateway/product/ProductJpaRepository.class deleted file mode 100644 index 79795451d771b2fa9a9fe499f8c49738fde009b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmb`G%}xR_6oqe5MEpf}ZjB4w*oD!}DDe*x&8S2kz?9BqC=TtU(}B#Zx$pseDC31u zL}H8~ESmPV$;o%_xqW+oc?Ezo*e*eV!FkJaX?i@gX>3l8c!IXCBpMr_<)Lsm5E+lH z2~z2JBj0ah@rbcWlruIf!6Ji7SM&vsgbw*btBcZ=V2Q!8u^~@lt9015qK5-xpLrmh z;N4hoJC@*6g3AnQQ&5f+%tNNH=%U%LyEy}Tj}63yT%9|26Yi7c%g$U z@)Z*M(>+l!*xUEN`I~OY>mB4*sZ$a6RpLA{d55lJf`%A+acC0;Yw}Ym7b-VZsD(={ zi6;LLJ@uz-{@H!hPPyzWga!c+7ix*M(Suj@7^_Y=$&>K>nNpZ9+60wvsJm5f+WBk& z&zF)K2rEsKT8VWPQHDFe4gBG7R%p5zEI<&=ns@(h3ZwRiZmFst1oVhAS?L6qV7zGvF9YL>lv zO)f8*irW>tVmS_X%UpY^(lyJL;_t0P)8jSi3njfnlemC8~=x<11crFds~ z$}(%637ZcsU)bvm(rYzAA zhYP~x+x6-`_g?D6#9BexmQ%Dmq0fOatSW-QZ~xbM>W1vLu$KOq`?OXVMz*-B$kLAG zkv0@@N*Yyii@I|dR!9Q>Aag=C-aY*GtSPtO(!a4Q>z>V@2+i7Ti`+idF6cLM+GK;b zd73O5>=T#-(e$Q6RZO@g{(<|LBguvuN(kxqMvAyZr!lf!ru7P~DW4oy_b`trc_X++ zwhZ~6(W)bda`_{$T>dL!Uy%GnmJqVq4lS{1ikLwXv&hkDq8WiauG2~1xq$`BYSKQ! z=%6Ke6SwHwED@m{!TFBCSGlhkrQcclO&wwSBiWmU(g@Rj4sn8>B-o?0*ToXe*r1q( zew!k6-VItcbR&0!3%Ps`Y~7>=)`4rZ;Ti!&0o)Wu=rX-p`s%bMtvWcO({_kxW*qLq z6lr6kztO(n&q#KfYX(oA7`)hSXf0?cdSWxFu4ba`W}^Mggm8!8hp^NZ!7`m!$U-7m I#ogDyZ#7Pk!vFvP diff --git a/target/classes/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.class b/target/classes/br/com/grupo63/serviceorder/gateway/product/entity/ProductPersistenceEntity.class deleted file mode 100644 index 15694ac20dcfaaf06b3e8a15e9cff28f25ef54f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3525 zcmb_eYf}?f7=BJjvJiqGMya==RxJc|TeWz>8$$2~h(KvYTf1xyVI|qkY&N$1g#Hr0 zwlfMd?My%Vp+BnjIeUQ+HmN$DNzU0l@BMi%XaD}^kG}xigp)x69U78Zq>vVPyyEJn zQ_)Lqz3Pl!(miRenQKP5EbWq1l!{~PCBu_H8ymVSt4_`G9Ct&Pwr6=8`kZuYR?U;P zDGUCIK>CJdTiz{!(V^)NQC@T^hGpx4_}K7L2A$~AkjbJOS%Hg9I%?8=Wtq}(i_(p} zsJc$EZhHD$unTA<>CGAyDUcf)o_=Y(GW4=xm-GeCwd~SZ7xtl7LthsA(J%0*orx&+ z$VL=+U@9j5r0pB--)mMymdoNG4heM9!#S6MG`l$I)K|*Vck#0<4&#VGsv0mhstnnb z%41m^$L9jwR5`&+m6#uaD-66{TwxqhSdrkEh7$s9C0ig8Y1jiv27@@I%Iyn*t9xpq zT|Og~tO}K~Gg+L)m&DH8j&k;Y^>i#lE5ljjF+$V{=Yyg^|E>y}c33}(?R*v&pbK(D1UNb*Uw%mP;x(mj&kjBO4!!DP0)EXckvg;x*5iaf-66is709`no`6 zsG9EY|b5Z9AUfS&m&3 zI7++ghU*!6b!U9&ca555jtLx#rA|2Idc`KW)2^4x232-&o!#| zJy}>BpSVx4`NGtEVS!JnRq2^)0`aD%6fqP|6~^xs=2e$}Ovb|b$aWG)POxMIdZ#U0 z&ekg{(p^-jvfig1(^C*t+goP(CVJKpb!gT7P#D2b5rF-aR~G* zc!s$?V^l*w`(~uK<`m})mqXZNb*XFUqXuE5Tf;MfeLGi&>LCq32=wio1#P6^#jew! zl{6Rvmp)+v3)CBX_tRRnMJl3!x;Gc9B(z#|YaWd8Kyh@EBfPbCv4qn@v2>FqG9&P$ zeSLnCo0$ct?wWGSQq_9ARdroZX=*i13jVhW3ow2Z`Nc$PchxOMlYsD8c2WK!YdFcl zp5XB5;K~mO4xw9o%kk|t_dDveM#A_q?(&&ecs$49h=Z3}$T3R(3F@W%SxnwRf#-al z3OMhPdjA;`5)bfDEsroQF@srT$d|%n(&y;GuSoIZ2FK{m2)&#q9ZM z(f)UQ?uB?y#)O7_8ZRT@d;U{`9BNcw!Beiv!`IOG1kj1jr}<3`@qdp0ulWC(|BLVF zFSkv6^BPI9g{!}jyV1Wqx@f3}*7xH)vA=*}UfasQY@j*xPkD6>iT4ab&?}_r6@MC* z`TAVLkMGIgQ?zD^hM%Y^g_RK2=iHOz&gHi-mLE}&o+F<5^C5f*AHKA2zT0;tAMkHO zl?%&76^kkhm86{dreSCbsUBt?eI)hqu+KMsldD2Z=dKV-DdQ?xjn=Xafu}-itX?0A z-NJ9sqmXPA9*7m@N9rESZ!pj-d^A>=pFA7R1@I(G$8+6TKi=w4qs zsK)d*#OV;?u<#U|0urlnDhEDPWzfQ*N|haf64v5W`hC=hZYwW?o)1;3WG7(xiFvs_ QOxF2c<~avI1@<%GUrK3ftpET3 diff --git a/target/classes/br/com/grupo63/serviceorder/presenter/OrderPresenter.class b/target/classes/br/com/grupo63/serviceorder/presenter/OrderPresenter.class deleted file mode 100644 index 09dbe055a55622175ef9ab2b05ee575e66349977..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2791 zcmbVOYg-dX6n=+Gg2@1pi=eh@DOfIrrD~}*pv54SHVPJ`)m|sb0t=g+xVxdHH+%cs z-_m}GkNQ0Q0e$+L`t+RLKoUszLGxi|=ggUN-gD+XbMp7U&;9~1hu;!tL2Dds677fy zq_)+rGHm5+8q2wDGw%z;W-Z6^uM4z}j;+VhAuyM7jl3=zn{K(JXD%C_>F!#2Q@aI| zHyq#9woRV}UmMFT%pAxT)|L~9qcwpfWE`CmUFa5=in3@rzUA*3q4~g`K>McYFBJrO zM#r)>$XV@drrG{Ui5~Qlnis0|jvm$;TW1LU5~naA&`IXjw6E+HmjV&!YcRW@%Q@Q& z44;-bgR^vi4A&p%uXj+@4_&+}agIYwl8cOOQ7}sdhIm2ZHHMfZOEq~CuS*PLM4*Es z^v$AI7i8JDY$I!VemaRaFdE00#5g7dx`G@WY}2KAzH6$Yz}fvsg3VBBtOlFu9-_dc z#1st5lq!|%J%RHL`Ws~@?_1h27ONlR_$^$DYY0Oe~_+rEC?BDG{^l7Fk@pV3mRLyA01`knnj;T7& zRJ|#1Dazncma@47)!0e4a7$uwp9c5JDxfrP-j-O}r$J3Vj}IlX%uJ?1KuT7=E3wS% zJ;sXD!FPTQ25IcTG_-Qc+}eUfJu)wRl|> zw)tBY70gUz?EmL1O;zCQ1z!t18jZAY^sdv<>2Aih2BwkkSZGyX`bB+HvC&g2a3k{I zaWJIrnEsY7tSDC%O}Y-sWtXjrxq=!FGBZ3au=k?5;W~JU{2Zx9%29XF1bF9GP(ehi z$e52_Q~*Yx_rTD7&&(*#q{bwWi8R(Mfz3cBR(09Un~N6Hw6~GaQ~X|1o4u*EPYbH<7UYQr>Fqtt#q{f!@N0C`)X?O2Hz*Hwo_H_#Qt94Ao9q&aU1u zjcjm@yvcHwbeiM-m8Z~bhnjLuuX3`tMyK~l&(WWjl`msTPJBaxVBd^ zUv4vW8GW`sHC4A6W!tNkZxU7HlH<@n4_kSj>BaGrz{ruDGz%||Uj)uYt5UIsxu6#Q zkp4jNuNCxsAV%Y7v@&QGG`EjGf%ua?TJSlIybWq&U(hH+1$>FGXmtV#Inv_8zmqXG zdi^=#51!yec4EAOLQwJZ!HJWGXKMf-~6?#P;1zL4r1|~KL__z+$8OjD(BtJbg_7avpLe-B64Ah~S r#5Q(FuLC2nQ6$%`aA@5EjS|hA#ji>B2p)FvBS{h@d5oX&D^C9hDwrNU diff --git a/target/classes/br/com/grupo63/serviceorder/presenter/ProductPresenter.class b/target/classes/br/com/grupo63/serviceorder/presenter/ProductPresenter.class deleted file mode 100644 index 2d1e0443ff1e0e4747f155a8ce507bf51db44b09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1331 zcmbW1ZBG+H5Xb-9rz`Ct6(}M;fr|D)IHg$7@(|O;#H2zKNE2UPdz*5ky=}I87`~Oh zDTyY206&y*mbGMx7t-N+!&6dpyY%WPVKt<1 z{I;t8TCE-Kr(htOLK>!lNfS3P#jrMx$vx$&Q>!1aMoflyhpTrE!*niR|DAYUc%6!l zanr;!X2@+2xXt7)d*z!tjjV||++r{Yw`cb_!|Vm%fs$^Bylr9ucgU5Hfot|pXy_SW z@0qxd2MkHVHY643GPfrDR+pcrx@6)Z9+59`L*EPF&@})rn|Ok!3~2&aZN)o6o-%Au z&i_%w(LoBI*NrGJl&*1H*ZG-=6s=78qhx;ZV7z z>aNH4{9cR8Lz_xPovw?v-EG>^)pocTQ%CNAVRP)~|2tfTZio^!B^W;D#xnkX4=dyA zeuaUc3=#pGVf{K8&~VbQF}xXj_-dJC-g9*%oQ5rF6sSE^+0=pXWt+csbqlhW+qJ4k z4@+33Ux|Jqpn@Vn@;O-+X+}C;I0O59zWsuv-qv!Bq!~D%gmtne@DgQ$=)*o~4PE&P zczqksUb32&kixK_1z&BwSGKAZir&>6CH>^2U(y18knRZ&rq0oOk$D#H$}2^ f;JE;f4Q!H?#4=vtH6>FaD^3$dieZan1lvCWLQiV$ diff --git a/target/classes/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.class b/target/classes/br/com/grupo63/serviceorder/usecase/order/IOrderUseCase.class deleted file mode 100644 index 5dd5497f864fb57841b7d011866c2b7e184f1443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmb`G-A)@Z5QUGIWH+IO()7RZ0O1B-Ahj2vt@;B}q);lM=HBs+Hb%}m@_JGGYFzXI zc&Mtg*$_&RkhbD#?D3h;yJyCizb}3Pc!!+?k-*!Dm)gx_=F7Qzvo8zs=SGwBDS25I zq*Xz(-VINxKWZ6uC{pPogd00+e z=`|f0%ZT2M>E5eGF%}S5C5h3AS6+2kRLtb|yY;f2_^&TE!Ybj}QX)S0A qJYF33@Pw03SsdXRi=X4gU*gV!#$u-N;Y++?adknR;?3(t<@O(v78i&B diff --git a/target/classes/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.class b/target/classes/br/com/grupo63/serviceorder/usecase/order/OrderUseCase.class deleted file mode 100644 index e5d434f09420eedd058c6f933c1c92701afb83f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4515 zcmbVPX6O2RJ#*T4P0gjc#j*}oS!C(?OvT*{&ZJM?jMi((=m{DiJ zCSB4sY14FX(|upkEp5}*wB$n{f9R(^{VDwgeV#7wof(M{rZV&cjONZg+k4(~&b@#8 z_gjAfa0-9OA%hMLSsk6|5;!{V6-{@!So6ZVd*WEpm)?qHO4qAOuPB|s3Ra8p%d}b& z*j1B3Igrb~Kwn|Fa@ANdieX^c#fs$zrEcuPZVfpd-OvSkT0c|T3Z!QQE)@;5NK<9B zP7OWi)sWY*7k#v`p`o!wKwC8Yi}HFP&`}tER!Q{h*oOgutP?HwH+0*EQ!7r-UzKK1 z(r~B1LpzICMYj*|Q9MN$$W95!gCxC zYdE3f5j@($%Z5^cZr3|UFJ>1#_nN?ii7Wp@Vd7Vsp(+JqI!ZVh*V!eHr6|zK=1Di4 zw`G+6(>l)Jaqjh1`lG%3((xx-hv#xQiwO;rI?iEAARiS~WI5hK*Q=4*Il~TVk!3Zh z`1PcYvLZt_A$mGAqIQtOQ>bXTpyMK@8ztU^TVS`%bZ_W6uWUc9;~C7ba95Q6=>>s( zg~>Dk&7d;4tYc0EwTD5?x`AOwk*OklmyUPiS;|^f#o-0ZG*ph7_4HI*+BZnmDqJj= zw^ByBK8N>ec%P237Hx?Bc%cl zv{kW1Mmgt#Wu}oS;BC%dgs&?` zhF#y}U~-~)o8PRLd7_V;#Anm_=8>1h>FSg%HS{Sy>n#<1GEcg}YF!p* z;uAV?%b#`Kzz;m59&^;sW1x2zew@RrxSq#P1txAi3huN5O1)ipJ%^v;7aD%4<5&2# zz@d%vgXOHaOR`uomglPm-7ppmlgE3WZo6478*hJ4^Dq&Ly?)Ygs6I42S)%d(eT+@Emrb8e60;NR8#7iQ3B6u+9O+HihVM&un%@fCdkZF8g{R?7 zfxFvpWkJMP@N9n<=a9e$(Sbg7`{1dyPYw6z$+Hlj8b=t95Zv)$zWoDTTmkH!^5`1G zIy8Z?>|k~sdj!6TY4z(4ft%Pr);aP=3=Vd#;lLV()-jyHTPOl+ICc|<$GQeP2fNnr z*cwh1k{{!0^Al@0|H_hCe*Hghj28ZkOKX^YllD6B5&l2K+aKs>hMo@L0LF2UhsAsF zJinM+S>pNjMeaDxyXQE+e-t01zeBv1ejK0R8vVv6@hLvlub1#LW6$6!K8?@t`3hHc zWd4OcyubGR6PNK>u4K9AReYYmIt4|**Dv6U2^<#1I=D8(Sg#ye$9pz{yfQ+7p67aX zbRCNs{Epi)Q4~FqNC9{7#&Rb{BaaWpYMR~+;Y*QsRE;m=E0k>YWp{=fz)#Abui|To zKj*nI!?l6LuCw9KO=LD)=%N%aD3R%bSfXiq0I$)Y*kq8wzZMz$IuXr8TsY26N=;4~ zTZb!BF~$ZSjtuDWuEfAMD3Kvm1ippkMAI2QmD}B0!4<0-OZnQ}^tC&IDM^olMDVm_ zCVDH0-aJ#`ZRozD7?sY&8D{x$^pZ1*Jux8prjh(sMqa?T6C=;@nWb3&$e*w>GI|4p zBS&taI&%LFqzuJT^hX9p;{8nn{ZZ*DDEp)0Q&9A)s|d5IBHPo!4S9abb1_fh?{G1L l@8WxWD#hRD^9TG>NdJsNKg5sl6THEd99MqBy!;-6{{`sv_PziB diff --git a/target/classes/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.class b/target/classes/br/com/grupo63/serviceorder/usecase/product/IProductUseCase.class deleted file mode 100644 index d0a7fa9a998b4e7e30578185e6716b6989bd7290..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1517 zcmc&!O>fgc5PfS>n}kA3Dc@h$a$yfhTmn>WMG;bHD@F9aU5}it9B;H<7jj1Y27Utn zfdfCFKdS1uaneAkD+*N)mhI8J_h#OVX8+*FPXMp+G(sTI-f>dfzD!&(urFW8oZOz# zWL->77CC8^lN>l37uw7BTceMUIjwO#LPKDFSM4d8sw|P4JG-R4K&TxlPXgbUI(77v zdEN-|F_Hd%CC6l(K|M z!}>OpG{(qnm6}+U@Cgq)^MQQN##_p%K6!FEJ2NUkAgcNhXs}nYz?Y@Yv5_5{C6{1B zgn5DGzw3O%`gL1m@l@Y|;eHya$$1qv>o?%+X&#wUc$3Nw6Sf7KU6W+W7moMq>;Gkc zb)MaM!!?D)fTzy|g)yZ(Y5`wg*(rNitAD0f+X4%v>#M^xE+(;VxWS7jpr%)=>z(=c zOLIHs*d?JC6@7oMQ1c>;r!SSnT z@mDjzHGa)*a3%X0XwP3|cg_>S#kd zLw>_IOmEjH`(eeqcgF~Xzh|4m^DW^UWiG`&KQJo3XN9ITmR93Gi}5^z9`HRe>skv= z7;G_Y=ZekT30KK43kMH5ptu$1TG46Wn){IGOuBP;r72LR8jM) zjzPRefyLC+veH+RT+t3B<#P$I>$r+*4DD9LAyJVVTUXA8bi9EZ3^y8`5#t3CL)r5W zo-gxVqI@__c}eUc{b_8t`}&Ygmowq0A^*D%H~)r^BM5GD^qRilZj zo(7^o(;CK4(0Kj&Lyad6C=$~blp@2AXHs`lai6fk&bBoeS__^<0rwPbS1gCS8^T}X z8xGC%6+M$X>)f~1dotN7x9osnx@n~KG}Y3aCz|5j&2YD=pJRFegO+f?Fw@k*NtBVA z9t*kUS*zS9K}z9MZmm>8i{ZPpHlucME~qm#E{2Rvq4d@_CWh?%x2A|%QlQ~J!-G26 zOJQ!ATikJkTNbKm?@~t+hii;wPcC?&YgN5a+79h)hLz^RJ&DnDCyaJ4Lubh@yIh7o zY3lp`)_Zdq9wVRoN`PU-iuS2&9?&r^&ZmTR+FOe3xr4)Y7T()e<3w={8*s4GE*S3{g>RezLd=k>lVOOl%flX~|)^$C} z)p<-iJ6H7lvJq6&IkTxY{J!V!7y)g2;mL!FFiP=-h6K_(=Xo-aKCi?LBIv~`!^OkH zFn#p)bl^#rZc8J*SYs%V$vO98zNa1QSv1Q*l}Ja` z`6+0-iiZTIXe-gED$_mw0#}miJo`C{MV045^l_YMn1D`k9hIrOiq~B&Q+GmKLz(7D z0dbjXlyJRK36m*^bV`eO6xF6q35yh?QbNq$5}D9Fm!2v$gGME;wwu4;&7+iJ#q~ru sdTfxS(u$ABJcEx>q*2*Drg52m%I+y;utG8`;Y*sy(#%(Q4vxXU0bD-qasU7T diff --git a/target/classes/db/migrations/postgresql/V01__create-tables.sql b/target/classes/db/migrations/postgresql/V01__create-tables.sql deleted file mode 100644 index 393467d..0000000 --- a/target/classes/db/migrations/postgresql/V01__create-tables.sql +++ /dev/null @@ -1,43 +0,0 @@ -CREATE TABLE IF NOT EXISTS cat_category ( - deleted BOOLEAN NOT NULL, - creation_date TIMESTAMP(6) NOT NULL, - id BIGSERIAL PRIMARY KEY, - last_update_date TIMESTAMP(6) NOT NULL, - name VARCHAR(255) NOT NULL -); - -CREATE TABLE IF NOT EXISTS ord_order ( - id BIGSERIAL PRIMARY KEY, - deleted BOOLEAN NOT NULL, - total_price DOUBLE PRECISION NOT NULL, - ord_client BIGINT NOT NULL, - creation_date TIMESTAMP(6) NOT NULL, - last_update_date TIMESTAMP(6) NOT NULL -); - -CREATE TABLE IF NOT EXISTS prd_product ( - deleted BOOLEAN NOT NULL, - price DOUBLE PRECISION NOT NULL, - category BIGINT NOT NULL - CONSTRAINT fk_product_category - REFERENCES cat_category, - creation_date TIMESTAMP(6) NOT NULL, - id BIGSERIAL PRIMARY KEY, - last_update_date TIMESTAMP(6) NOT NULL, - name VARCHAR(255) NOT NULL -); - -CREATE TABLE IF NOT EXISTS ori_order_item ( - deleted BOOLEAN NOT NULL, - price DOUBLE PRECISION NOT NULL, - creation_date TIMESTAMP(6) NOT NULL, - id BIGSERIAL PRIMARY KEY, - last_update_date TIMESTAMP(6) NOT NULL, - ori_order BIGINT NOT NULL - CONSTRAINT fk_order_item_order - REFERENCES ord_order, - product BIGINT NOT NULL - CONSTRAINT fk_order_item_product - REFERENCES prd_product, - quantity BIGINT NOT NULL -); \ No newline at end of file diff --git a/target/classes/db/migrations/postgresql/V02__insert-fixed-data.sql b/target/classes/db/migrations/postgresql/V02__insert-fixed-data.sql deleted file mode 100644 index 1f6fd7a..0000000 --- a/target/classes/db/migrations/postgresql/V02__insert-fixed-data.sql +++ /dev/null @@ -1,4 +0,0 @@ -insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Lanche'); -insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Acompanhamento'); -insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Bebida'); -insert into cat_category(deleted, creation_date, last_update_date, name) values(false, NOW(), NOW(), 'Sobremesa'); \ No newline at end of file diff --git a/target/classes/db/migrations/postgresql/V03__insert-example-data.sql b/target/classes/db/migrations/postgresql/V03__insert-example-data.sql deleted file mode 100644 index ad5dac8..0000000 --- a/target/classes/db/migrations/postgresql/V03__insert-example-data.sql +++ /dev/null @@ -1,27 +0,0 @@ --- Registros para a categoria 'Lanche' -INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) -VALUES (false, 10.99, (SELECT id FROM cat_category WHERE name = 'Lanche'), NOW(), NOW(), 'Hambúrguer'); - -INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) -VALUES (false, 8.99, (SELECT id FROM cat_category WHERE name = 'Lanche'), NOW(), NOW(), 'Sanduíche de Frango'); - --- Registros para a categoria 'Acompanhamento' -INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) -VALUES (false, 3.99, (SELECT id FROM cat_category WHERE name = 'Acompanhamento'), NOW(), NOW(), 'Batata Frita'); - -INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) -VALUES (false, 2.99, (SELECT id FROM cat_category WHERE name = 'Acompanhamento'), NOW(), NOW(), 'Nuggets'); - --- Registros para a categoria 'Bebida' -INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) -VALUES (false, 4.99, (SELECT id FROM cat_category WHERE name = 'Bebida'), NOW(), NOW(), 'Refrigerante'); - -INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) -VALUES (false, 2.49, (SELECT id FROM cat_category WHERE name = 'Bebida'), NOW(), NOW(), 'Suco'); - --- Registros para a categoria 'Sobremesa' -INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) -VALUES (false, 6.99, (SELECT id FROM cat_category WHERE name = 'Sobremesa'), NOW(), NOW(), 'Sorvete'); - -INSERT INTO prd_product (deleted, price, category, creation_date, last_update_date, name) -VALUES (false, 4.49, (SELECT id FROM cat_category WHERE name = 'Sobremesa'), NOW(), NOW(), 'Bolo de Chocolate'); \ No newline at end of file diff --git a/target/classes/messages_pt_BR.properties b/target/classes/messages_pt_BR.properties deleted file mode 100644 index c7a81d6..0000000 --- a/target/classes/messages_pt_BR.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Response messages -default.title.unknownError=Erro -default.title.unknownError.description=Ocorreu um erro desenhecido -default.title.validationError=Formulário com erros -default.title.notFoundError=Não encontrado -default.title.notFoundError.description=O objeto que esta tentando acessar não foi encontrado - -# Order -order.advanceStatus.title=Erro ao avançar status do pedido -order.advanceStatus.finished=Não é possível avançar um pedido já finalizado -order.advanceStatus.notPaid=O pedido ainda não foi pago -order.create.items.notEmpty=O pedido precisa ter ao menos 1 item para ser criado -order.create.item.productIdNotNull=O id do item do pedido precisa estar definida -order.create.item.productIdValid=O id do item do pedido precisa estar definida -order.create.item.quantityNotNull=A quantidade dos items dos pedido precisa estar definido -order.create.item.moreThan1Quantity=A quantidade dos items dos pedido precisa ser de pelo menos 1 - -# Product -product.id.notNull=Para atualizar um produto o nome é obrigatório -product.name.notEmpty=O nome é obrigatório -product.name.notNull=O nome é obrigatório -product.price.notNull=O preço é obrigatório -product.price.notLessThanZero=O preço precisa ser maior que 0 -product.category.notNull=A categoria precisa estar registrada -product.category.notLessThanOne=A categoria precisa estar registrada \ No newline at end of file diff --git a/target/test-classes/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.class b/target/test-classes/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.class deleted file mode 100644 index 58adf4b990301b2917950476c45cc3ab997370dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmbVJ%Sr<=6uoJy)wbGN-3Tsp=L5__DB=sM;A*g7OZS;HjvmYvNM#**om@yIClo#>F0ThQaChvqzYFss9l+fV$hCI ztD7>5l^uyVrARk2Qlw*H(feP)n!86Lokag_c*>w9jdtqEMMg|WYxB0$4l^~z0;y47 zYvaOzl-r7oP588=bqRBHw2sJ;``JmUF*K!>>KgsLJAdtY=˗xaqUqE7Ct$kd~; z4?H%;aYvGL!!Q{ihKfsyhfc5!b$S*5d8Bs%2Fvuv$ub|=e*yL!(hWkN2BI_xTk`_4 nE93#JQnnJv2juy>U&Q7QBAqJ`+f?XfJ7g=c7O)H7(RF}NWR{Lo From efec9446475d564dae2dcecfa5dfce7adf367c20 Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 18:59:35 -0300 Subject: [PATCH 10/14] chore: change test config --- .../br/com/grupo63/serviceorder/resources/application.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/test/java/br/com/grupo63/serviceorder/resources/application.yml b/src/test/java/br/com/grupo63/serviceorder/resources/application.yml index 7ef1c39..6e088f7 100644 --- a/src/test/java/br/com/grupo63/serviceorder/resources/application.yml +++ b/src/test/java/br/com/grupo63/serviceorder/resources/application.yml @@ -4,10 +4,6 @@ springdoc: api-docs: enabled: false spring: - jpa: - hibernate: - ddl-auto: create - show-sql: true main: banner-mode: off output: From d71e43a728ea837db2b0ea648c636bc576c8658d Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 19:09:43 -0300 Subject: [PATCH 11/14] chore: change prod db config --- src/main/resources/application-prod.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 36c599d..1f11a17 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -1,8 +1,3 @@ spring: - datasource: - driver-class-name: org.postgresql.Driver - password: ${DB_PASSWORD:backend} - url: jdbc:postgresql://${DB_HOST:localhost}/${DB_NAME:backend-db} - username: ${DB_USERNAME:backend} devtools: add-properties: false From 7b91eac82f8c208d6a88a19447d3010716311dee Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 19:14:54 -0300 Subject: [PATCH 12/14] chore: change prod config --- src/main/resources/application-prod.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 1f11a17..36c599d 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -1,3 +1,8 @@ spring: + datasource: + driver-class-name: org.postgresql.Driver + password: ${DB_PASSWORD:backend} + url: jdbc:postgresql://${DB_HOST:localhost}/${DB_NAME:backend-db} + username: ${DB_USERNAME:backend} devtools: add-properties: false From a2f9d13752675af700d7267dc02e6503d36517de Mon Sep 17 00:00:00 2001 From: Thiago Bezerra Date: Sun, 28 Jan 2024 19:28:16 -0300 Subject: [PATCH 13/14] chore: config changes --- .idea/misc.xml | 2 +- src/main/resources/application-prod.yml | 2 ++ .../serviceorder/ServiceOrderApplicationTests.java | 13 ------------- .../grupo63/serviceorder/resources/application.yml | 4 ++++ 4 files changed, 7 insertions(+), 14 deletions(-) delete mode 100644 src/test/java/br/com/grupo63/serviceorder/ServiceOrderApplicationTests.java diff --git a/.idea/misc.xml b/.idea/misc.xml index a1f7a88..6788908 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -9,7 +9,7 @@