├── spring-rest-crud
├── .gitignore
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
├── .vscode
│ └── settings.json
├── Dockerfile
├── Dockerfile-build
├── Dockerfile.1
├── docker-compose.build.yml
├── docker-compose.yml
├── manifest.json
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
│ ├── assembly
│ └── distribution.xml
│ └── main
│ ├── java
│ └── com
│ │ └── loiane
│ │ └── springrestcrud
│ │ ├── SpringRestCrudApplication.java
│ │ ├── controller
│ │ └── ContactController.java
│ │ ├── model
│ │ └── Contact.java
│ │ └── repository
│ │ └── ContactRepository.java
│ └── resources
│ └── application.properties
└── tutorial
├── actions.ts
├── authService.ts
├── enums.ts
├── getter.ts
├── js
├── actions.js
├── authService.js
├── enums.js
├── getter.js
├── main.js
└── typescript.js
├── main.ts
├── tsconfig.json
└── typescript.ts
/spring-rest-crud/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 | .sts4-cache
12 |
13 | ### IntelliJ IDEA ###
14 | .idea
15 | *.iws
16 | *.iml
17 | *.ipr
18 |
19 | ### NetBeans ###
20 | /nbproject/private/
21 | /build/
22 | /nbbuild/
23 | /dist/
24 | /nbdist/
25 | /.nb-gradle/
--------------------------------------------------------------------------------
/spring-rest-crud/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/loiane/codeone-2018-angular-java-tutorial/fd004007ecd9f565c87cb2f9e4a8c92053499227/spring-rest-crud/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/spring-rest-crud/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip
2 |
--------------------------------------------------------------------------------
/spring-rest-crud/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "docker.defaultRegistryPath": "loiane",
3 | "java.configuration.updateBuildConfiguration": "disabled",
4 | }
5 |
--------------------------------------------------------------------------------
/spring-rest-crud/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM openjdk:10-jre-slim
2 | COPY ./target/spring-rest-crud-0.0.1-SNAPSHOT.jar /usr/src/app/
3 | WORKDIR /usr/src/app
4 | EXPOSE 8080
5 | CMD ["java", "-jar", "spring-rest-crud-0.0.1-SNAPSHOT.jar"]
6 |
7 | # docker build -t spring-rest-crud -f Dockerfile .
8 | # docker run -p 8080:8080 spring-rest-crud
9 | # docker-compose up
10 |
11 | # lsof -n -i4TCP:8080
12 | # kill -9 P
13 |
--------------------------------------------------------------------------------
/spring-rest-crud/Dockerfile-build:
--------------------------------------------------------------------------------
1 | FROM maven:3.5.4-jdk-10-slim
2 | WORKDIR /usr/src/java-code
3 | COPY . /usr/src/java-code/
4 | RUN mvn package
5 |
6 | WORKDIR /usr/src/java-app
7 | RUN cp /usr/src/java-code/target/*.jar ./app.jar
8 | EXPOSE 8080
9 | CMD ["java", "-jar", "app.jar"]
10 |
11 | ## docker-compose -f docker-compose.build.yml build
12 | ## docker-compose -f docker-compose.build.yml up
--------------------------------------------------------------------------------
/spring-rest-crud/Dockerfile.1:
--------------------------------------------------------------------------------
1 | FROM openjdk:10-jre-slim
2 | COPY ./target/spring-rest-crud-0.0.1-SNAPSHOT.jar /usr/src/app/
3 | WORKDIR /usr/src/app
4 | EXPOSE 8080
5 | CMD ["java", "-jar", "spring-rest-crud-0.0.1-SNAPSHOT.jar"]
6 |
7 | # docker build -t spring-rest-crud -f Dockerfile .
8 | # docker run -p 8080:8080 spring-rest-crud
9 | # docker-compose up
10 |
11 | # lsof -n -i4TCP:8080
12 | # kill -9 P
13 |
--------------------------------------------------------------------------------
/spring-rest-crud/docker-compose.build.yml:
--------------------------------------------------------------------------------
1 | version: '2.1'
2 |
3 | services:
4 | spring-rest-crud:
5 | image: spring-rest-crud
6 | build:
7 | context: ./
8 | dockerfile: Dockerfile-build
9 | networks:
10 | - network1
11 | environment:
12 | PORT: 8080
13 | ports:
14 | - 8080:8080
15 |
16 | networks:
17 | network1:
--------------------------------------------------------------------------------
/spring-rest-crud/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '2.1'
2 |
3 | services:
4 | spring-rest-crud:
5 | image: spring-rest-crud
6 | build: .
7 | networks:
8 | - network1
9 | environment:
10 | PORT: 8080
11 | ports:
12 | - 8080:8080
13 |
14 | networks:
15 | network1:
--------------------------------------------------------------------------------
/spring-rest-crud/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtime":{
3 | "majorVersion": "8"
4 | },
5 | "command": "java -jar spring-rest-crud-0.0.1-SNAPSHOT.jar",
6 | "release": {
7 | "build": "20170113Build",
8 | "commit": "commitString",
9 | "version": "20170113Version"
10 | },
11 | "notes": "REST app for testing"
12 | }
--------------------------------------------------------------------------------
/spring-rest-crud/mvnw:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # ----------------------------------------------------------------------------
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # http://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | # ----------------------------------------------------------------------------
20 |
21 | # ----------------------------------------------------------------------------
22 | # Maven2 Start Up Batch script
23 | #
24 | # Required ENV vars:
25 | # ------------------
26 | # JAVA_HOME - location of a JDK home dir
27 | #
28 | # Optional ENV vars
29 | # -----------------
30 | # M2_HOME - location of maven2's installed home dir
31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven
32 | # e.g. to debug Maven itself, use
33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35 | # ----------------------------------------------------------------------------
36 |
37 | if [ -z "$MAVEN_SKIP_RC" ] ; then
38 |
39 | if [ -f /etc/mavenrc ] ; then
40 | . /etc/mavenrc
41 | fi
42 |
43 | if [ -f "$HOME/.mavenrc" ] ; then
44 | . "$HOME/.mavenrc"
45 | fi
46 |
47 | fi
48 |
49 | # OS specific support. $var _must_ be set to either true or false.
50 | cygwin=false;
51 | darwin=false;
52 | mingw=false
53 | case "`uname`" in
54 | CYGWIN*) cygwin=true ;;
55 | MINGW*) mingw=true;;
56 | Darwin*) darwin=true
57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
59 | if [ -z "$JAVA_HOME" ]; then
60 | if [ -x "/usr/libexec/java_home" ]; then
61 | export JAVA_HOME="`/usr/libexec/java_home`"
62 | else
63 | export JAVA_HOME="/Library/Java/Home"
64 | fi
65 | fi
66 | ;;
67 | esac
68 |
69 | if [ -z "$JAVA_HOME" ] ; then
70 | if [ -r /etc/gentoo-release ] ; then
71 | JAVA_HOME=`java-config --jre-home`
72 | fi
73 | fi
74 |
75 | if [ -z "$M2_HOME" ] ; then
76 | ## resolve links - $0 may be a link to maven's home
77 | PRG="$0"
78 |
79 | # need this for relative symlinks
80 | while [ -h "$PRG" ] ; do
81 | ls=`ls -ld "$PRG"`
82 | link=`expr "$ls" : '.*-> \(.*\)$'`
83 | if expr "$link" : '/.*' > /dev/null; then
84 | PRG="$link"
85 | else
86 | PRG="`dirname "$PRG"`/$link"
87 | fi
88 | done
89 |
90 | saveddir=`pwd`
91 |
92 | M2_HOME=`dirname "$PRG"`/..
93 |
94 | # make it fully qualified
95 | M2_HOME=`cd "$M2_HOME" && pwd`
96 |
97 | cd "$saveddir"
98 | # echo Using m2 at $M2_HOME
99 | fi
100 |
101 | # For Cygwin, ensure paths are in UNIX format before anything is touched
102 | if $cygwin ; then
103 | [ -n "$M2_HOME" ] &&
104 | M2_HOME=`cygpath --unix "$M2_HOME"`
105 | [ -n "$JAVA_HOME" ] &&
106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
107 | [ -n "$CLASSPATH" ] &&
108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
109 | fi
110 |
111 | # For Migwn, ensure paths are in UNIX format before anything is touched
112 | if $mingw ; then
113 | [ -n "$M2_HOME" ] &&
114 | M2_HOME="`(cd "$M2_HOME"; pwd)`"
115 | [ -n "$JAVA_HOME" ] &&
116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
117 | # TODO classpath?
118 | fi
119 |
120 | if [ -z "$JAVA_HOME" ]; then
121 | javaExecutable="`which javac`"
122 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
123 | # readlink(1) is not available as standard on Solaris 10.
124 | readLink=`which readlink`
125 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
126 | if $darwin ; then
127 | javaHome="`dirname \"$javaExecutable\"`"
128 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
129 | else
130 | javaExecutable="`readlink -f \"$javaExecutable\"`"
131 | fi
132 | javaHome="`dirname \"$javaExecutable\"`"
133 | javaHome=`expr "$javaHome" : '\(.*\)/bin'`
134 | JAVA_HOME="$javaHome"
135 | export JAVA_HOME
136 | fi
137 | fi
138 | fi
139 |
140 | if [ -z "$JAVACMD" ] ; then
141 | if [ -n "$JAVA_HOME" ] ; then
142 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
143 | # IBM's JDK on AIX uses strange locations for the executables
144 | JAVACMD="$JAVA_HOME/jre/sh/java"
145 | else
146 | JAVACMD="$JAVA_HOME/bin/java"
147 | fi
148 | else
149 | JAVACMD="`which java`"
150 | fi
151 | fi
152 |
153 | if [ ! -x "$JAVACMD" ] ; then
154 | echo "Error: JAVA_HOME is not defined correctly." >&2
155 | echo " We cannot execute $JAVACMD" >&2
156 | exit 1
157 | fi
158 |
159 | if [ -z "$JAVA_HOME" ] ; then
160 | echo "Warning: JAVA_HOME environment variable is not set."
161 | fi
162 |
163 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
164 |
165 | # traverses directory structure from process work directory to filesystem root
166 | # first directory with .mvn subdirectory is considered project base directory
167 | find_maven_basedir() {
168 |
169 | if [ -z "$1" ]
170 | then
171 | echo "Path not specified to find_maven_basedir"
172 | return 1
173 | fi
174 |
175 | basedir="$1"
176 | wdir="$1"
177 | while [ "$wdir" != '/' ] ; do
178 | if [ -d "$wdir"/.mvn ] ; then
179 | basedir=$wdir
180 | break
181 | fi
182 | # workaround for JBEAP-8937 (on Solaris 10/Sparc)
183 | if [ -d "${wdir}" ]; then
184 | wdir=`cd "$wdir/.."; pwd`
185 | fi
186 | # end of workaround
187 | done
188 | echo "${basedir}"
189 | }
190 |
191 | # concatenates all lines of a file
192 | concat_lines() {
193 | if [ -f "$1" ]; then
194 | echo "$(tr -s '\n' ' ' < "$1")"
195 | fi
196 | }
197 |
198 | BASE_DIR=`find_maven_basedir "$(pwd)"`
199 | if [ -z "$BASE_DIR" ]; then
200 | exit 1;
201 | fi
202 |
203 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
204 | echo $MAVEN_PROJECTBASEDIR
205 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
206 |
207 | # For Cygwin, switch paths to Windows format before running java
208 | if $cygwin; then
209 | [ -n "$M2_HOME" ] &&
210 | M2_HOME=`cygpath --path --windows "$M2_HOME"`
211 | [ -n "$JAVA_HOME" ] &&
212 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
213 | [ -n "$CLASSPATH" ] &&
214 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
215 | [ -n "$MAVEN_PROJECTBASEDIR" ] &&
216 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
217 | fi
218 |
219 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
220 |
221 | exec "$JAVACMD" \
222 | $MAVEN_OPTS \
223 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
224 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
225 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
226 |
--------------------------------------------------------------------------------
/spring-rest-crud/mvnw.cmd:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM Licensed to the Apache Software Foundation (ASF) under one
3 | @REM or more contributor license agreements. See the NOTICE file
4 | @REM distributed with this work for additional information
5 | @REM regarding copyright ownership. The ASF licenses this file
6 | @REM to you under the Apache License, Version 2.0 (the
7 | @REM "License"); you may not use this file except in compliance
8 | @REM with the License. You may obtain a copy of the License at
9 | @REM
10 | @REM http://www.apache.org/licenses/LICENSE-2.0
11 | @REM
12 | @REM Unless required by applicable law or agreed to in writing,
13 | @REM software distributed under the License is distributed on an
14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | @REM KIND, either express or implied. See the License for the
16 | @REM specific language governing permissions and limitations
17 | @REM under the License.
18 | @REM ----------------------------------------------------------------------------
19 |
20 | @REM ----------------------------------------------------------------------------
21 | @REM Maven2 Start Up Batch script
22 | @REM
23 | @REM Required ENV vars:
24 | @REM JAVA_HOME - location of a JDK home dir
25 | @REM
26 | @REM Optional ENV vars
27 | @REM M2_HOME - location of maven2's installed home dir
28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31 | @REM e.g. to debug Maven itself, use
32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34 | @REM ----------------------------------------------------------------------------
35 |
36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37 | @echo off
38 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
39 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
40 |
41 | @REM set %HOME% to equivalent of $HOME
42 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
43 |
44 | @REM Execute a user defined script before this one
45 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
46 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending
47 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
48 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
49 | :skipRcPre
50 |
51 | @setlocal
52 |
53 | set ERROR_CODE=0
54 |
55 | @REM To isolate internal variables from possible post scripts, we use another setlocal
56 | @setlocal
57 |
58 | @REM ==== START VALIDATION ====
59 | if not "%JAVA_HOME%" == "" goto OkJHome
60 |
61 | echo.
62 | echo Error: JAVA_HOME not found in your environment. >&2
63 | echo Please set the JAVA_HOME variable in your environment to match the >&2
64 | echo location of your Java installation. >&2
65 | echo.
66 | goto error
67 |
68 | :OkJHome
69 | if exist "%JAVA_HOME%\bin\java.exe" goto init
70 |
71 | echo.
72 | echo Error: JAVA_HOME is set to an invalid directory. >&2
73 | echo JAVA_HOME = "%JAVA_HOME%" >&2
74 | echo Please set the JAVA_HOME variable in your environment to match the >&2
75 | echo location of your Java installation. >&2
76 | echo.
77 | goto error
78 |
79 | @REM ==== END VALIDATION ====
80 |
81 | :init
82 |
83 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
84 | @REM Fallback to current working directory if not found.
85 |
86 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
87 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
88 |
89 | set EXEC_DIR=%CD%
90 | set WDIR=%EXEC_DIR%
91 | :findBaseDir
92 | IF EXIST "%WDIR%"\.mvn goto baseDirFound
93 | cd ..
94 | IF "%WDIR%"=="%CD%" goto baseDirNotFound
95 | set WDIR=%CD%
96 | goto findBaseDir
97 |
98 | :baseDirFound
99 | set MAVEN_PROJECTBASEDIR=%WDIR%
100 | cd "%EXEC_DIR%"
101 | goto endDetectBaseDir
102 |
103 | :baseDirNotFound
104 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
105 | cd "%EXEC_DIR%"
106 |
107 | :endDetectBaseDir
108 |
109 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
110 |
111 | @setlocal EnableExtensions EnableDelayedExpansion
112 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
113 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
114 |
115 | :endReadAdditionalConfig
116 |
117 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
118 |
119 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
120 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
121 |
122 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
123 | if ERRORLEVEL 1 goto error
124 | goto end
125 |
126 | :error
127 | set ERROR_CODE=1
128 |
129 | :end
130 | @endlocal & set ERROR_CODE=%ERROR_CODE%
131 |
132 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
133 | @REM check for post script, once with legacy .bat ending and once with .cmd ending
134 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
135 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
136 | :skipRcPost
137 |
138 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
139 | if "%MAVEN_BATCH_PAUSE%" == "on" pause
140 |
141 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
142 |
143 | exit /B %ERROR_CODE%
144 |
--------------------------------------------------------------------------------
/spring-rest-crud/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.loiane
7 | spring-rest-crud
8 | 0.0.1-SNAPSHOT
9 | jar
10 |
11 | spring-rest-crud
12 | Demo project for Spring Boot
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 2.0.6.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | UTF-8
24 | 1.8
25 |
26 |
27 |
28 |
29 | org.springframework.boot
30 | spring-boot-starter-data-jpa
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-web
35 |
36 |
37 |
38 | org.springframework.boot
39 | spring-boot-devtools
40 | runtime
41 |
42 |
43 | com.h2database
44 | h2
45 | runtime
46 |
47 |
48 | org.projectlombok
49 | lombok
50 | true
51 |
52 |
53 |
54 |
55 |
56 |
57 | org.springframework.boot
58 | spring-boot-maven-plugin
59 |
60 |
61 |
62 | com.github.eirslett
63 | frontend-maven-plugin
64 | 1.6
65 |
66 | v10.0.0
67 | 6.4.1
68 | ./../angular-rest-crud
69 | ${user.home}/.node
70 |
71 |
72 |
73 | install node and npm
74 |
75 | install-node-and-npm
76 |
77 |
78 | v10.0.0
79 | 6.4.1
80 |
81 |
82 |
83 | npm install
84 |
85 | npm
86 |
87 |
88 | install
89 |
90 |
91 |
92 | npm build
93 |
94 | npm
95 |
96 |
97 | run build-op
98 |
99 |
100 |
101 |
102 |
103 |
104 | maven-assembly-plugin
105 | 2.5.5
106 |
107 | false
108 |
109 | src/assembly/distribution.xml
110 |
111 |
112 |
113 |
114 | package
115 |
116 | single
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
--------------------------------------------------------------------------------
/spring-rest-crud/src/assembly/distribution.xml:
--------------------------------------------------------------------------------
1 |
4 | dist
5 |
6 | zip
7 |
8 | false
9 |
10 |
11 | ${project.basedir}
12 |
13 | manifest.json
14 |
15 |
16 |
17 | ${project.build.directory}
18 | \
19 |
20 | spring-rest-crud-0.0.1-SNAPSHOT.jar
21 |
22 |
23 | *.zip
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/spring-rest-crud/src/main/java/com/loiane/springrestcrud/SpringRestCrudApplication.java:
--------------------------------------------------------------------------------
1 | package com.loiane.springrestcrud;
2 |
3 | import com.loiane.springrestcrud.model.Contact;
4 | import com.loiane.springrestcrud.repository.ContactRepository;
5 | import org.springframework.boot.CommandLineRunner;
6 | import org.springframework.boot.SpringApplication;
7 | import org.springframework.boot.autoconfigure.SpringBootApplication;
8 | import org.springframework.context.annotation.Bean;
9 |
10 | import java.time.Duration;
11 | import java.util.UUID;
12 | import java.util.stream.IntStream;
13 | import java.util.stream.LongStream;
14 |
15 | @SpringBootApplication
16 | public class SpringRestCrudApplication {
17 |
18 | public static void main(String[] args) {
19 | SpringApplication.run(SpringRestCrudApplication.class, args);
20 | }
21 |
22 | @Bean
23 | CommandLineRunner initOrder(ContactRepository repository) {
24 | return args -> {
25 | repository.deleteAll();
26 | LongStream.range(1, 11)
27 | .mapToObj(i -> new Contact(i, "Contact " + i, "contact" + i + "@email.com", "(111) 111-1111"))
28 | .map(v -> repository.save(v))
29 | .forEach(System.out::println);
30 | };
31 |
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/spring-rest-crud/src/main/java/com/loiane/springrestcrud/controller/ContactController.java:
--------------------------------------------------------------------------------
1 | package com.loiane.springrestcrud.controller;
2 |
3 | import com.loiane.springrestcrud.model.Contact;
4 | import com.loiane.springrestcrud.repository.ContactRepository;
5 | import org.springframework.http.ResponseEntity;
6 | import org.springframework.web.bind.annotation.*;
7 |
8 | import javax.validation.Valid;
9 | import java.util.List;
10 |
11 | @RestController
12 | @RequestMapping({"/api/contacts"})
13 | public class ContactController {
14 |
15 | private ContactRepository repository;
16 |
17 | ContactController(ContactRepository contactRepository) {
18 | this.repository = contactRepository;
19 | }
20 |
21 | @GetMapping
22 | public List findAll(){
23 | return repository.findAll();
24 | }
25 |
26 | @GetMapping(path = {"/{id}"})
27 | public ResponseEntity findById(@PathVariable("id") long id){
28 | return repository.findById(id)
29 | .map(record -> ResponseEntity.ok().body(record))
30 | .orElse(ResponseEntity.notFound().build());
31 | }
32 |
33 | @PostMapping
34 | public Contact create(@RequestBody Contact Contact){
35 | return repository.save(Contact);
36 | }
37 |
38 | @PutMapping(value="/{id}")
39 | public ResponseEntity update(@PathVariable("id") long id,
40 | @Valid @RequestBody Contact contact){
41 | return repository.findById(id)
42 | .map(record -> {
43 | record.setName(contact.getName());
44 | record.setEmail(contact.getEmail());
45 | record.setPhone(contact.getPhone());
46 | Contact updated = repository.save(record);
47 | return ResponseEntity.ok().body(updated);
48 | }).orElse(ResponseEntity.notFound().build());
49 | }
50 |
51 | @DeleteMapping(path ={"/{id}"})
52 | public ResponseEntity> delete(@PathVariable("id") long id) {
53 | return repository.findById(id)
54 | .map(record -> {
55 | repository.deleteById(id);
56 | return ResponseEntity.ok().build();
57 | }).orElse(ResponseEntity.notFound().build());
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/spring-rest-crud/src/main/java/com/loiane/springrestcrud/model/Contact.java:
--------------------------------------------------------------------------------
1 | package com.loiane.springrestcrud.model;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import javax.persistence.Entity;
8 | import javax.persistence.GeneratedValue;
9 | import javax.persistence.Id;
10 | import javax.validation.constraints.NotBlank;
11 | import javax.validation.constraints.Size;
12 |
13 | @AllArgsConstructor
14 | @NoArgsConstructor
15 | @Data
16 | @Entity
17 | public class Contact {
18 |
19 | @Id
20 | @GeneratedValue
21 | private Long id;
22 |
23 | @NotBlank
24 | @Size(max=200)
25 | private String name;
26 |
27 | @NotBlank
28 | @Size(max=100)
29 | private String email;
30 |
31 | @Size(max=30)
32 | private String phone;
33 | }
34 |
--------------------------------------------------------------------------------
/spring-rest-crud/src/main/java/com/loiane/springrestcrud/repository/ContactRepository.java:
--------------------------------------------------------------------------------
1 | package com.loiane.springrestcrud.repository;
2 |
3 | import com.loiane.springrestcrud.model.Contact;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.stereotype.Repository;
6 |
7 | @Repository
8 | public interface ContactRepository extends JpaRepository {
9 | }
10 |
--------------------------------------------------------------------------------
/spring-rest-crud/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=${PORT}
--------------------------------------------------------------------------------
/tutorial/actions.ts:
--------------------------------------------------------------------------------
1 | enum UsersActionTypes {
2 | LOAD_REQUEST = '[Users] Load Request',
3 | LOAD_SUCCESS = '[Users] Load Success'
4 | }
5 |
6 | interface User {
7 | name: string;
8 | }
9 |
10 | type UserActions =
11 | | { type: UsersActionTypes.LOAD_REQUEST; }
12 | | { type: UsersActionTypes.LOAD_SUCCESS; payload: User[] };
13 |
14 |
--------------------------------------------------------------------------------
/tutorial/authService.ts:
--------------------------------------------------------------------------------
1 | export class AuthService {
2 |
3 | private loggedIn = new BehaviorSubject(false);
4 |
5 | get isLoggedIn() {
6 | return this.loggedIn.asObservable();
7 | }
8 | }
9 |
10 | isLoggedIn = AuthService.isLoggedIn;
--------------------------------------------------------------------------------
/tutorial/enums.ts:
--------------------------------------------------------------------------------
1 | type Shape =
2 | | { type: 'circle'; radius: number }
3 | | { type: 'square'; w: number }
4 | | { type: 'rectangle'; w: number; h: number };
5 |
6 | function calculateArea(shape: Shape) {
7 | switch (shape.type) {
8 | case 'circle':
9 | return Math.PI * shape.;
10 | case 'rectangle':
11 | return shape.w * shape.h;
12 | case 'square':
13 | return shape.w ** 2;
14 | }
15 | throw new Error('Invalid Shape');
16 | }
17 |
18 | const myCircle: Shape = { type: 'circle', radius: 2 };
19 | calculateArea(myCircle);
20 |
--------------------------------------------------------------------------------
/tutorial/getter.ts:
--------------------------------------------------------------------------------
1 | export class Contact {
2 |
3 | constructor(private _name: string) {}
4 |
5 | get name() {
6 | return this._name;
7 | }
8 |
9 | set name(name: string) {
10 | this._name = name;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/tutorial/js/actions.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var UsersActionTypes;
3 | (function (UsersActionTypes) {
4 | UsersActionTypes["LOAD_REQUEST"] = "[Users] Load Request";
5 | UsersActionTypes["LOAD_SUCCESS"] = "[Users] Load Success";
6 | })(UsersActionTypes || (UsersActionTypes = {}));
7 |
--------------------------------------------------------------------------------
/tutorial/js/authService.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var AuthService = /** @class */ (function () {
4 | function AuthService() {
5 | this.loggedIn = new BehaviorSubject(false);
6 | }
7 | Object.defineProperty(AuthService.prototype, "isLoggedIn", {
8 | get: function () {
9 | return this.loggedIn.asObservable();
10 | },
11 | enumerable: true,
12 | configurable: true
13 | });
14 | return AuthService;
15 | }());
16 | exports.AuthService = AuthService;
17 | isLoggedIn = AuthService.isLoggedIn;
18 |
--------------------------------------------------------------------------------
/tutorial/js/enums.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | function calculateArea(shape) {
3 | switch (shape.type) {
4 | case 'circle':
5 | return Math.PI * shape.;
6 | case 'rectangle':
7 | return shape.w * shape.h;
8 | case 'square':
9 | return Math.pow(shape.w, 2);
10 | }
11 | throw new Error('Invalid Shape');
12 | }
13 | var myCircle = { type: 'circle', radius: 2 };
14 | calculateArea(myCircle);
15 |
--------------------------------------------------------------------------------
/tutorial/js/getter.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var Contact = /** @class */ (function () {
4 | function Contact(_name) {
5 | this._name = _name;
6 | }
7 | Object.defineProperty(Contact.prototype, "name", {
8 | get: function () {
9 | return this._name;
10 | },
11 | set: function (name) {
12 | this._name = name;
13 | },
14 | enumerable: true,
15 | configurable: true
16 | });
17 | return Contact;
18 | }());
19 | exports.Contact = Contact;
20 |
21 | var c = new Contact();
22 | c._name
23 |
--------------------------------------------------------------------------------
/tutorial/js/main.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | function ordernarNome(a) {
3 | var result = a.slice(0);
4 | result.sort(function (x, y) {
5 | return x.nome.localeCompare(y.nome);
6 | });
7 | return result;
8 | }
9 | ordernarNome([]);
10 | var OlaMundo = /** @class */ (function () {
11 | //nome: string;
12 | function OlaMundo(nome) {
13 | this.nome = nome;
14 | }
15 | OlaMundo.prototype.ola = function () {
16 | console.log("Ol\u00E1 " + this.nome);
17 | };
18 | return OlaMundo;
19 | }());
20 | //Faça
21 | var varString = 'BrazilJS';
22 | //NÀO FAÇA
23 | var string2 = 'BrazilJS';
24 | var maria = { nome: 'Maria', idade: 20 };
25 | var joao = { nome: 'João', idade: 21, telefone: '34533545' };
26 | ordernarNome([maria, joao]);
27 | function contarLinhas(texto) {
28 | var count = 0;
29 | if (texto) {
30 | for (var _i = 0, texto_1 = texto; _i < texto_1.length; _i++) {
31 | var linha = texto_1[_i];
32 | if (linha && linha.length !== 0) {
33 | count = count + 1;
34 | }
35 | }
36 | }
37 | return count;
38 | }
39 | var a = contarLinhas(['um', 'dois', '', 'tres']);
40 | var b = contarLinhas(['ola', null, 'mundo']);
41 | var c = contarLinhas();
42 |
--------------------------------------------------------------------------------
/tutorial/js/typescript.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | // Yes
3 | var myString = 1;
4 | // No!!!
5 | var myString2 = 'Code One';
6 | function orderByName(a) {
7 | var result = a.slice(0);
8 | if (result.length === 0) {
9 | console.log();
10 | }
11 | else {
12 | return 'string';
13 | }
14 | return result.sort(function (x, y) { return x.name.localeCompare(y.name); });
15 | }
16 | var mary = { name: 'Mary', age: 20 };
17 | var john = { name: 'John', age: 21, phone: '34533545' };
18 | orderByName([mary, john]);
19 |
--------------------------------------------------------------------------------
/tutorial/main.ts:
--------------------------------------------------------------------------------
1 | interface Pessoa {
2 | nome: string;
3 | idade: number;
4 | }
5 |
6 | interface PessoaTel extends Pessoa {
7 | telefone: string;
8 | }
9 |
10 | function ordernarNome(a: Pessoa[]) {
11 | var result = a.slice(0);
12 | result.sort(function(x, y) {
13 | return x.nome.localeCompare(y.nome);
14 | });
15 | return result;
16 | }
17 |
18 | ordernarNome([]);
19 |
20 | class OlaMundo {
21 | //nome: string;
22 | constructor(public nome: string) {}
23 | ola() {
24 | console.log(`Olá ${this.nome}`);
25 | }
26 | }
27 |
28 | //Faça
29 | let varString = 'BrazilJS';
30 |
31 | //NÀO FAÇA
32 | let string2: string = 'BrazilJS';
33 |
34 | let maria: Pessoa = { nome: 'Maria', idade: 20 };
35 | let joao: PessoaTel = { nome: 'João', idade: 21, telefone: '34533545' };
36 |
37 | ordernarNome([maria, joao]);
38 |
39 | function contarLinhas(texto?: (string | null)[]): number {
40 | let count = 0;
41 | if (texto) {
42 | for (const linha of texto) {
43 | if (linha && linha.length !== 0) {
44 | count = count + 1;
45 | }
46 | }
47 | }
48 | return count;
49 | }
50 |
51 | let a = contarLinhas(['um', 'dois', '', 'tres']);
52 | let b = contarLinhas(['ola', null, 'mundo']);
53 | let c = contarLinhas();
54 |
--------------------------------------------------------------------------------
/tutorial/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Basic Options */
4 | "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */
5 | "module": "commonjs", /* Specify module code generation: 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
6 | // "lib": [], /* Specify library files to be included in the compilation: */
7 | // "allowJs": true, /* Allow javascript files to be compiled. */
8 | // "checkJs": true, /* Report errors in .js files. */
9 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
10 | // "declaration": true, /* Generates corresponding '.d.ts' file. */
11 | // "sourceMap": true, /* Generates corresponding '.map' file. */
12 | //"outFile": "./", /* Concatenate and emit output to single file. */
13 | "outDir": "./js/", /* Redirect output structure to the directory. */
14 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
15 | // "removeComments": true, /* Do not emit comments to output. */
16 | // "noEmit": true, /* Do not emit outputs. */
17 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */
18 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
19 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
20 |
21 | /* Strict Type-Checking Options */
22 | "strict": true /* Enable all strict type-checking options. */
23 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
24 | //"strictNullChecks": true, /* Enable strict null checks. */
25 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
26 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
27 |
28 | /* Additional Checks */
29 | // "noUnusedLocals": true, /* Report errors on unused locals. */
30 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
31 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
32 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
33 |
34 | /* Module Resolution Options */
35 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
36 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
37 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
38 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
39 | // "typeRoots": [], /* List of folders to include type definitions from. */
40 | // "types": [], /* Type declaration files to be included in compilation. */
41 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
42 |
43 | /* Source Map Options */
44 | // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
45 | // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */
46 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
47 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
48 |
49 | /* Experimental Options */
50 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
51 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
52 | }
53 | }
--------------------------------------------------------------------------------
/tutorial/typescript.ts:
--------------------------------------------------------------------------------
1 | // Yes
2 | let myString = 1;
3 |
4 | // No!!!
5 | let myString2: string = 'Code One';
6 |
7 | interface Person {
8 | name: string;
9 | age: number;
10 | }
11 |
12 | interface Contact extends Person {
13 | phone: string;
14 | }
15 |
16 | function orderByName(a: Person[]): Person[] {
17 | let result = a.slice(0);
18 | if (result.length === 0 ) {
19 | console.log();
20 | } else {
21 | return 'string';
22 | }
23 | return result.sort((x, y) => x.name.localeCompare(y.name));
24 | }
25 |
26 | let mary: Person = { name: 'Mary', age: 20 };
27 | let john = { name: 'John', age: 21, phone: '34533545' };
28 |
29 | orderByName([mary, john]);
--------------------------------------------------------------------------------