From d4e5da35927b522bbadd5ce3440da31ba810e6f4 Mon Sep 17 00:00:00 2001 From: devfzn Date: Fri, 8 Sep 2023 13:21:57 -0300 Subject: [PATCH] Spring Boot 3 - Desarrollo API Rest: Aula 1 --- .gitignore | 1 + 010_spring_boot/README.md | 25 +- 010_spring_boot/api_rest/api.zip | Bin 0 -> 70115 bytes 010_spring_boot/api_rest/api/.gitignore | 30 ++ 010_spring_boot/api_rest/api/mvnw | 308 ++++++++++++++++++ 010_spring_boot/api_rest/api/mvnw.cmd | 205 ++++++++++++ 010_spring_boot/api_rest/api/pom.xml | 60 ++++ .../java/med/voll/api/ApiApplication.java | 13 + .../voll/api/controller/HelloController.java | 16 + .../src/main/resources/application.properties | 1 + .../med/voll/api/ApiApplicationTests.java | 13 + 010_spring_boot/imgs/intelli_adv_set.png | Bin 0 -> 22176 bytes 010_spring_boot/imgs/intelli_complr_set.png | Bin 0 -> 36137 bytes .../jpa/tienda2/database/tienda.mv.db | Bin 36864 -> 36864 bytes 010_spring_boot/spring_boot_1.md | 112 +++++++ 010_spring_boot/spring_boot_2.md | 0 010_spring_boot/spring_boot_3.md | 0 17 files changed, 776 insertions(+), 8 deletions(-) create mode 100644 010_spring_boot/api_rest/api.zip create mode 100644 010_spring_boot/api_rest/api/.gitignore create mode 100755 010_spring_boot/api_rest/api/mvnw create mode 100644 010_spring_boot/api_rest/api/mvnw.cmd create mode 100644 010_spring_boot/api_rest/api/pom.xml create mode 100644 010_spring_boot/api_rest/api/src/main/java/med/voll/api/ApiApplication.java create mode 100644 010_spring_boot/api_rest/api/src/main/java/med/voll/api/controller/HelloController.java create mode 100644 010_spring_boot/api_rest/api/src/main/resources/application.properties create mode 100644 010_spring_boot/api_rest/api/src/test/java/med/voll/api/ApiApplicationTests.java create mode 100644 010_spring_boot/imgs/intelli_adv_set.png create mode 100644 010_spring_boot/imgs/intelli_complr_set.png create mode 100644 010_spring_boot/spring_boot_1.md create mode 100644 010_spring_boot/spring_boot_2.md create mode 100644 010_spring_boot/spring_boot_3.md diff --git a/.gitignore b/.gitignore index 57a9e2a..7cca52c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ bin/ *.umlcd target/ *.trace.db +.mvn/ diff --git a/010_spring_boot/README.md b/010_spring_boot/README.md index fc4e273..9c5d09a 100644 --- a/010_spring_boot/README.md +++ b/010_spring_boot/README.md @@ -2,14 +2,23 @@ Tablero en [trello](https://trello.com/b/gWJsG18e/g5-formaci%C3%B3n-spring-boot) -- [Curso](https://app.aluracursos.com/course/introduccion-sql-mysql-manipule-consulte-datos) +- Java y Bases de Datos + - [Curso](https://app.aluracursos.com/course/introduccion-sql-mysql-manipule-consulte-datos) Java y [bases de datos](./base_de_datos.md) -- Lectura [JDBC](https://www.aluracursos.com/blog/conociendo-el-jdbc) -- Lectura [Maven](https://www.aluracursos.com/blog/que-es-maven) -- [Curso](https://app.aluracursos.com/course/java-jdbc-trabajando-base-datos) -Java y [JDBC](./jdbc.md) -- [Curso](https://app.aluracursos.com/course/persistencia-jpa-hibernate) + - Lectura [JDBC](https://www.aluracursos.com/blog/conociendo-el-jdbc) + - Lectura [Maven](https://www.aluracursos.com/blog/que-es-maven) + - [Curso](https://app.aluracursos.com/course/java-jdbc-trabajando-base-datos) + Java y [JDBC](./jdbc.md) +- JPA e Hibernate + - [Curso](https://app.aluracursos.com/course/persistencia-jpa-hibernate) Persistencia con [JPA - Hibernate](./jpa_persistencia_hibernate.md) -- [Curso](https://app.aluracursos.com/course/java-jpa-consultas-avanzadas-rendimiento-modelos-complejos) + - [Curso](https://app.aluracursos.com/course/java-jpa-consultas-avanzadas-rendimiento-modelos-complejos) JPA [consultas avanzadas, rendimiento y modelos complejos](./jpa_avanzado.md) -- Lectura [Rest](https://www.aluracursos.com/blog/rest-concepto-y-fundamentos) + - Lectura [Rest](https://www.aluracursos.com/blog/rest-concepto-y-fundamentos) +- Spring Boot 3 + - [Curso](https://app.aluracursos.com/course/spring-boot-3-desarrollar-api-rest-java) +Desarrollo [de una API Rest](./spring_boot_1.md) + - [Curso](https://app.aluracursos.com/course/spring-boot-3-aplique-practicas-proteja-api-rest) +Buenas prácticas y [protección de una API Rest](./spring_boot_2.md) + - [Curso](https://app.aluracursos.com/course/spring-boot-3-api-para-su-implementacion) +Documentar, probar y [preparar una API Rest](./spring_boot_3.md) para su implementación diff --git a/010_spring_boot/api_rest/api.zip b/010_spring_boot/api_rest/api.zip new file mode 100644 index 0000000000000000000000000000000000000000..9509b0c70ab92cd68227d8ad9ad444c4b52d8a63 GIT binary patch literal 70115 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%0Dgnab33 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Χ@inmNmK!ndIrj)%rjo3p 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 literal 0 HcmV?d00001 diff --git a/010_spring_boot/api_rest/api/.gitignore b/010_spring_boot/api_rest/api/.gitignore new file mode 100644 index 0000000..82d968e --- /dev/null +++ b/010_spring_boot/api_rest/api/.gitignore @@ -0,0 +1,30 @@ +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/ diff --git a/010_spring_boot/api_rest/api/mvnw b/010_spring_boot/api_rest/api/mvnw new file mode 100755 index 0000000..66df285 --- /dev/null +++ b/010_spring_boot/api_rest/api/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/010_spring_boot/api_rest/api/mvnw.cmd b/010_spring_boot/api_rest/api/mvnw.cmd new file mode 100644 index 0000000..95ba6f5 --- /dev/null +++ b/010_spring_boot/api_rest/api/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/010_spring_boot/api_rest/api/pom.xml b/010_spring_boot/api_rest/api/pom.xml new file mode 100644 index 0000000..2240b31 --- /dev/null +++ b/010_spring_boot/api_rest/api/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.1.3 + + + med.voll + api + 0.0.1-SNAPSHOT + api + API Rest para clínica Voll + + 17 + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/010_spring_boot/api_rest/api/src/main/java/med/voll/api/ApiApplication.java b/010_spring_boot/api_rest/api/src/main/java/med/voll/api/ApiApplication.java new file mode 100644 index 0000000..e08ef48 --- /dev/null +++ b/010_spring_boot/api_rest/api/src/main/java/med/voll/api/ApiApplication.java @@ -0,0 +1,13 @@ +package med.voll.api; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ApiApplication { + + public static void main(String[] args) { + SpringApplication.run(ApiApplication.class, args); + } + +} diff --git a/010_spring_boot/api_rest/api/src/main/java/med/voll/api/controller/HelloController.java b/010_spring_boot/api_rest/api/src/main/java/med/voll/api/controller/HelloController.java new file mode 100644 index 0000000..e4d9877 --- /dev/null +++ b/010_spring_boot/api_rest/api/src/main/java/med/voll/api/controller/HelloController.java @@ -0,0 +1,16 @@ +package med.voll.api.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/hello") +public class HelloController { + + @GetMapping + public String helloWorld() { + return "Hello World! Test AutoReload"; + } + +} diff --git a/010_spring_boot/api_rest/api/src/main/resources/application.properties b/010_spring_boot/api_rest/api/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/010_spring_boot/api_rest/api/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/010_spring_boot/api_rest/api/src/test/java/med/voll/api/ApiApplicationTests.java b/010_spring_boot/api_rest/api/src/test/java/med/voll/api/ApiApplicationTests.java new file mode 100644 index 0000000..eb360a5 --- /dev/null +++ b/010_spring_boot/api_rest/api/src/test/java/med/voll/api/ApiApplicationTests.java @@ -0,0 +1,13 @@ +package med.voll.api; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ApiApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/010_spring_boot/imgs/intelli_adv_set.png b/010_spring_boot/imgs/intelli_adv_set.png new file mode 100644 index 0000000000000000000000000000000000000000..b5475da1b9862c5b9e6b8be8d68e68cbce923c88 GIT binary patch literal 22176 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 z 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 ygQ_FyaiD4}Xh&dRWO#1L-v1A`tYhQ= literal 0 HcmV?d00001 diff --git a/010_spring_boot/jpa/tienda2/database/tienda.mv.db b/010_spring_boot/jpa/tienda2/database/tienda.mv.db index 9b77537dab297566ef9f61311a9210aad7ff07a1..b4ca8e2e7f3273574b972fa7321407f309569534 100644 GIT binary patch delta 587 zcmZozz|^pSNyo#=NGB;LKRMgV7(xeUR;5}Q8WdyX5MyJknVhJXHQCZYX!E_e`y4V%Cj^c#F$gnof`drU$ixKB zGMyZ#-Z{BfLr2UK>~s@QNakdgrTPN>VU(0I`Midcg(;FNO~B4GHc3v=$xlu$ElA8u zuCy{RHLzI12#WwyXbc%m4lt5uOq^U`B*SPtSzSS4a=3<&D6(OuV8ap(EGEBc4w+o7 z$;W6hxl6M_iqV0AL7SO@0YroR2?Q)clav(v{U#qMlG*H)Y{sJtvkevj$N>qD^Hf7a X^Hjq$lgS(P{U#SEux$SC&*%UEjzg~< delta 1512 zcmb_cO>7fK6rRnlo!S(YSTqEuC8lZ|3%1G3?(EuL4h^MMI1nf;e@Ax5vm~lxo7j#M zE-?-gr>elaaf)a;^q5+liqxu7d+C7#sJB+-L=QzmRc}bZ?Be}F;?N@YGV{%w_cQN( z-*z{Lx|>7qAGS2rsn*#S!TR~)1#S_HvC0wY2UIURH!#y#w$^VR*gdGVwA@ zbb5w&5T<4wzf?+=c^<&AgG*y?h<-m=PGF&GoZDp5H$D;Y1z zkE8q)`}u9B7)vkW(3|k+;{H)XU9wj#%{8%FU0mVw9&mKHQ`iNc^d`2y@F?i^a_f{x zf27R(XwQMI1wKba z2W)XCyk~P70f%BOv^ZjZAz*sUhndfPAa!Uw-8T}{V6F= zoJ)YUe&mB-)S5qHEjArZb*sF^7WlH|7^GM!yA-x&jzS}+z|)!3g#IEa{AoEl7Hh*I zyaa_pE*o-<>S~Rzwk#tUIoP>Rr9%I^+%Ji-De1f?9}?+DyezBSg)8~pqyNZF-#B?- zX!FY?A;Ppvc?dt`N2S~FTYmcVR&qsL@Xpcp#7D!O2%LUnH3AE%wE>VXCI3ywv=>)g zs69<+4^p83;Ng@t^&jaDw>QQo(Pz>Px5u62y&O;*rhI{_nnmP!R*|={R diff --git a/010_spring_boot/spring_boot_1.md b/010_spring_boot/spring_boot_1.md new file mode 100644 index 0000000..e9c3446 --- /dev/null +++ b/010_spring_boot/spring_boot_1.md @@ -0,0 +1,112 @@ +# Desarrollo de API Rest Java + +### Proyecto + +Desarrollo de "clínica médica" + +### Objetivos + +- Creación de una API Rest +- CRUD (Create, Read, Update, Delete) +- Validaciones +- Paginación y orden + +### Tecnologias + +- Spring Boot 3 +- Java 17 +- Lombok +- MySQL/Flyway +- JPA/Hibernate +- Maven +- Insomnia + +## Spring initializr + +Spring [initializr](https://start.spring.io/) + +> Artículo +[cambios principales en versiones](https://www.aluracursos.com/blog/caracteristica-destacables-java8-delante) +de java + +### Spring y Spring Boot + +Spring es un framework para desarrollar aplicaciones en Java, creado a mediados +de 2002 por *Rod Johnson*, que se ha vuelto muy popular y adoptado en todo el +mundo debido a su simplicidad y facilidad de integración con otras tecnologías. + +Se desarrolló de forma modular, en el que cada recurso que proporciona está +representado por un módulo, que se puede agregar a una aplicación según sea +necesario. Con esto, en cada aplicación podemos agregar solo los módulos que +tengan sentido, haciéndola así más liviana. Hay varios módulos en Spring, +cada uno con un propósito diferente, tales como: + +- módulo MVC, para desarrollar aplicaciones Web y API's Rest +- módulo de Security, para manejar el control de autenticación y autorización +de las aplicaciones +- módulo Transactions, para gestionar el control transaccional + +Sin embargo, uno de los mayores problemas de las aplicaciones que usaban Spring +era la parte de configuración de sus módulos, que se hacía íntegramente con +archivos XML, y después de unos años el framework también comenzó a soportar +configuraciones a través de clases Java, utilizando principalmente anotaciones. +En ambos casos, dependiendo del tamaño y complejidad de la aplicación, así +como de la cantidad de módulos Spring utilizados en ella, dichas configuraciones +eran bastante extensas y difíciles de mantener. + +Además, iniciar un nuevo proyecto con Spring era una tarea bastante complicada, +debido a la necesidad de realizar este tipo de configuraciones en el proyecto. + +Precisamente para solventar tales dificultades, a mediados de 2014 se creó un +nuevo módulo Spring, denominado ***Boot***, con el objetivo de agilizar la +creación de un proyecto que utilice Spring como framework, así como simplificar +las configuraciones de sus módulos. + +El lanzamiento de Spring Boot fue un hito para el desarrollo de aplicaciones +Java, ya que hizo más simple y ágil esta tarea, facilitando mucho la vida de +las personas que utilizan el lenguaje Java para desarrollar sus aplicaciones. + + +La versión 3 de Spring Boot se lanzó en noviembre de 2022 y algunas de sus +nuevas características principales son: + +- Compatibilidad con Java 17 +- Migración de especificaciones Java EE a Jakarta EE +- Compatibilidad con imágenes nativas +- Lista completa de las novedades de Spring Boot 3 en: +[Release Notes 3.0](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes) + +### Creación del proyecto + +[.zip](./api_rest/api.zip) Generado con Spring boot initializr + +Configuración adicional en IntelliJ IDE para evitar reinicio manual + +![img](./imgs/intelli_complr_set.png) +![img](./imgs/intelli_adv_set.png) + +Estructura del proyecto [vall_api](./api_rest/api) + +```txt +api +├── .idea/ +├── .mvn/ +├── src +│ ├── main +│ │ ├── java +│ │ │ └── med +│ │ │ └── voll +│ │ │ └── api +│ │ │ ├── controller +│ │ │ │ └── HelloController.java +│ │ │ └── ApiApplication.java +│ │ └── resources/ +│ └── test/ +├── target/ +├── .gitignore +├── HELP.md +├── mvnw +├── mvnw.cmd +└── pom.xml +``` + diff --git a/010_spring_boot/spring_boot_2.md b/010_spring_boot/spring_boot_2.md new file mode 100644 index 0000000..e69de29 diff --git a/010_spring_boot/spring_boot_3.md b/010_spring_boot/spring_boot_3.md new file mode 100644 index 0000000..e69de29