diff --git a/.gitignore b/.gitignore index 37e766318..549e00a2a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,33 @@ -# Jetbrains IntelliJ Idea +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 - -# Linux -# backup files -*~ - -# Windows -# thumbnails -Thumbs.db - -# Mac OS X -# metadata -.DS_Store -# thumbnails -._* - -# GIT -.git/ - -# Java -*.class - -# packages -*.jar -*.war -*.ear - -# Logging -*.log - -# jME (binaries) -*.so +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 000000000..f017ce674 --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,150 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader +{ + + private static final String WRAPPER_VERSION = "0.5.6"; + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) + { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, + MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if (mavenWrapperPropertyFile.exists()) + { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try + { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, + url); + } catch (IOException e) + { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally + { + try + { + if (mavenWrapperPropertyFileInputStream != null) + { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) + { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), + MAVEN_WRAPPER_JAR_PATH); + if (!outputFile.getParentFile() + .exists()) + { + if (!outputFile.getParentFile() + .mkdirs()) + { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile() + .getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try + { + downloadFileFromURL(url, + outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) + { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL( + String urlString, + File destination) throws Exception + { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) + { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD") + .toCharArray(); + Authenticator.setDefault(new Authenticator() + { + @Override + protected PasswordAuthentication getPasswordAuthentication() + { + return new PasswordAuthentication(username, + password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel() + .transferFrom(rbc, + 0, + Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 000000000..2cc7d4a55 Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 000000000..642d572ce --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/SeedData.java b/SeedData.java index 37e2cebd5..c92022ad5 100644 --- a/SeedData.java +++ b/SeedData.java @@ -1,5 +1,3 @@ -package com.lambdaschool.crudyorders; - import com.github.javafaker.Faker; import com.lambdaschool.crudyorders.models.Agent; import com.lambdaschool.crudyorders.models.Customer; diff --git a/mvnw b/mvnw new file mode 100644 index 000000000..3c8a55373 --- /dev/null +++ b/mvnw @@ -0,0 +1,322 @@ +#!/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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# 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 /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 + export JAVA_HOME="$(/usr/libexec/java_home)" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ]; then + if [ -r /etc/gentoo-release ]; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +if [ -z "$M2_HOME" ]; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ]; do + ls=$(ls -ld "$PRG") + link=$(expr "$ls" : '.*-> \(.*\)$') + if expr "$link" : '/.*' >/dev/null; then + PRG="$link" + else + PRG="$(dirname "$PRG")/$link" + fi + done + + saveddir=$(pwd) + + M2_HOME=$(dirname "$PRG")/.. + + # make it fully qualified + M2_HOME=$(cd "$M2_HOME" && pwd) + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=$(cygpath --unix "$M2_HOME") + [ -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 "$M2_HOME" ] && + M2_HOME="$( ( + cd "$M2_HOME" + pwd + ))" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="$( ( + cd "$JAVA_HOME" + 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="$(which 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 + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# 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/.." + pwd + ) + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' <"$1")" + fi +} + +BASE_DIR=$(find_maven_basedir "$(pwd)") +if [ -z "$BASE_DIR" ]; then + exit 1 +fi + +########################################################################################## +# 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. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in wrapperUrl) + jarUrl="$value" + break + ;; + esac + done <"$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget >/dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl >/dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +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 "$M2_HOME" ] && + M2_HOME=$(cygpath --path --windows "$M2_HOME") + [ -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 + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 000000000..c8d43372c --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,182 @@ +@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 Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@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 "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\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 DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_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 DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_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('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@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 "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\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% + +exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 000000000..8c8282fd6 --- /dev/null +++ b/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.3.1.RELEASE + + + com.lambdaschool + javaorders + 0.0.1-SNAPSHOT + javaorders + Demo project for Spring Boot + + + 14 + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + com.h2database + h2 + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + com.h2database + h2 + 1.4.200 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/com/lambdaschool/javaorders/JavaordersApplication.java b/src/main/java/com/lambdaschool/javaorders/JavaordersApplication.java new file mode 100644 index 000000000..200d002ec --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/JavaordersApplication.java @@ -0,0 +1,16 @@ +package com.lambdaschool.javaorders; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class JavaordersApplication +{ + + public static void main(String[] args) + { + SpringApplication.run(JavaordersApplication.class, + args); + } + +} diff --git a/src/main/java/com/lambdaschool/javaorders/SeedData.java b/src/main/java/com/lambdaschool/javaorders/SeedData.java new file mode 100644 index 000000000..1d80bf72b --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/SeedData.java @@ -0,0 +1,531 @@ +package com.lambdaschool.javaorders; + +//import com.github.javafaker.Faker; +import com.lambdaschool.javaorders.models.Agent; +import com.lambdaschool.javaorders.models.Customer; +import com.lambdaschool.javaorders.models.Order; +import com.lambdaschool.javaorders.models.Payment; +import com.lambdaschool.javaorders.repositories.AgentRepository; +import com.lambdaschool.javaorders.repositories.CustomerRepository; +import com.lambdaschool.javaorders.repositories.OrderRepository; +import com.lambdaschool.javaorders.repositories.PaymentRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + + +@Transactional +@Component +public class SeedData implements CommandLineRunner +{ + /** + * Connects the customer table to this SeedData method + */ + @Autowired + private CustomerRepository custrepos; + + /** + * Connects the agents table to this SeedData method + */ + @Autowired + private AgentRepository agentrepos; + + /** + * Connects the orders table to this SeedData method + */ + @Autowired + private OrderRepository ordersrepos; + + /** + * Connects the payment table to this SeedData method + */ + @Autowired + private PaymentRepository paymentrepos; + + /** + * Generates test, seed data for our application + * First a set of known data is seeded into our database. + * Second a random set of data using Java Faker is seeded into our database. + * Note this process does not remove data from the database. So if data exists in the database + * prior to running this process, that data remains in the database. + * + * @param args The parameter is required by the parent interface but is not used in this process. + */ + @Transactional + @Override + public void run(String[] args) throws Exception + { + Payment pay1 = new Payment("Cash"); + Payment pay2 = new Payment("Gift Card"); + Payment pay3 = new Payment("Credit Card"); + Payment pay4 = new Payment("Mobile Pay"); + + pay1 = paymentrepos.save(pay1); + pay2 = paymentrepos.save(pay2); + pay3 = paymentrepos.save(pay3); + pay4 = paymentrepos.save(pay4); + + Agent a01 = new Agent("Ramasundar", + "Bangalore", + 0.15, + "077-25814763", + ""); + Agent a02 = new Agent("Alex", + "London", + 0.13, + "075-12458969", + ""); + Agent a03 = new Agent("Alford", + "New York", + 0.12, + "044-25874365", + ""); + Agent a04 = new Agent("Ravi", + "Bangalore", + 0.15, + "077-45625874", + ""); + Agent a05 = new Agent("Santakumar", + "Chennai", + 0.14, + "007-22388644", + ""); + Agent a06 = new Agent("Lucida", + "San Jose", + 0.12, + "044-52981425", + ""); + Agent a07 = new Agent("Anderson", + "Brisban", + 0.13, + "045-21447739", + ""); + Agent a08 = new Agent("Subbarao", + "Bangalore", + 0.14, + "077-12346674", + ""); + Agent a09 = new Agent("Mukesh", + "Mumbai", + 0.11, + "029-12358964", + ""); + Agent a10 = new Agent("McDen", + "London", + 0.15, + "078-22255588", + ""); + Agent a11 = new Agent("Ivan", + "Torento", + 0.15, + "008-22544166", + ""); + Agent a12 = new Agent("Benjamin", + "Hampshair", + 0.11, + "008-22536178", + ""); + + Customer c01 = new Customer("Holmes", + "London", + "London", + "UK", + "2", + 6000.00, + 5000.00, + 7000.00, + 4000.00, + "BBBBBBB", + a03); + Customer c02 = new Customer("Micheal", + "New York", + "New York", + "USA", + "2", + 3000.00, + 5000.00, + 2000.00, + 6000.00, + "CCCCCCC", + a08); + Customer c03 = new Customer("Albert", + "New York", + "New York", + "USA", + "3", + 5000.00, + 7000.00, + 6000.00, + 6000.00, + "BBBBSBB", + a08); + Customer c04 = new Customer("Ravindran", + "Bangalore", + "Bangalore", + "India", + "2", + 5000.00, + 7000.00, + 4000.00, + 8000.00, + "AVAVAVA", + a11); + Customer c05 = new Customer("Cook", + "London", + "London", + "UK", + "2", + 4000.00, + 9000.00, + 7000.00, + 6000.00, + "FSDDSDF", + a06); + Customer c06 = new Customer("Stuart", + "London", + "London", + "UK", + "1", + 6000.00, + 8000.00, + 3000.00, + 11000.00, + "GFSGERS", + a03); + Customer c07 = new Customer("Bolt", + "New York", + "New York", + "USA", + "3", + 5000.00, + 7000.00, + 9000.00, + 3000.00, + "DDNRDRH", + a08); + Customer c08 = new Customer("Fleming", + "Brisban", + "Brisban", + "Australia", + "2", + 7000.00, + 7000.00, + 9000.00, + 5000.00, + "NHBGVFC", + a05); + Customer c09 = new Customer("Jacks", + "Brisban", + "Brisban", + "Australia", + "1", + 7000.00, + 7000.00, + 7000.00, + 7000.00, + "WERTGDF", + a05); + Customer c10 = new Customer("Yearannaidu", + "Chennai", + "Chennai", + "India", + "1", + 8000.00, + 7000.00, + 7000.00, + 8000.00, + "ZZZZBFV", + a10); + Customer c11 = new Customer("Sasikant", + "Mumbai", + "Mumbai", + "India", + "1", + 7000.00, + 11000.00, + 7000.00, + 11000.00, + "147-25896312", + a02); + Customer c12 = new Customer("Ramanathan", + "Chennai", + "Chennai", + "India", + "1", + 7000.00, + 11000.00, + 9000.00, + 9000.00, + "GHRDWSD", + a10); + Customer c13 = new Customer("Avinash", + "Mumbai", + "Mumbai", + "India", + "2", + 7000.00, + 11000.00, + 9000.00, + 9000.00, + "113-12345678", + a02); + Customer c14 = new Customer("Winston", + "Brisban", + "Brisban", + "Australia", + "1", + 5000.00, + 8000.00, + 7000.00, + 6000.00, + "AAAAAAA", + a05); + Customer c15 = new Customer("Karl", + "London", + "London", + "UK", + "0", + 4000.00, + 6000.00, + 7000.00, + 3000.00, + "AAAABAA", + a06); + Customer c16 = new Customer("Shilton", + "Torento", + "Torento", + "Canada", + "1", + 10000.00, + 7000.00, + 6000.00, + 11000.00, + "DDDDDDD", + a04); + Customer c17 = new Customer("Charles", + "Hampshair", + "Hampshair", + "UK", + "3", + 6000.00, + 4000.00, + 5000.00, + 5000.00, + "MMMMMMM", + a09); + Customer c18 = new Customer("Srinivas", + "Bangalore", + "Bangalore", + "India", + "2", + 8000.00, + 4000.00, + 3000.00, + 9000.00, + "AAAAAAB", + a07); + Customer c19 = new Customer("Steven", + "San Jose", + "San Jose", + "USA", + "1", + 5000.00, + 7000.00, + 9000.00, + 3000.00, + "KRFYGJK", + a10); + Customer c20 = new Customer("Karolina", + "Torento", + "Torento", + "Canada", + "1", + 7000.00, + 7000.00, + 9000.00, + 5000.00, + "HJKORED", + a04); + Customer c21 = new Customer("Martin", + "Torento", + "Torento", + "Canada", + "2", + 8000.00, + 7000.00, + 7000.00, + 8000.00, + "MJYURFD", + a04); + Customer c22 = new Customer("Ramesh", + "Mumbai", + "Mumbai", + "India", + "3", + 8000.00, + 7000.00, + 3000.00, + 12000.00, + "Phone No", + a02); + Customer c23 = new Customer("Rangarappa", + "Bangalore", + "Bangalore", + "India", + "2", + 8000.00, + 11000.00, + 7000.00, + 12000.00, + "AAAATGF", + a01); + Customer c24 = new Customer("Venkatpati", + "Bangalore", + "Bangalore", + "India", + "2", + 8000.00, + 11000.00, + 7000.00, + 12000.00, + "JRTVFDD", + a07); + Customer c25 = new Customer("Sundariya", + "Chennai", + "Chennai", + "India", + "3", + 7000.00, + 11000.00, + 7000.00, + 11000.00, + "PPHGRTS", + a10); + + Order o01 = new Order(1000.00, + 600.00, + c13, + "SOD"); + o01.addPayments(pay1); + + Order o02 = new Order(3000.00, + 500.00, + c19, + "SOD"); + o02.addPayments(pay2); + + Order o03 = new Order(4500.00, + 900.00, + c07, + "SOD"); + o03.addPayments(pay3); + o03.addPayments(pay2); + + Order o04 = new Order(2000.00, + 0.00, + c16, + "SOD"); + o04.addPayments(pay4); + + Order o05 = new Order(4000.00, + 600.00, + c22, + "SOD"); + o05.addPayments(pay2); + + Order o06 = new Order(2000.00, + 0.00, + c12, + "SOD"); + o06.addPayments(pay3); + + Order o07 = new Order(3500.00, + 2000.00, + c02, + "SOD"); + o07.addPayments(pay4); + + Order o08 = new Order(2500.00, + 400.00, + c03, + "SOD"); + o08.addPayments(pay1); + + Order o09 = new Order(500.00, + 0.00, + c23, + "SOD"); + o09.addPayments(pay3); + + Order o10 = new Order(4000.00, + 700.00, + c07, + "SOD"); + o10.addPayments(pay4); + + Order o11 = new Order(1500.00, + 600.00, + c08, + "SOD"); + o11.addPayments(pay2); + + Order o12 = new Order(2500.00, + 0.00, + c25, + "SOD"); + o12.addPayments(pay1); + + agentrepos.save(a01); + agentrepos.save(a02); + agentrepos.save(a03); + agentrepos.save(a04); + agentrepos.save(a05); + agentrepos.save(a06); + agentrepos.save(a07); + agentrepos.save(a08); + agentrepos.save(a09); + agentrepos.save(a10); + agentrepos.save(a11); + agentrepos.save(a12); + + custrepos.save(c01); + custrepos.save(c02); + custrepos.save(c03); + custrepos.save(c04); + custrepos.save(c05); + custrepos.save(c06); + custrepos.save(c07); + custrepos.save(c08); + custrepos.save(c09); + custrepos.save(c10); + custrepos.save(c11); + custrepos.save(c12); + custrepos.save(c13); + custrepos.save(c14); + custrepos.save(c15); + custrepos.save(c16); + custrepos.save(c17); + custrepos.save(c18); + custrepos.save(c19); + custrepos.save(c20); + custrepos.save(c21); + custrepos.save(c22); + custrepos.save(c23); + custrepos.save(c24); + custrepos.save(c25); + + ordersrepos.save(o01); + ordersrepos.save(o02); + ordersrepos.save(o03); + ordersrepos.save(o04); + ordersrepos.save(o05); + ordersrepos.save(o06); + ordersrepos.save(o07); + ordersrepos.save(o08); + ordersrepos.save(o09); + ordersrepos.save(o10); + ordersrepos.save(o11); + ordersrepos.save(o12); + } +} \ No newline at end of file diff --git a/src/main/java/com/lambdaschool/javaorders/config/H2ServerConfiguration.java b/src/main/java/com/lambdaschool/javaorders/config/H2ServerConfiguration.java new file mode 100644 index 000000000..b483eebc3 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/config/H2ServerConfiguration.java @@ -0,0 +1,72 @@ +package com.lambdaschool.javaorders.config; + +import org.h2.tools.Server; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.sql.SQLException; + +/** + * Configures H2 access through the JetBrains IntelliJ IDEA IDE. + *

+ * Adapted from https://techdev.io/en/developer-blog/querying-the-embedded-h2-database-of-a-spring-boot-application + * necessary for using the database tool built into intellij + */ +@Configuration +public class H2ServerConfiguration +{ + + /** + * TCP port for remote connections, default 9092. + */ + @Value("${h2.tcp.port:9092}") + private String h2TcpPort; + + /** + * Web port, default 8082. + */ + @Value("${h2.web.port:8082}") + private String h2WebPort; + + /** + * TCP connection to connect with SQL clients to the embedded h2 database. + *

+ * Connect to "jdbc:h2:tcp://localhost:9092/mem:testdb", username "sa", password empty. + * + * @return The created TcpServer needed to access H2. + * @throws SQLException If the server cannot be created. + */ + @Bean + @ConditionalOnExpression("${h2.tcp.enabled:true}") + public Server h2TcpServer() throws + SQLException + { + return Server.createTcpServer("-tcp", + "-tcpAllowOthers", + "-tcpPort", + h2TcpPort) + .start(); + } + + /** + * Web console for the embedded h2 database. + *

+ * Go to http://localhost:8082 and connect to the database "jdbc:h2:mem:testdb", username "sa", password empty. + * + * @return The created web server needed to access H2. + * @throws SQLException If the server cannot be created. + */ + @Bean + @ConditionalOnExpression("${h2.web.enabled:true}") + public Server h2WebServer() throws + SQLException + { + return Server.createWebServer("-web", + "-webAllowOthers", + "-webPort", + h2WebPort) + .start(); + } +} \ No newline at end of file diff --git a/src/main/java/com/lambdaschool/javaorders/controllers/AgentController.java b/src/main/java/com/lambdaschool/javaorders/controllers/AgentController.java new file mode 100644 index 000000000..2506eb2ab --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/controllers/AgentController.java @@ -0,0 +1,28 @@ +package com.lambdaschool.javaorders.controllers; + +import com.lambdaschool.javaorders.models.Agent; +import com.lambdaschool.javaorders.services.AgentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value = "/agents") +public class AgentController +{ + @Autowired + private AgentService agentService; + + @GetMapping(value = "/agent/{id}", produces = {"application/json"}) + public ResponseEntity getAgentById(@PathVariable long id){ + Agent rtn = agentService.getAgentById(id); + + return new ResponseEntity<>(rtn, HttpStatus.OK); + } +} + + diff --git a/src/main/java/com/lambdaschool/javaorders/controllers/CustomerController.java b/src/main/java/com/lambdaschool/javaorders/controllers/CustomerController.java new file mode 100644 index 000000000..bfecaf4d5 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/controllers/CustomerController.java @@ -0,0 +1,44 @@ +package com.lambdaschool.javaorders.controllers; + +import com.lambdaschool.javaorders.models.Customer; +import com.lambdaschool.javaorders.services.CustomerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping(value = "/customers") +public class CustomerController +{ + @Autowired + private CustomerService customerService; + + //http://localhost:2019/customers/order + + @GetMapping(value = "/orders", produces = {"application/json"}) + public ResponseEntity listCustomerOrders(){ + List rtn = customerService.listAllCustomersOrders(); + return new ResponseEntity<>(rtn, HttpStatus.OK); + } + + //http://localhost:2019/customers/customer/7 + + @GetMapping(value = "/customer/{id}", produces = {"application/json"}) + public ResponseEntity getCustomerById(@PathVariable long id){ + Customer rtn = customerService.FindById(id); + return new ResponseEntity<>(rtn, HttpStatus.OK); + } + + //Http:localhost:2019/customers/namelike/mes + @GetMapping(value = "/namelike/{subname}", produces = {"application/json"}) + public ResponseEntity listAllCustomerBySubname(@PathVariable String subname){ + List rtn = customerService.findBySubname(subname); + return new ResponseEntity<>(rtn, HttpStatus.OK); + } +} diff --git a/src/main/java/com/lambdaschool/javaorders/controllers/OrderController.java b/src/main/java/com/lambdaschool/javaorders/controllers/OrderController.java new file mode 100644 index 000000000..3cad6854a --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/controllers/OrderController.java @@ -0,0 +1,34 @@ +package com.lambdaschool.javaorders.controllers; + +import com.lambdaschool.javaorders.models.Order; +import com.lambdaschool.javaorders.services.OrderService; +import com.lambdaschool.javaorders.view.Advanced; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping(value = "/orders") +public class OrderController +{ + @Autowired + private OrderService orderService; + + @GetMapping(value = "/order/{id}", produces = {"application/json"}) + public ResponseEntity findOrderById(@PathVariable long id){ + Order rtn = orderService.findOrderById(id); + return new ResponseEntity<>(rtn, HttpStatus.OK); + } + + @GetMapping(value = "/advanceamount", produces = {"application/json"}) + public ResponseEntity listOrdersByAdvanceamount(){ + List rtn = orderService.listAdvanceOrders(); + return new ResponseEntity<>(rtn, HttpStatus.OK); + } +} diff --git a/src/main/java/com/lambdaschool/javaorders/models/Agent.java b/src/main/java/com/lambdaschool/javaorders/models/Agent.java new file mode 100644 index 000000000..078a10504 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/models/Agent.java @@ -0,0 +1,111 @@ +package com.lambdaschool.javaorders.models; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "agents") +public class Agent +{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(nullable = false) + private long agentcode; + private String agentname; + private String workingarea; + private double commission; + private String phone; + private String country; + + @OneToMany(mappedBy = "agent", + cascade = CascadeType.ALL, + orphanRemoval = true) + private Set customers = new HashSet<>(); + + public Agent(){} + + public Agent( + String agentname, + String workingarea, + double comission, + String phone, + String country) + { + this.agentname = agentname; + this.workingarea = workingarea; + this.commission = comission; + this.phone = phone; + this.country = country; + } + + public long getAgentcode() + { + return agentcode; + } + + public void setAgentcode(long agentcode) + { + this.agentcode = agentcode; + } + + public String getAgentname() + { + return agentname; + } + + public void setAgentname(String agentname) + { + this.agentname = agentname; + } + + public String getWorkingarea() + { + return workingarea; + } + + public void setWorkingarea(String workingarea) + { + this.workingarea = workingarea; + } + + public double getCommission() + { + return commission; + } + + public void setCommission(double commission) + { + this.commission = commission; + } + + public String getPhone() + { + return phone; + } + + public void setPhone(String phone) + { + this.phone = phone; + } + + public String getCountry() + { + return country; + } + + public void setCountry(String country) + { + this.country = country; + } + + public Set getCustomers() + { + return customers; + } + + public void setCustomers(Set customers) + { + this.customers = customers; + } +} diff --git a/src/main/java/com/lambdaschool/javaorders/models/Customer.java b/src/main/java/com/lambdaschool/javaorders/models/Customer.java new file mode 100644 index 000000000..736cb1dbb --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/models/Customer.java @@ -0,0 +1,196 @@ +package com.lambdaschool.javaorders.models; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "customers") +public class Customer +{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(nullable = false) + private long custcode; + + //custcode, custname, custcity, workingarea, custcountry, grade, openingamt, receiveamt, paymentamt + + @Column(nullable = false) + private String custname; + private String custcity; + private String workingarea; + private String custcountry; + private String grade; + private double openingamt; + private double receiveamt; + private double paymentamt; + private double outstandingamt; + private String phone; + + @ManyToOne + @JoinColumn(name = "agentcode", nullable = false) + private Agent agent; + + @OneToMany(mappedBy = "customer", + cascade = CascadeType.ALL, + orphanRemoval = true) + private Set orders = new HashSet<>(); + + public Customer(){} + + public Customer( + String custname, + String custcity, + String workingarea, + String custcountry, + String grade, + double openingamt, + double receiveamt, + double paymentamt, + double outstandingamt, + String phone, + Agent agent) + { + this.custname = custname; + this.custcity = custcity; + this.workingarea = workingarea; + this.custcountry = custcountry; + this.grade = grade; + this.openingamt = openingamt; + this.receiveamt = receiveamt; + this.paymentamt = paymentamt; + this.outstandingamt = outstandingamt; + this.phone = phone; + this.agent = agent; + } + + public long getCustcode() + { + return custcode; + } + + public void setCustcode(long custcode) + { + this.custcode = custcode; + } + + public String getCustname() + { + return custname; + } + + public void setCustname(String custname) + { + this.custname = custname; + } + + public String getCustcity() + { + return custcity; + } + + public void setCustcity(String custcity) + { + this.custcity = custcity; + } + + public String getWorkingArea() + { + return workingarea; + } + + public void setWorkingArea(String workingarea) + { + this.workingarea = workingarea; + } + + public String getCustcountry() + { + return custcountry; + } + + public void setCustcountry(String custcountry) + { + this.custcountry = custcountry; + } + + public String getGrade() + { + return grade; + } + + public void setGrade(String grade) + { + this.grade = grade; + } + + public double getOpeningamt() + { + return openingamt; + } + + public void setOpeningamt(double openingamt) + { + this.openingamt = openingamt; + } + + public double getReceiveamnt() + { + return receiveamt; + } + + public void setReceiveamnt(double receiveamnt) + { + this.receiveamt = receiveamt; + } + + public double getPaymentamnt() + { + return paymentamt; + } + + public void setPaymentamnt(double paymentamnt) + { + this.paymentamt = paymentamt; + } + + public double getOutstandingamt() + { + return outstandingamt; + } + + public void setOutstandingamt(double outstandingamt) + { + this.outstandingamt = outstandingamt; + } + + public String getPhone() + { + return phone; + } + + public void setPhone(String phone) + { + this.phone = phone; + } + + public Agent getAgent() + { + return agent; + } + + public void setAgent(Agent agent) + { + this.agent = agent; + } + + public Set getOrders() + { + return orders; + } + + public void setOrders(Set orders) + { + this.orders = orders; + } +} diff --git a/src/main/java/com/lambdaschool/javaorders/models/Order.java b/src/main/java/com/lambdaschool/javaorders/models/Order.java new file mode 100644 index 000000000..8369c4b39 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/models/Order.java @@ -0,0 +1,106 @@ +package com.lambdaschool.javaorders.models; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "orders") +public class Order +{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(nullable = false) + private long ordnum; + private double ordamount; + private double advanceamount; + + @ManyToOne + @JoinColumn(name = "custcode", nullable = false) + private Customer customer; + private String orderdescription; + + @ManyToMany() + @JoinTable(name = "orderspayments", + joinColumns = @JoinColumn(name = "ordnum"), + inverseJoinColumns = @JoinColumn(name = "paymentid")) + private Set payments = new HashSet<>(); + + public Order(){} + + public Order( + double ordamount, + double advanceamount, + Customer customer, + String orderdescription) + { + this.ordamount = ordamount; + this.advanceamount = advanceamount; + this.customer = customer; + this.orderdescription = orderdescription; + } + + public long getordnum() + { + return ordnum; + } + + public void setordnum(long ordnum) + { + this.ordnum = ordnum; + } + + public double getOrdamount() + { + return ordamount; + } + + public void setOrdamount(double ordamount) + { + this.ordamount = ordamount; + } + + public double getAdvanceamount() + { + return advanceamount; + } + + public void setAdvanceamount(double advanceamount) + { + this.advanceamount = advanceamount; + } + + public Customer getCustomer() + { + return customer; + } + + public void setCustomer(Customer customer) + { + this.customer = customer; + } + + public String getOrderdescription() + { + return orderdescription; + } + + public void setOrderdescription(String orderdescription) + { + this.orderdescription = orderdescription; + } + + public Set getPayments() + { + return payments; + } + + public void setPayments(Set payments) + { + this.payments = payments; + } + + public void addPayments(Payment payment){ + payments.add(payment); + } +} diff --git a/src/main/java/com/lambdaschool/javaorders/models/Payment.java b/src/main/java/com/lambdaschool/javaorders/models/Payment.java new file mode 100644 index 000000000..2a62d4894 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/models/Payment.java @@ -0,0 +1,58 @@ +package com.lambdaschool.javaorders.models; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "payments") +public class Payment +{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(nullable = false) + private long paymentid; + @Column(nullable = false) + private String type; + + + @ManyToMany(mappedBy = "payments") + private Set orders = new HashSet<>(); + + public Payment(){} + + public Payment(String type) + { + this.type = type; + } + + public long getPaymentid() + { + return paymentid; + } + + public void setPaymentid(long paymentid) + { + this.paymentid = paymentid; + } + + public String getType() + { + return type; + } + + public void setType(String type) + { + this.type = type; + } + + public Set getOrders() + { + return orders; + } + + public void setOrders(Set orders) + { + this.orders = orders; + } +} diff --git a/src/main/java/com/lambdaschool/javaorders/repositories/AgentRepository.java b/src/main/java/com/lambdaschool/javaorders/repositories/AgentRepository.java new file mode 100644 index 000000000..e5b35272c --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/repositories/AgentRepository.java @@ -0,0 +1,8 @@ +package com.lambdaschool.javaorders.repositories; + +import com.lambdaschool.javaorders.models.Agent; +import org.springframework.data.repository.CrudRepository; + +public interface AgentRepository extends CrudRepository +{ +} diff --git a/src/main/java/com/lambdaschool/javaorders/repositories/CustomerRepository.java b/src/main/java/com/lambdaschool/javaorders/repositories/CustomerRepository.java new file mode 100644 index 000000000..05bb84768 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/repositories/CustomerRepository.java @@ -0,0 +1,11 @@ +package com.lambdaschool.javaorders.repositories; + +import com.lambdaschool.javaorders.models.Customer; +import org.springframework.data.repository.CrudRepository; + +import java.util.List; + +public interface CustomerRepository extends CrudRepository +{ + List findByCustnameContainingIgnoringCase(String subname); +} diff --git a/src/main/java/com/lambdaschool/javaorders/repositories/OrderRepository.java b/src/main/java/com/lambdaschool/javaorders/repositories/OrderRepository.java new file mode 100644 index 000000000..50ea66f8b --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/repositories/OrderRepository.java @@ -0,0 +1,17 @@ +package com.lambdaschool.javaorders.repositories; + +import com.lambdaschool.javaorders.models.Order; +import com.lambdaschool.javaorders.view.Advanced; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; + +import java.util.List; + +public interface OrderRepository extends CrudRepository +{ + @Query(value = "SELECT o.ordnum as ordnum, o.advanceamount as advanceamount, o.ordamount as ordamount, o.orderdescription as orderdescription, c.custcode as custcode, c.custcity as custcity, c.custcountry as custcountry, c.custname as custname, c.grade as grade, c.openingamt as openingamt, c.outstandingamt as outstandingamt, c.paymentamt as paymentamt, c.phone as phone, c.receiveamt as receiveamt, c.workingarea as workingarea, c.agentcode as agentcode " + + "FROM orders o LEFT JOIN customers c " + + "ON o.custcode = c.custcode " + + "WHERE advanceamount > 0;", nativeQuery = true) + List getAdvanceOrders(); +} diff --git a/src/main/java/com/lambdaschool/javaorders/repositories/PaymentRepository.java b/src/main/java/com/lambdaschool/javaorders/repositories/PaymentRepository.java new file mode 100644 index 000000000..83866b715 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/repositories/PaymentRepository.java @@ -0,0 +1,8 @@ +package com.lambdaschool.javaorders.repositories; + +import com.lambdaschool.javaorders.models.Payment; +import org.springframework.data.repository.CrudRepository; + +public interface PaymentRepository extends CrudRepository +{ +} diff --git a/src/main/java/com/lambdaschool/javaorders/services/AgentService.java b/src/main/java/com/lambdaschool/javaorders/services/AgentService.java new file mode 100644 index 000000000..9b8c2767e --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/services/AgentService.java @@ -0,0 +1,10 @@ +package com.lambdaschool.javaorders.services; + +import com.lambdaschool.javaorders.models.Agent; + +public interface AgentService +{ + Agent save(Agent agent); + + Agent getAgentById(long id); +} diff --git a/src/main/java/com/lambdaschool/javaorders/services/AgentServiceImpl.java b/src/main/java/com/lambdaschool/javaorders/services/AgentServiceImpl.java new file mode 100644 index 000000000..ce03d221d --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/services/AgentServiceImpl.java @@ -0,0 +1,28 @@ +package com.lambdaschool.javaorders.services; + +import com.lambdaschool.javaorders.models.Agent; +import com.lambdaschool.javaorders.repositories.AgentRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityNotFoundException; + +@Service(value = "agentService") +public class AgentServiceImpl implements AgentService +{ + @Autowired + private AgentRepository agentrepos; + + @Override + public Agent save(Agent agent) + { + return agentrepos.save(agent); + } + + @Override + public Agent getAgentById(long id) + { + return agentrepos.findById(id) + .orElseThrow(() -> new EntityNotFoundException("Agent ID: " + id + " is not found. Please try another")); + } +} diff --git a/src/main/java/com/lambdaschool/javaorders/services/CustomerService.java b/src/main/java/com/lambdaschool/javaorders/services/CustomerService.java new file mode 100644 index 000000000..660c4a363 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/services/CustomerService.java @@ -0,0 +1,16 @@ +package com.lambdaschool.javaorders.services; + +import com.lambdaschool.javaorders.models.Customer; + +import java.util.List; + +public interface CustomerService +{ + Customer save(Customer customer); + + List listAllCustomersOrders(); + + Customer FindById(long id); + + List findBySubname(String subname); +} diff --git a/src/main/java/com/lambdaschool/javaorders/services/CustomerServiceImpl.java b/src/main/java/com/lambdaschool/javaorders/services/CustomerServiceImpl.java new file mode 100644 index 000000000..232c1f591 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/services/CustomerServiceImpl.java @@ -0,0 +1,51 @@ +package com.lambdaschool.javaorders.services; + +import com.lambdaschool.javaorders.models.Customer; +import com.lambdaschool.javaorders.repositories.CustomerRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityNotFoundException; +import java.util.ArrayList; +import java.util.List; + +@Service(value = "customerService") +public class CustomerServiceImpl implements CustomerService +{ + @Autowired + private CustomerRepository customerrepos; + + @Override + public Customer save(Customer customer) + { + return customerrepos.save(customer); + } + + @Override + public List listAllCustomersOrders() + { + List rtn = new ArrayList<>(); + customerrepos.findAll() + .iterator().forEachRemaining(rtn::add); + + return rtn; + } + + @Override + public Customer FindById(long id) + { + return customerrepos.findById(id) + .orElseThrow(() -> new EntityNotFoundException("Customer ID: " + id + " is not found. Please try another")); + } + + @Override + public List findBySubname(String subname) + { + List rtn = new ArrayList<>(); + rtn = customerrepos.findByCustnameContainingIgnoringCase(subname); + if(rtn == null){ + throw new EntityNotFoundException("Customer with the name " + subname + " is not found"); + } + return rtn; + } +} diff --git a/src/main/java/com/lambdaschool/javaorders/services/OrderService.java b/src/main/java/com/lambdaschool/javaorders/services/OrderService.java new file mode 100644 index 000000000..90b0595c9 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/services/OrderService.java @@ -0,0 +1,14 @@ +package com.lambdaschool.javaorders.services; + +import com.lambdaschool.javaorders.models.Order; +import com.lambdaschool.javaorders.view.Advanced; + +import java.util.List; + +public interface OrderService +{ + Order save(Order order); + Order findOrderById(long id); + + List listAdvanceOrders(); +} diff --git a/src/main/java/com/lambdaschool/javaorders/services/OrderServiceImpl.java b/src/main/java/com/lambdaschool/javaorders/services/OrderServiceImpl.java new file mode 100644 index 000000000..db7f74d8e --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/services/OrderServiceImpl.java @@ -0,0 +1,35 @@ +package com.lambdaschool.javaorders.services; + +import com.lambdaschool.javaorders.models.Order; +import com.lambdaschool.javaorders.repositories.OrderRepository; +import com.lambdaschool.javaorders.view.Advanced; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityNotFoundException; +import java.util.List; + +@Service(value = "orderService") +public class OrderServiceImpl implements OrderService +{ + @Autowired + private OrderRepository orderrepos; + + @Override + public Order save(Order order) + { + return orderrepos.save(order); + } + + @Override + public Order findOrderById(long id){ + return orderrepos.findById(id) + .orElseThrow(() -> new EntityNotFoundException("Order Id " + id + " is not found.")); + } + + @Override + public List listAdvanceOrders() + { + return orderrepos.getAdvanceOrders(); + } +} diff --git a/src/main/java/com/lambdaschool/javaorders/services/PaymentService.java b/src/main/java/com/lambdaschool/javaorders/services/PaymentService.java new file mode 100644 index 000000000..0787362d8 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/services/PaymentService.java @@ -0,0 +1,8 @@ +package com.lambdaschool.javaorders.services; + +import com.lambdaschool.javaorders.models.Payment; + +public interface PaymentService +{ + Payment save(Payment payment); +} diff --git a/src/main/java/com/lambdaschool/javaorders/services/PaymentServiceImpl.java b/src/main/java/com/lambdaschool/javaorders/services/PaymentServiceImpl.java new file mode 100644 index 000000000..712c6768b --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/services/PaymentServiceImpl.java @@ -0,0 +1,19 @@ +package com.lambdaschool.javaorders.services; + +import com.lambdaschool.javaorders.models.Payment; +import com.lambdaschool.javaorders.repositories.PaymentRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service(value = "paymentService") +public class PaymentServiceImpl implements PaymentService +{ + @Autowired + private PaymentRepository paymentrepos; + + @Override + public Payment save(Payment payment){ + return paymentrepos.save(payment); + } + +} diff --git a/src/main/java/com/lambdaschool/javaorders/view/Advanced.java b/src/main/java/com/lambdaschool/javaorders/view/Advanced.java new file mode 100644 index 000000000..f4811fe51 --- /dev/null +++ b/src/main/java/com/lambdaschool/javaorders/view/Advanced.java @@ -0,0 +1,7 @@ +package com.lambdaschool.javaorders.view; + +public interface Advanced +{ + long getOrdnum(); + double getAdvanceAmount(); +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 000000000..81540e33e --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,29 @@ +### Configurations useful for working with H2 +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console +# +### We set a port that is not frequently used +server.port=${PORT:2019} +# +### Feature that determines what happens when no accessors are found for a type +### (and there are no annotations to indicate it is meant to be serialized). +spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false +# +### keeps a transaction inside of the same entity manager +### This property register an EntityManager to the current thread, +### so you will have the same EntityManager until the web request is finished. +spring.jpa.open-in-view=true +# +### What do with the schema +### drop n create table again, good for testing +spring.jpa.hibernate.ddl-auto=create +spring.datasource.initialization-mode=always +# +### Good for production! +### spring.jpa.hibernate.ddl-auto=update +### spring.datasource.initialization-mode=never + +### Configurations useful for working with H2 +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console +spring.datasource.url=jdbc:h2:mem:testdb \ No newline at end of file diff --git a/data.sql b/src/main/resources/data.sql similarity index 99% rename from data.sql rename to src/main/resources/data.sql index 4dfab346f..37755bd01 100644 --- a/data.sql +++ b/src/main/resources/data.sql @@ -87,5 +87,4 @@ INSERT INTO ORDERSPAYMENTS (ordnum, paymentid) Must tell hibernate of the id numbers already used. The number after with must be greater that the highest number id assigned. */ - - alter sequence hibernate_sequence restart with 50; +alter sequence hibernate_sequence restart with 50; diff --git a/src/test/java/com/lambdaschool/javaorders/JavaordersApplicationTests.java b/src/test/java/com/lambdaschool/javaorders/JavaordersApplicationTests.java new file mode 100644 index 000000000..aaeced99b --- /dev/null +++ b/src/test/java/com/lambdaschool/javaorders/JavaordersApplicationTests.java @@ -0,0 +1,15 @@ +package com.lambdaschool.javaorders; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class JavaordersApplicationTests +{ + + @Test + void contextLoads() + { + } + +}