commit
						99366a8f97
					
				 17 changed files with 624 additions and 0 deletions
			
			
		@ -0,0 +1,37 @@ | 
				
			|||
HELP.md | 
				
			|||
.gradle | 
				
			|||
build/ | 
				
			|||
!gradle/wrapper/gradle-wrapper.jar | 
				
			|||
!**/src/main/**/build/ | 
				
			|||
!**/src/test/**/build/ | 
				
			|||
 | 
				
			|||
### STS ### | 
				
			|||
.apt_generated | 
				
			|||
.classpath | 
				
			|||
.factorypath | 
				
			|||
.project | 
				
			|||
.settings | 
				
			|||
.springBeans | 
				
			|||
.sts4-cache | 
				
			|||
bin/ | 
				
			|||
!**/src/main/**/bin/ | 
				
			|||
!**/src/test/**/bin/ | 
				
			|||
 | 
				
			|||
### IntelliJ IDEA ### | 
				
			|||
.idea | 
				
			|||
*.iws | 
				
			|||
*.iml | 
				
			|||
*.ipr | 
				
			|||
out/ | 
				
			|||
!**/src/main/**/out/ | 
				
			|||
!**/src/test/**/out/ | 
				
			|||
 | 
				
			|||
### NetBeans ### | 
				
			|||
/nbproject/private/ | 
				
			|||
/nbbuild/ | 
				
			|||
/dist/ | 
				
			|||
/nbdist/ | 
				
			|||
/.nb-gradle/ | 
				
			|||
 | 
				
			|||
### VS Code ### | 
				
			|||
.vscode/ | 
				
			|||
@ -0,0 +1,49 @@ | 
				
			|||
plugins { | 
				
			|||
    id 'org.springframework.boot' version '2.6.0' | 
				
			|||
    id 'io.spring.dependency-management' version '1.0.11.RELEASE' | 
				
			|||
    id 'org.asciidoctor.convert' version '1.5.8' | 
				
			|||
    id 'java' | 
				
			|||
} | 
				
			|||
 | 
				
			|||
group = 'com.example' | 
				
			|||
version = '0.0.1-SNAPSHOT' | 
				
			|||
sourceCompatibility = '11' | 
				
			|||
 | 
				
			|||
configurations { | 
				
			|||
    compileOnly { | 
				
			|||
        extendsFrom annotationProcessor | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
repositories { | 
				
			|||
    mavenCentral() | 
				
			|||
} | 
				
			|||
 | 
				
			|||
ext { | 
				
			|||
    set('snippetsDir', file("build/generated-snippets")) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
dependencies { | 
				
			|||
    implementation 'org.springframework.boot:spring-boot-starter-actuator' | 
				
			|||
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa' | 
				
			|||
    implementation 'org.springframework.boot:spring-boot-starter-web' | 
				
			|||
    compileOnly 'org.projectlombok:lombok' | 
				
			|||
    developmentOnly 'org.springframework.boot:spring-boot-devtools' | 
				
			|||
    runtimeOnly 'com.h2database:h2' | 
				
			|||
    annotationProcessor 'org.projectlombok:lombok' | 
				
			|||
    testImplementation 'org.springframework.boot:spring-boot-starter-test' | 
				
			|||
    testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' | 
				
			|||
    // https://mvnrepository.com/artifact/com.google.code.gson/gson | 
				
			|||
    implementation 'com.google.code.gson:gson:2.8.9' | 
				
			|||
 | 
				
			|||
} | 
				
			|||
 | 
				
			|||
test { | 
				
			|||
    outputs.dir snippetsDir | 
				
			|||
    useJUnitPlatform() | 
				
			|||
} | 
				
			|||
 | 
				
			|||
asciidoctor { | 
				
			|||
    inputs.dir snippetsDir | 
				
			|||
    dependsOn test | 
				
			|||
} | 
				
			|||
								
									Binary file not shown.
								
							
						
					@ -0,0 +1,5 @@ | 
				
			|||
distributionBase=GRADLE_USER_HOME | 
				
			|||
distributionPath=wrapper/dists | 
				
			|||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip | 
				
			|||
zipStoreBase=GRADLE_USER_HOME | 
				
			|||
zipStorePath=wrapper/dists | 
				
			|||
@ -0,0 +1,234 @@ | 
				
			|||
#!/bin/sh | 
				
			|||
 | 
				
			|||
# | 
				
			|||
# Copyright © 2015-2021 the original authors. | 
				
			|||
# | 
				
			|||
# Licensed under the Apache License, Version 2.0 (the "License"); | 
				
			|||
# you may not use this file except in compliance with the License. | 
				
			|||
# You may obtain a copy of the License at | 
				
			|||
# | 
				
			|||
#      https://www.apache.org/licenses/LICENSE-2.0 | 
				
			|||
# | 
				
			|||
# Unless required by applicable law or agreed to in writing, software | 
				
			|||
# distributed under the License is distributed on an "AS IS" BASIS, | 
				
			|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
				
			|||
# See the License for the specific language governing permissions and | 
				
			|||
# limitations under the License. | 
				
			|||
# | 
				
			|||
 | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#   Gradle start up script for POSIX generated by Gradle. | 
				
			|||
# | 
				
			|||
#   Important for running: | 
				
			|||
# | 
				
			|||
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is | 
				
			|||
#       noncompliant, but you have some other compliant shell such as ksh or | 
				
			|||
#       bash, then to run this script, type that shell name before the whole | 
				
			|||
#       command line, like: | 
				
			|||
# | 
				
			|||
#           ksh Gradle | 
				
			|||
# | 
				
			|||
#       Busybox and similar reduced shells will NOT work, because this script | 
				
			|||
#       requires all of these POSIX shell features: | 
				
			|||
#         * functions; | 
				
			|||
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}», | 
				
			|||
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»; | 
				
			|||
#         * compound commands having a testable exit status, especially «case»; | 
				
			|||
#         * various built-in commands including «command», «set», and «ulimit». | 
				
			|||
# | 
				
			|||
#   Important for patching: | 
				
			|||
# | 
				
			|||
#   (2) This script targets any POSIX shell, so it avoids extensions provided | 
				
			|||
#       by Bash, Ksh, etc; in particular arrays are avoided. | 
				
			|||
# | 
				
			|||
#       The "traditional" practice of packing multiple parameters into a | 
				
			|||
#       space-separated string is a well documented source of bugs and security | 
				
			|||
#       problems, so this is (mostly) avoided, by progressively accumulating | 
				
			|||
#       options in "$@", and eventually passing that to Java. | 
				
			|||
# | 
				
			|||
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, | 
				
			|||
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; | 
				
			|||
#       see the in-line comments for details. | 
				
			|||
# | 
				
			|||
#       There are tweaks for specific operating systems such as AIX, CygWin, | 
				
			|||
#       Darwin, MinGW, and NonStop. | 
				
			|||
# | 
				
			|||
#   (3) This script is generated from the Groovy template | 
				
			|||
#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | 
				
			|||
#       within the Gradle project. | 
				
			|||
# | 
				
			|||
#       You can find Gradle at https://github.com/gradle/gradle/. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
 | 
				
			|||
# Attempt to set APP_HOME | 
				
			|||
 | 
				
			|||
# Resolve links: $0 may be a link | 
				
			|||
app_path=$0 | 
				
			|||
 | 
				
			|||
# Need this for daisy-chained symlinks. | 
				
			|||
while | 
				
			|||
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path | 
				
			|||
    [ -h "$app_path" ] | 
				
			|||
do | 
				
			|||
    ls=$( ls -ld "$app_path" ) | 
				
			|||
    link=${ls#*' -> '} | 
				
			|||
    case $link in             #( | 
				
			|||
      /*)   app_path=$link ;; #( | 
				
			|||
      *)    app_path=$APP_HOME$link ;; | 
				
			|||
    esac | 
				
			|||
done | 
				
			|||
 | 
				
			|||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit | 
				
			|||
 | 
				
			|||
APP_NAME="Gradle" | 
				
			|||
APP_BASE_NAME=${0##*/} | 
				
			|||
 | 
				
			|||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | 
				
			|||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | 
				
			|||
 | 
				
			|||
# Use the maximum available, or set MAX_FD != -1 to use that value. | 
				
			|||
MAX_FD=maximum | 
				
			|||
 | 
				
			|||
warn () { | 
				
			|||
    echo "$*" | 
				
			|||
} >&2 | 
				
			|||
 | 
				
			|||
die () { | 
				
			|||
    echo | 
				
			|||
    echo "$*" | 
				
			|||
    echo | 
				
			|||
    exit 1 | 
				
			|||
} >&2 | 
				
			|||
 | 
				
			|||
# OS specific support (must be 'true' or 'false'). | 
				
			|||
cygwin=false | 
				
			|||
msys=false | 
				
			|||
darwin=false | 
				
			|||
nonstop=false | 
				
			|||
case "$( uname )" in                #( | 
				
			|||
  CYGWIN* )         cygwin=true  ;; #( | 
				
			|||
  Darwin* )         darwin=true  ;; #( | 
				
			|||
  MSYS* | MINGW* )  msys=true    ;; #( | 
				
			|||
  NONSTOP* )        nonstop=true ;; | 
				
			|||
esac | 
				
			|||
 | 
				
			|||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | 
				
			|||
 | 
				
			|||
 | 
				
			|||
# Determine the Java command to use to start the JVM. | 
				
			|||
if [ -n "$JAVA_HOME" ] ; then | 
				
			|||
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | 
				
			|||
        # IBM's JDK on AIX uses strange locations for the executables | 
				
			|||
        JAVACMD=$JAVA_HOME/jre/sh/java | 
				
			|||
    else | 
				
			|||
        JAVACMD=$JAVA_HOME/bin/java | 
				
			|||
    fi | 
				
			|||
    if [ ! -x "$JAVACMD" ] ; then | 
				
			|||
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | 
				
			|||
 | 
				
			|||
Please set the JAVA_HOME variable in your environment to match the | 
				
			|||
location of your Java installation." | 
				
			|||
    fi | 
				
			|||
else | 
				
			|||
    JAVACMD=java | 
				
			|||
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | 
				
			|||
 | 
				
			|||
Please set the JAVA_HOME variable in your environment to match the | 
				
			|||
location of your Java installation." | 
				
			|||
fi | 
				
			|||
 | 
				
			|||
# Increase the maximum file descriptors if we can. | 
				
			|||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then | 
				
			|||
    case $MAX_FD in #( | 
				
			|||
      max*) | 
				
			|||
        MAX_FD=$( ulimit -H -n ) || | 
				
			|||
            warn "Could not query maximum file descriptor limit" | 
				
			|||
    esac | 
				
			|||
    case $MAX_FD in  #( | 
				
			|||
      '' | soft) :;; #( | 
				
			|||
      *) | 
				
			|||
        ulimit -n "$MAX_FD" || | 
				
			|||
            warn "Could not set maximum file descriptor limit to $MAX_FD" | 
				
			|||
    esac | 
				
			|||
fi | 
				
			|||
 | 
				
			|||
# Collect all arguments for the java command, stacking in reverse order: | 
				
			|||
#   * args from the command line | 
				
			|||
#   * the main class name | 
				
			|||
#   * -classpath | 
				
			|||
#   * -D...appname settings | 
				
			|||
#   * --module-path (only if needed) | 
				
			|||
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. | 
				
			|||
 | 
				
			|||
# For Cygwin or MSYS, switch paths to Windows format before running java | 
				
			|||
if "$cygwin" || "$msys" ; then | 
				
			|||
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) | 
				
			|||
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) | 
				
			|||
 | 
				
			|||
    JAVACMD=$( cygpath --unix "$JAVACMD" ) | 
				
			|||
 | 
				
			|||
    # Now convert the arguments - kludge to limit ourselves to /bin/sh | 
				
			|||
    for arg do | 
				
			|||
        if | 
				
			|||
            case $arg in                                #( | 
				
			|||
              -*)   false ;;                            # don't mess with options #( | 
				
			|||
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath | 
				
			|||
                    [ -e "$t" ] ;;                      #( | 
				
			|||
              *)    false ;; | 
				
			|||
            esac | 
				
			|||
        then | 
				
			|||
            arg=$( cygpath --path --ignore --mixed "$arg" ) | 
				
			|||
        fi | 
				
			|||
        # Roll the args list around exactly as many times as the number of | 
				
			|||
        # args, so each arg winds up back in the position where it started, but | 
				
			|||
        # possibly modified. | 
				
			|||
        # | 
				
			|||
        # NB: a `for` loop captures its iteration list before it begins, so | 
				
			|||
        # changing the positional parameters here affects neither the number of | 
				
			|||
        # iterations, nor the values presented in `arg`. | 
				
			|||
        shift                   # remove old arg | 
				
			|||
        set -- "$@" "$arg"      # push replacement arg | 
				
			|||
    done | 
				
			|||
fi | 
				
			|||
 | 
				
			|||
# Collect all arguments for the java command; | 
				
			|||
#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of | 
				
			|||
#     shell script including quotes and variable substitutions, so put them in | 
				
			|||
#     double quotes to make sure that they get re-expanded; and | 
				
			|||
#   * put everything else in single quotes, so that it's not re-expanded. | 
				
			|||
 | 
				
			|||
set -- \ | 
				
			|||
        "-Dorg.gradle.appname=$APP_BASE_NAME" \ | 
				
			|||
        -classpath "$CLASSPATH" \ | 
				
			|||
        org.gradle.wrapper.GradleWrapperMain \ | 
				
			|||
        "$@" | 
				
			|||
 | 
				
			|||
# Use "xargs" to parse quoted args. | 
				
			|||
# | 
				
			|||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed. | 
				
			|||
# | 
				
			|||
# In Bash we could simply go: | 
				
			|||
# | 
				
			|||
#   readarray ARGS < <( xargs -n1 <<<"$var" ) && | 
				
			|||
#   set -- "${ARGS[@]}" "$@" | 
				
			|||
# | 
				
			|||
# but POSIX shell has neither arrays nor command substitution, so instead we | 
				
			|||
# post-process each arg (as a line of input to sed) to backslash-escape any | 
				
			|||
# character that might be a shell metacharacter, then use eval to reverse | 
				
			|||
# that process (while maintaining the separation between arguments), and wrap | 
				
			|||
# the whole thing up as a single "set" statement. | 
				
			|||
# | 
				
			|||
# This will of course break if any of these variables contains a newline or | 
				
			|||
# an unmatched quote. | 
				
			|||
# | 
				
			|||
 | 
				
			|||
eval "set -- $( | 
				
			|||
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | | 
				
			|||
        xargs -n1 | | 
				
			|||
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | | 
				
			|||
        tr '\n' ' ' | 
				
			|||
    )" '"$@"' | 
				
			|||
 | 
				
			|||
exec "$JAVACMD" "$@" | 
				
			|||
@ -0,0 +1,89 @@ | 
				
			|||
@rem | 
				
			|||
@rem Copyright 2015 the original author or authors. | 
				
			|||
@rem | 
				
			|||
@rem Licensed under the Apache License, Version 2.0 (the "License"); | 
				
			|||
@rem you may not use this file except in compliance with the License. | 
				
			|||
@rem You may obtain a copy of the License at | 
				
			|||
@rem | 
				
			|||
@rem      https://www.apache.org/licenses/LICENSE-2.0 | 
				
			|||
@rem | 
				
			|||
@rem Unless required by applicable law or agreed to in writing, software | 
				
			|||
@rem distributed under the License is distributed on an "AS IS" BASIS, | 
				
			|||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
				
			|||
@rem See the License for the specific language governing permissions and | 
				
			|||
@rem limitations under the License. | 
				
			|||
@rem | 
				
			|||
 | 
				
			|||
@if "%DEBUG%" == "" @echo off | 
				
			|||
@rem ########################################################################## | 
				
			|||
@rem | 
				
			|||
@rem  Gradle startup script for Windows | 
				
			|||
@rem | 
				
			|||
@rem ########################################################################## | 
				
			|||
 | 
				
			|||
@rem Set local scope for the variables with windows NT shell | 
				
			|||
if "%OS%"=="Windows_NT" setlocal | 
				
			|||
 | 
				
			|||
set DIRNAME=%~dp0 | 
				
			|||
if "%DIRNAME%" == "" set DIRNAME=. | 
				
			|||
set APP_BASE_NAME=%~n0 | 
				
			|||
set APP_HOME=%DIRNAME% | 
				
			|||
 | 
				
			|||
@rem Resolve any "." and ".." in APP_HOME to make it shorter. | 
				
			|||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi | 
				
			|||
 | 
				
			|||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | 
				
			|||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" | 
				
			|||
 | 
				
			|||
@rem Find java.exe | 
				
			|||
if defined JAVA_HOME goto findJavaFromJavaHome | 
				
			|||
 | 
				
			|||
set JAVA_EXE=java.exe | 
				
			|||
%JAVA_EXE% -version >NUL 2>&1 | 
				
			|||
if "%ERRORLEVEL%" == "0" goto execute | 
				
			|||
 | 
				
			|||
echo. | 
				
			|||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | 
				
			|||
echo. | 
				
			|||
echo Please set the JAVA_HOME variable in your environment to match the | 
				
			|||
echo location of your Java installation. | 
				
			|||
 | 
				
			|||
goto fail | 
				
			|||
 | 
				
			|||
:findJavaFromJavaHome | 
				
			|||
set JAVA_HOME=%JAVA_HOME:"=% | 
				
			|||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe | 
				
			|||
 | 
				
			|||
if exist "%JAVA_EXE%" goto execute | 
				
			|||
 | 
				
			|||
echo. | 
				
			|||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | 
				
			|||
echo. | 
				
			|||
echo Please set the JAVA_HOME variable in your environment to match the | 
				
			|||
echo location of your Java installation. | 
				
			|||
 | 
				
			|||
goto fail | 
				
			|||
 | 
				
			|||
:execute | 
				
			|||
@rem Setup the command line | 
				
			|||
 | 
				
			|||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@rem Execute Gradle | 
				
			|||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* | 
				
			|||
 | 
				
			|||
:end | 
				
			|||
@rem End local scope for the variables with windows NT shell | 
				
			|||
if "%ERRORLEVEL%"=="0" goto mainEnd | 
				
			|||
 | 
				
			|||
:fail | 
				
			|||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | 
				
			|||
rem the _cmd.exe /c_ return code! | 
				
			|||
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | 
				
			|||
exit /b 1 | 
				
			|||
 | 
				
			|||
:mainEnd | 
				
			|||
if "%OS%"=="Windows_NT" endlocal | 
				
			|||
 | 
				
			|||
:omega | 
				
			|||
@ -0,0 +1 @@ | 
				
			|||
rootProject.name = 'api-spring-gradle-b2boost' | 
				
			|||
@ -0,0 +1,13 @@ | 
				
			|||
package com.example.apispringgradleb2boost; | 
				
			|||
 | 
				
			|||
import org.springframework.boot.SpringApplication; | 
				
			|||
import org.springframework.boot.autoconfigure.SpringBootApplication; | 
				
			|||
 | 
				
			|||
@SpringBootApplication | 
				
			|||
public class ApiSpringGradleB2boostApplication { | 
				
			|||
 | 
				
			|||
    public static void main(String[] args) { | 
				
			|||
        SpringApplication.run(ApiSpringGradleB2boostApplication.class, args); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
} | 
				
			|||
@ -0,0 +1,56 @@ | 
				
			|||
package com.example.apispringgradleb2boost.controller; | 
				
			|||
 | 
				
			|||
import com.example.apispringgradleb2boost.model.Partner; | 
				
			|||
import com.example.apispringgradleb2boost.service.PartnerService; | 
				
			|||
import com.google.gson.Gson; | 
				
			|||
import lombok.SneakyThrows; | 
				
			|||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			|||
import org.springframework.http.HttpStatus; | 
				
			|||
import org.springframework.web.bind.annotation.GetMapping; | 
				
			|||
import org.springframework.web.bind.annotation.PathVariable; | 
				
			|||
import org.springframework.web.bind.annotation.RestController; | 
				
			|||
import org.springframework.web.server.ResponseStatusException; | 
				
			|||
 | 
				
			|||
import javax.servlet.http.HttpServletResponse; | 
				
			|||
import java.io.IOException; | 
				
			|||
import java.io.PrintWriter; | 
				
			|||
import java.util.HashMap; | 
				
			|||
import java.util.Optional; | 
				
			|||
 | 
				
			|||
@RestController | 
				
			|||
public class PartnerController { | 
				
			|||
 | 
				
			|||
    @Autowired | 
				
			|||
    PartnerService partnerService; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
    @GetMapping("/partners") | 
				
			|||
    public Iterable<Partner> getPartners() { | 
				
			|||
        return partnerService.getPartners(); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @GetMapping("/partner/{id}") | 
				
			|||
    public Partner getPartnerById(@PathVariable("id") final Long Id, HttpServletResponse response) throws IOException { | 
				
			|||
 | 
				
			|||
        Optional<Partner> partner = partnerService.getPartnerById(Id); | 
				
			|||
        if (partner.isPresent()) { | 
				
			|||
            return partner.get(); | 
				
			|||
        } else { | 
				
			|||
            // Error handling when !partner.isPresent()
 | 
				
			|||
            response.setStatus(HttpStatus.NOT_FOUND.value()); | 
				
			|||
            response.setContentType("application/json"); | 
				
			|||
            response.setCharacterEncoding("UTF-8"); | 
				
			|||
 | 
				
			|||
            HashMap<String, String> responseBody = new HashMap<>(); | 
				
			|||
            responseBody.put("code", String.valueOf(HttpStatus.NOT_FOUND.value())); | 
				
			|||
            responseBody.put("message", String.format("Partner with id %d not found!", Id)); | 
				
			|||
 | 
				
			|||
            PrintWriter out = response.getWriter(); | 
				
			|||
            out.print(new Gson().toJson(responseBody)); | 
				
			|||
            out.flush(); | 
				
			|||
 | 
				
			|||
            return null; | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
} | 
				
			|||
@ -0,0 +1,34 @@ | 
				
			|||
package com.example.apispringgradleb2boost.exceptions.resolvers; | 
				
			|||
 | 
				
			|||
import org.springframework.web.bind.annotation.ExceptionHandler; | 
				
			|||
import org.springframework.web.bind.annotation.RestControllerAdvice; | 
				
			|||
import org.springframework.web.bind.MissingPathVariableException; | 
				
			|||
import org.springframework.web.servlet.NoHandlerFoundException; | 
				
			|||
 | 
				
			|||
import javax.servlet.http.HttpServletRequest; | 
				
			|||
import java.util.HashMap; | 
				
			|||
 | 
				
			|||
@RestControllerAdvice | 
				
			|||
public class ExceptionResolver { | 
				
			|||
 | 
				
			|||
    @ExceptionHandler(Exception.class) | 
				
			|||
    public HashMap<String, String> handleException(HttpServletRequest request, Exception e) { | 
				
			|||
        HashMap<String, String> response = new HashMap<>(); | 
				
			|||
        response.put("message", e.getMessage()); | 
				
			|||
        return response; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @ExceptionHandler(MissingPathVariableException.class) | 
				
			|||
    public HashMap<String, String> handleMissingPathVariableException(HttpServletRequest request, MissingPathVariableException e) { | 
				
			|||
        HashMap<String, String> response = new HashMap<>(); | 
				
			|||
        response.put("message", "Required path variable is missing in this request. Please add it to your request."); | 
				
			|||
        return response; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @ExceptionHandler(NoHandlerFoundException.class) | 
				
			|||
    public HashMap<String, String> handleNotFoundResourceException(HttpServletRequest request, NoHandlerFoundException e) { | 
				
			|||
        HashMap<String, String> response = new HashMap<>(); | 
				
			|||
        response.put("message", "Requested resource wasn't found on the server"); | 
				
			|||
        return response; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,27 @@ | 
				
			|||
package com.example.apispringgradleb2boost.model; | 
				
			|||
 | 
				
			|||
import lombok.Data; | 
				
			|||
 | 
				
			|||
import javax.persistence.Column; | 
				
			|||
import javax.persistence.Entity; | 
				
			|||
import javax.persistence.Id; | 
				
			|||
import javax.persistence.Table; | 
				
			|||
 | 
				
			|||
@Data | 
				
			|||
@Entity | 
				
			|||
@Table(name = "partners") | 
				
			|||
public class Partner { | 
				
			|||
    @Id | 
				
			|||
    private Long id; | 
				
			|||
 | 
				
			|||
    @Column(name = "company_name") | 
				
			|||
    private String name; | 
				
			|||
 | 
				
			|||
    @Column(name = "ref") | 
				
			|||
    private String reference; | 
				
			|||
 | 
				
			|||
    private String locale; | 
				
			|||
 | 
				
			|||
    @Column(name = "expires") | 
				
			|||
    private String expirationTime; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,7 @@ | 
				
			|||
package com.example.apispringgradleb2boost.repository; | 
				
			|||
 | 
				
			|||
import com.example.apispringgradleb2boost.model.Partner; | 
				
			|||
import org.springframework.data.repository.PagingAndSortingRepository; | 
				
			|||
 | 
				
			|||
public interface PartnerRepository extends PagingAndSortingRepository<Partner, Long> { | 
				
			|||
} | 
				
			|||
@ -0,0 +1,26 @@ | 
				
			|||
package com.example.apispringgradleb2boost.service; | 
				
			|||
 | 
				
			|||
import com.example.apispringgradleb2boost.model.Partner; | 
				
			|||
import com.example.apispringgradleb2boost.repository.PartnerRepository; | 
				
			|||
import lombok.Data; | 
				
			|||
import org.springframework.beans.factory.annotation.Autowired; | 
				
			|||
import org.springframework.stereotype.Service; | 
				
			|||
 | 
				
			|||
import java.util.Optional; | 
				
			|||
 | 
				
			|||
@Data | 
				
			|||
@Service | 
				
			|||
public class PartnerService { | 
				
			|||
    // TODO : service layer will be transactional and encapsulate all validation and database interactions
 | 
				
			|||
 | 
				
			|||
    @Autowired | 
				
			|||
    private PartnerRepository partnerRepository; | 
				
			|||
 | 
				
			|||
    public Iterable<Partner> getPartners(){ | 
				
			|||
        return partnerRepository.findAll(); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Optional<Partner> getPartnerById(Long Id){ | 
				
			|||
        return partnerRepository.findById(Id); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,21 @@ | 
				
			|||
# General properties | 
				
			|||
spring.application.name=api | 
				
			|||
server.port=8090 | 
				
			|||
 | 
				
			|||
# Error handling | 
				
			|||
server.error.whitelabel.enabled=false | 
				
			|||
spring.mvc.throw-exception-if-no-handler-found=true | 
				
			|||
spring.web.resources.add-mappings=false | 
				
			|||
 | 
				
			|||
# Logging level for different packages | 
				
			|||
logging.level.root=error | 
				
			|||
logging.level.com.example.apispringgradleb2boost=info | 
				
			|||
logging.level.org.springframework.boot.autoconfigure.h2=info | 
				
			|||
logging.level.org.springframework.boot.web.embedded.tomcat=info | 
				
			|||
 | 
				
			|||
# Enabling H2 Console | 
				
			|||
spring.h2.console.enabled=true | 
				
			|||
# Custom H2 Console URL (optional) | 
				
			|||
spring.h2.console.path=/h2 | 
				
			|||
# Avoid hibernate initialization | 
				
			|||
spring.jpa.hibernate.ddl-auto=none | 
				
			|||
@ -0,0 +1,4 @@ | 
				
			|||
INSERT INTO partners (company_name, ref, locale, expires) | 
				
			|||
VALUES ('B2boost', 'FYI1', 'en_BE', TIMESTAMP '2022-05-23 12:18:46'), | 
				
			|||
       ('Spotify', 'FYI2', 'en_GB', TIMESTAMP '2022-05-23 12:18:46'), | 
				
			|||
       ('AMSOM-Habitat', 'FYI3', 'fr_FR', TIMESTAMP '2022-05-23 12:18:46'); | 
				
			|||
@ -0,0 +1,8 @@ | 
				
			|||
CREATE TABLE partners | 
				
			|||
( | 
				
			|||
    id           INT AUTO_INCREMENT PRIMARY KEY, | 
				
			|||
    company_name VARCHAR(250) NOT NULL, | 
				
			|||
    ref          VARCHAR(250) NOT NULL, | 
				
			|||
    locale       VARCHAR(250) NOT NULL, | 
				
			|||
    expires      DATETIME     NOT NULL | 
				
			|||
); | 
				
			|||
@ -0,0 +1,13 @@ | 
				
			|||
package com.example.apispringgradleb2boost; | 
				
			|||
 | 
				
			|||
import org.junit.jupiter.api.Test; | 
				
			|||
import org.springframework.boot.test.context.SpringBootTest; | 
				
			|||
 | 
				
			|||
@SpringBootTest | 
				
			|||
class ApiSpringGradleB2boostApplicationTests { | 
				
			|||
 | 
				
			|||
    @Test | 
				
			|||
    void contextLoads() { | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
} | 
				
			|||
					Loading…
					
					
				
		Reference in new issue