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..a45eb6ba2
--- /dev/null
+++ b/.mvn/wrapper/MavenWrapperDownloader.java
@@ -0,0 +1,118 @@
+/*
+ * 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
deleted file mode 100644
index 37e2cebd5..000000000
--- a/SeedData.java
+++ /dev/null
@@ -1,536 +0,0 @@
-package com.lambdaschool.crudyorders;
-
-import com.github.javafaker.Faker;
-import com.lambdaschool.crudyorders.models.Agent;
-import com.lambdaschool.crudyorders.models.Customer;
-import com.lambdaschool.crudyorders.models.Order;
-import com.lambdaschool.crudyorders.models.Payment;
-import com.lambdaschool.crudyorders.repositories.AgentsRepository;
-import com.lambdaschool.crudyorders.repositories.CustomersRepository;
-import com.lambdaschool.crudyorders.repositories.OrdersRepository;
-import com.lambdaschool.crudyorders.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;
-
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Random;
-import java.util.Set;
-
-
-@Transactional
-@Component
-public class SeedData implements CommandLineRunner
-{
- /**
- * Connects the customer table to this SeedData method
- */
- @Autowired
- private CustomersRepository custrepos;
-
- /**
- * Connects the agents table to this SeedData method
- */
- @Autowired
- private AgentsRepository agentrepos;
-
- /**
- * Connects the orders table to this SeedData method
- */
- @Autowired
- private OrdersRepository 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/mvnw b/mvnw
new file mode 100755
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..185133cf4
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,69 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.9.RELEASE
+
+
+ com.lambdaschool
+ javaorders
+ 0.0.1-SNAPSHOT
+ javaorders
+ Demo project for Spring Boot
+
+
+ 11
+
+
+
+
+ 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.github.javafaker
+ javafaker
+ 1.0.2
+
+
+
+
+
+
+ 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..677332004
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/JavaordersApplication.java
@@ -0,0 +1,13 @@
+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/controllers/AgentController.java b/src/main/java/com/lambdaschool/javaorders/controllers/AgentController.java
new file mode 100644
index 000000000..0f3c58b9d
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/controllers/AgentController.java
@@ -0,0 +1,36 @@
+package com.lambdaschool.javaorders.controllers;
+
+
+import com.lambdaschool.javaorders.models.Agent;
+import com.lambdaschool.javaorders.services.AgentServices;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/agents")
+public class AgentController {
+
+ @Autowired
+ AgentServices agentServices;
+
+ // http://localhost:2019/agents/agent/9
+ @GetMapping(value = "/agent/{agentId}", produces = "application/json")
+ public ResponseEntity> findAgentById(@PathVariable long agentId)
+ {
+ Agent agent = agentServices.findAgentById(agentId);
+ return new ResponseEntity<>(agent, HttpStatus.OK);
+ }
+
+
+ // DAY 3 STRETCH
+ // DELETE /agents/unassigned/{agentcode}
+ // http://localhost:2019/agents/unassigned/8
+ @DeleteMapping(value = "/unassigned/{agentcode}")
+ public ResponseEntity> deleteUnassignedAgentsById(@PathVariable long agentcode)
+ {
+ agentServices.delete(agentcode);
+ return new ResponseEntity<>(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..58bbe8998
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/controllers/CustomerController.java
@@ -0,0 +1,106 @@
+package com.lambdaschool.javaorders.controllers;
+
+
+import com.lambdaschool.javaorders.models.Customer;
+import com.lambdaschool.javaorders.services.CustomerServices;
+import com.lambdaschool.javaorders.views.OrderCount;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
+
+import javax.validation.Valid;
+import java.net.URI;
+import java.util.List;
+
+@RestController
+@RequestMapping("/customers")
+public class CustomerController {
+
+
+ @Autowired
+ CustomerServices customerServices;
+
+ // http://localhost:2019/customers/orders
+ @GetMapping(value = "/orders", produces = "application/json")
+ public ResponseEntity> findAllCustomerOrders()
+ {
+ List orderList = customerServices.findAllCustomerOrders();
+ return new ResponseEntity<>(orderList, HttpStatus.OK);
+ }
+
+// http://localhost:2019/customers/customer/7
+// http://localhost:2019/customers/customer/77
+ @GetMapping(value = "/customer/{customerID}", produces = "application/json")
+ public ResponseEntity> findCustomerByID(@PathVariable long customerID)
+ {
+ Customer c = customerServices.findCustomerByID(customerID);
+ return new ResponseEntity<>(c, HttpStatus.OK);
+ }
+
+ // http://localhost:2019/customers/namelike/mes
+ // http://localhost:2019/customers/namelike/cin
+ @GetMapping(value = "/namelike/{keyword}", produces = "application/json")
+ public ResponseEntity> findCustomerByName(@PathVariable String keyword)
+ {
+ List customer = customerServices.findCustomerByKeyword(keyword);
+ return new ResponseEntity<>(customer, HttpStatus.OK);
+ }
+
+ // http://localhost:2019/customers/orders/count
+ @GetMapping(value = "/orders/count", produces = "application/json")
+ public ResponseEntity> findOrdercount()
+ {
+ List list = customerServices.findOrderCount();
+ return new ResponseEntity<>(list, HttpStatus.OK);
+ }
+
+
+ // POST /customers/customer - Adds a new customer including any new orders
+ // http://localhost:2019/customers/customer
+ @PostMapping(value = "/customer", consumes = "application/json", produces = "application/json")
+ public ResponseEntity> addNewCustomer(@Valid @RequestBody Customer newCustomer)
+ {
+ newCustomer.setCustcode(0);
+ newCustomer = customerServices.save(newCustomer);
+
+ HttpHeaders responseHeaders = new HttpHeaders();
+ URI newCustomerURI = ServletUriComponentsBuilder.fromCurrentRequest()
+ .path("/{custcode}")
+ .buildAndExpand(newCustomer.getCustcode())
+ .toUri();
+ responseHeaders.setLocation(newCustomerURI);
+ return new ResponseEntity<>(null, responseHeaders, HttpStatus.CREATED);
+ }
+
+ // PUT /customers/customer/{custcode} - completely replaces the customer record including associated orders with the provided data
+ // PUT http://localhost:2019/customers/customer/19
+ @PutMapping(value = "/customer/{custid}", consumes = "application/json", produces = "application/json")
+ public ResponseEntity> updateFullCustomer(@PathVariable long custid, @Valid @RequestBody Customer updateCustomer)
+ {
+ updateCustomer.setCustcode(custid);
+ updateCustomer = customerServices.save(updateCustomer);
+ return new ResponseEntity<>(null, HttpStatus.OK);
+ }
+
+ // PATCH /customers/customer/{custcode} - updates customers with the new data. Only the new data is to be sent from the frontend client.
+ // PATCH http://localhost:2019/customers/customer/19
+ @PatchMapping(value = "/customer/{custcode}", consumes = "application/json", produces = "application/json")
+ public ResponseEntity> updatePartRestaurant(@PathVariable long custcode, @RequestBody Customer updateCustomer)
+ {
+ updateCustomer = customerServices.update(updateCustomer, custcode);
+ return new ResponseEntity<>(null, HttpStatus.OK);
+ }
+
+ // DELETE /customers/customer/{custcode} - Deletes the given customer including any associated orders
+ // DELETE http://localhost:2019/customers/customer/54
+ @DeleteMapping(value = "/customer/{custcode}")
+ public ResponseEntity> deleteCustomerById(@PathVariable long custcode)
+ {
+ customerServices.delete(custcode);
+ return new ResponseEntity<>(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..6e2b079ee
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/controllers/OrderController.java
@@ -0,0 +1,78 @@
+package com.lambdaschool.javaorders.controllers;
+
+import com.lambdaschool.javaorders.models.Customer;
+import com.lambdaschool.javaorders.models.Order;
+import com.lambdaschool.javaorders.services.OrderServices;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
+
+import javax.validation.Valid;
+import java.net.URI;
+import java.util.List;
+
+@RestController
+@RequestMapping("/orders")
+public class OrderController {
+
+ @Autowired
+ OrderServices orderServices;
+
+ // http://localhost:2019/orders/order/7
+ @GetMapping(value = "/order/{value}", produces = "application/json")
+ public ResponseEntity> findOrderById(@PathVariable long value)
+ {
+ Order order = orderServices.findOrderById(value);
+ return new ResponseEntity<>(order, HttpStatus.OK);
+ }
+
+ // Stretch Goals
+ // http://localhost:2019/orders/advanceamount
+ @GetMapping(value = "/advanceamount/{amount}", produces = "application/json")
+ public ResponseEntity> getCustAdvanceAmt(@PathVariable double amount)
+ {
+ List list = orderServices.getCustAdvanceAmt(amount);
+ return new ResponseEntity<>(list, HttpStatus.OK);
+ }
+
+
+ // POST /orders/order - adds a new order to an existing customer
+ // http://localhost:2019/orders/order
+ @PostMapping(value = "order", consumes = "application/json", produces = "application/json")
+ public ResponseEntity> addNewOrder(@Valid @RequestBody Order newOrder)
+ {
+ newOrder.setOrdnum(0);
+ newOrder = orderServices.save(newOrder);
+
+ HttpHeaders responseHeaders = new HttpHeaders();
+ URI newOrderURI = ServletUriComponentsBuilder.fromCurrentRequest()
+ .path("/{ordnum}")
+ .buildAndExpand(newOrder.getOrdnum())
+ .toUri();
+ responseHeaders.setLocation((newOrderURI));
+ return new ResponseEntity<>(null, responseHeaders, HttpStatus.CREATED);
+ }
+
+ // PUT /orders/order/{ordernum} - completely replaces the given order record
+ // PUT http://localhost:2019/orders/order/63
+ @PutMapping(value = "/order/{ordernum}", consumes = "application/json", produces = "application/json")
+ public ResponseEntity> updateFullOrder(@PathVariable long ordernum, @Valid @RequestBody Order updateOrder)
+ {
+ updateOrder.setOrdnum(ordernum);
+ updateOrder = orderServices.save(updateOrder);
+ return new ResponseEntity<>(null, HttpStatus.OK);
+ }
+
+ // DELETE /orders/order/{ordernum} - deletes the given order
+ // DELETE http://localhost:2019/orders/order/58
+ @DeleteMapping(value = "/order/{ordernum}")
+ public ResponseEntity> deleteOrderById(@PathVariable long ordernum)
+ {
+ orderServices.delete(ordernum);
+ return new ResponseEntity<>(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..f5c52732c
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/models/Agent.java
@@ -0,0 +1,99 @@
+package com.lambdaschool.javaorders.models;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@Table(name = "agents")
+public class Agent {
+// AGENTCODE primary key, not null Long
+// AGENTNAME string
+// WORKINGAREA string
+// COMMISSION double
+// PHONE string
+// COUNTRY string
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ 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)
+ @JsonIgnoreProperties(value = "agent", allowSetters = true)
+ private List customers = new ArrayList<>();
+
+ public Agent() {
+ }
+
+ public Agent(String agentname, String workingarea, double commission, String phone, String country) {
+ this.agentname = agentname;
+ this.workingarea = workingarea;
+ this.commission = commission;
+ 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 List getCustomers() {
+ return customers;
+ }
+
+ public void setCustomers(List 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..c2a90031b
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/models/Customer.java
@@ -0,0 +1,201 @@
+package com.lambdaschool.javaorders.models;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@Table(name = "customers")
+public class Customer {
+
+// CUSTCODE primary key, not null Long
+// CUSTNAME String, not null
+// CUSTCITY String
+// WORKINGAREA String
+// CUSTCOUNTRY String
+// GRADE String
+// OPENINGAMT double
+// RECEIVEAMT double
+// PAYMENTAMT double
+// OUTSTANDINGAMT double
+// PHONE String
+// AGENTCODE Long foreign key (one agent to many customers) not null
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long custcode;
+
+ @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)
+ @JsonIgnoreProperties(value = "customers", allowSetters = true)
+ private Agent agent;
+
+ @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, orphanRemoval = true)
+ @JsonIgnoreProperties(value = "customer", allowSetters = true)
+ private List orders = new ArrayList<>();
+
+ public Customer() {
+ }
+
+ public Customer(String custname, String custcity, String workingarea, String custcountry, String grade, double openingamt, double receiveamt, double paymentamt, double outstandingamt, String phone) {
+ 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;
+ }
+
+ 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;
+ }
+
+ @Transient
+ @JsonIgnoreProperties(value = "hasvalueforopeningamt")
+ public boolean hasvalueforopeningamt = false;
+ public double getOpeningamt() {
+ return openingamt;
+ }
+
+ public void setOpeningamt(double openingamt) {
+ this.openingamt = openingamt;
+ hasvalueforopeningamt = true;
+ }
+
+ @Transient
+ @JsonIgnoreProperties(value = "hasvalueforreceiveamt")
+ public boolean hasvalueforreceiveamt = false;
+ public double getReceiveamt() {
+ return receiveamt;
+ }
+
+ public void setReceiveamt(double receiveamt) {
+ this.receiveamt = receiveamt;
+ hasvalueforreceiveamt = true;
+ }
+
+ @Transient
+ @JsonIgnoreProperties(value = "hasvalueforpaymentamt")
+ public boolean hasvalueforpaymentamt = false;
+ public double getPaymentamt() {
+ return paymentamt;
+ }
+
+ public void setPaymentamt(double paymentamt) {
+ this.paymentamt = paymentamt;
+ hasvalueforpaymentamt = true;
+ }
+
+ @Transient
+ @JsonIgnoreProperties(value = "hasvalueforoutstandingamt")
+ public boolean hasvalueforoutstandingamt = false;
+ public double getOutstandingamt() {
+ return outstandingamt;
+ }
+
+ public void setOutstandingamt(double outstandingamt) {
+ this.outstandingamt = outstandingamt;
+ hasvalueforoutstandingamt = true;
+ }
+
+ 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 List getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List 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..5783d0864
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/models/Order.java
@@ -0,0 +1,96 @@
+package com.lambdaschool.javaorders.models;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import javax.persistence.*;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+@Table(name = "orders")
+public class Order {
+// ORDNUM primary key, not null Long
+// ORDAMOUNT double
+// ADVANCEAMOUNT double
+// CUSTCODE Long foreign key (one customer to many orders) not null
+// ORDERDESCRIPTION String
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long ordnum;
+
+ private double ordamount;
+ private double advanceamount;
+
+ @ManyToOne
+ @JoinColumn(name = "custcode", nullable = false)
+ @JsonIgnoreProperties(value = "orders", allowSetters = true)
+ private Customer customer;
+
+ private String orderdescription;
+
+ @ManyToMany
+ @JoinTable(name = "orderspayments",
+ joinColumns = @JoinColumn(name = "ordnum"),
+ inverseJoinColumns = @JoinColumn(name = "paymentid"))
+ @JsonIgnoreProperties(value = "orders", allowSetters = true)
+ 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 ordernum) {
+ this.ordnum = ordernum;
+ }
+
+ 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;
+ }
+
+}
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..4aa0cc131
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/models/Payment.java
@@ -0,0 +1,58 @@
+package com.lambdaschool.javaorders.models;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import javax.persistence.*;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+@Table(name = "payments")
+public class Payment {
+// PAYMENTID primary key, not null long
+// TYPE String not null
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long paymentid;
+
+ @Column(nullable = false, unique = true)
+ private String type;
+
+ @ManyToMany(mappedBy = "payments")
+ @JsonIgnoreProperties(value = "payments", allowSetters = true)
+ 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/AgentsRepository.java b/src/main/java/com/lambdaschool/javaorders/repositories/AgentsRepository.java
new file mode 100644
index 000000000..ff0950a8e
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/repositories/AgentsRepository.java
@@ -0,0 +1,7 @@
+package com.lambdaschool.javaorders.repositories;
+
+import com.lambdaschool.javaorders.models.Agent;
+import org.springframework.data.repository.CrudRepository;
+
+public interface AgentsRepository extends CrudRepository {
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/repositories/CustomersRepository.java b/src/main/java/com/lambdaschool/javaorders/repositories/CustomersRepository.java
new file mode 100644
index 000000000..bf9f9a01f
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/repositories/CustomersRepository.java
@@ -0,0 +1,20 @@
+package com.lambdaschool.javaorders.repositories;
+
+import com.lambdaschool.javaorders.models.Customer;
+import com.lambdaschool.javaorders.views.OrderCount;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+
+import java.util.List;
+
+public interface CustomersRepository extends CrudRepository {
+
+ List findByCustnameContainingIgnoringCase(String keyword);
+
+ @Query(value = "SELECT c.custname name, count(o.ordnum) ordercount " +
+ "FROM customers c LEFT JOIN orders o " +
+ "ON c.custcode = o.custcode " +
+ "GROUP BY name " +
+ "ORDER BY ordercount DESC, name", nativeQuery = true)
+ List findOrderCount();
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/repositories/OrdersRepository.java b/src/main/java/com/lambdaschool/javaorders/repositories/OrdersRepository.java
new file mode 100644
index 000000000..80a57c16c
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/repositories/OrdersRepository.java
@@ -0,0 +1,10 @@
+package com.lambdaschool.javaorders.repositories;
+
+import com.lambdaschool.javaorders.models.Order;
+import org.springframework.data.repository.CrudRepository;
+
+import java.util.List;
+
+public interface OrdersRepository extends CrudRepository {
+ List findByAdvanceamountGreaterThan(double amount);
+}
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..65ac90064
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/repositories/PaymentRepository.java
@@ -0,0 +1,7 @@
+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/AgentServices.java b/src/main/java/com/lambdaschool/javaorders/services/AgentServices.java
new file mode 100644
index 000000000..e9d111cca
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/services/AgentServices.java
@@ -0,0 +1,11 @@
+package com.lambdaschool.javaorders.services;
+
+import com.lambdaschool.javaorders.models.Agent;
+
+public interface AgentServices {
+ Agent save(Agent agent);
+
+ Agent findAgentById(long agentId);
+
+ void delete(long agentcode);
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/services/AgentServicesImplementation.java b/src/main/java/com/lambdaschool/javaorders/services/AgentServicesImplementation.java
new file mode 100644
index 000000000..6ed9fc8e5
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/services/AgentServicesImplementation.java
@@ -0,0 +1,46 @@
+package com.lambdaschool.javaorders.services;
+
+import com.lambdaschool.javaorders.models.Agent;
+import com.lambdaschool.javaorders.repositories.AgentsRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityExistsException;
+import javax.persistence.EntityNotFoundException;
+
+@Transactional
+@Service(value = "agentServices")
+public class AgentServicesImplementation implements AgentServices{
+ @Autowired
+ AgentsRepository agentrepos;
+
+ @Override
+ public Agent findAgentById(long agentId) {
+ return agentrepos.findById(agentId)
+ .orElseThrow(() -> new EntityNotFoundException("Agent " + agentId + " Was not found"));
+ }
+
+ @Transactional
+ @Override
+ public Agent save(Agent agent) {
+ return agentrepos.save(agent);
+ }
+
+ @Transactional
+ @Override
+ public void delete(long agentcode) {
+ if(agentrepos.findById(agentcode).isPresent())
+ {
+ Agent a = findAgentById(agentcode);
+ if(a.getCustomers().size() == 0)
+ {
+ agentrepos.deleteById(agentcode);
+ } else {
+ throw new EntityExistsException("Found " + a.getCustomers().size() + " customers for agent " + agentcode + ". Agent cannot be removed.");
+ }
+ } else {
+ throw new EntityNotFoundException("Agent " + agentcode + " not found!");
+ }
+ }
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/services/CustomerServices.java b/src/main/java/com/lambdaschool/javaorders/services/CustomerServices.java
new file mode 100644
index 000000000..aa90e48cb
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/services/CustomerServices.java
@@ -0,0 +1,22 @@
+package com.lambdaschool.javaorders.services;
+
+import com.lambdaschool.javaorders.models.Customer;
+import com.lambdaschool.javaorders.views.OrderCount;
+
+import java.util.List;
+
+public interface CustomerServices {
+ Customer save(Customer customer);
+
+ List findAllCustomerOrders();
+
+ Customer findCustomerByID(long customerID);
+
+ List findCustomerByKeyword(String keyword);
+
+ List findOrderCount();
+
+ Customer update(Customer customer, long custcode);
+
+ void delete(long custcode);
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/services/CustomerServicesImplementation.java b/src/main/java/com/lambdaschool/javaorders/services/CustomerServicesImplementation.java
new file mode 100644
index 000000000..82879d2ed
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/services/CustomerServicesImplementation.java
@@ -0,0 +1,178 @@
+package com.lambdaschool.javaorders.services;
+
+import com.lambdaschool.javaorders.models.Customer;
+import com.lambdaschool.javaorders.models.Order;
+import com.lambdaschool.javaorders.models.Payment;
+import com.lambdaschool.javaorders.repositories.AgentsRepository;
+import com.lambdaschool.javaorders.repositories.CustomersRepository;
+import com.lambdaschool.javaorders.repositories.PaymentRepository;
+import com.lambdaschool.javaorders.views.OrderCount;
+import org.aspectj.weaver.ast.Or;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityNotFoundException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Transactional
+@Service(value = "customerServices")
+public class CustomerServicesImplementation implements CustomerServices{
+ @Autowired
+ CustomersRepository customerrepos;
+
+ @Autowired
+ PaymentRepository paymentrepos;
+
+ @Override
+ public List findAllCustomerOrders() {
+ List orderList = new ArrayList<>();
+ customerrepos.findAll().iterator().forEachRemaining(orderList::add);
+ return orderList;
+ }
+
+ @Override
+ public Customer findCustomerByID(long customerID) {
+ return customerrepos.findById(customerID)
+ .orElseThrow(() -> new EntityNotFoundException("Customer " + customerID + " not found"));
+ }
+
+ @Override
+ public List findCustomerByKeyword(String keyword) {
+ List list = customerrepos.findByCustnameContainingIgnoringCase(keyword);
+ return list;
+ }
+
+ @Override
+ public List findOrderCount() {
+ List list = customerrepos.findOrderCount();
+ return list;
+ }
+
+ // --------- save ----------
+ @Transactional
+ @Override
+ public Customer save(Customer customer) {
+ Customer newCustomer = new Customer();
+
+ if (customer.getCustcode() != 0)
+ {
+ findCustomerByID(customer.getCustcode());
+ newCustomer.setCustcode(customer.getCustcode());
+ }
+
+ newCustomer.setCustcity(customer.getCustcity());
+ newCustomer.setCustcountry(customer.getCustcountry());
+ newCustomer.setCustname(customer.getCustname());
+ newCustomer.setGrade(customer.getGrade());
+ newCustomer.setOpeningamt(customer.getOpeningamt());
+ newCustomer.setOutstandingamt(customer.getOutstandingamt());
+ newCustomer.setPaymentamt(customer.getPaymentamt());
+ newCustomer.setPhone(customer.getPhone());
+ newCustomer.setReceiveamt(customer.getReceiveamt());
+ newCustomer.setWorkingarea(customer.getWorkingarea());
+ newCustomer.setAgent(customer.getAgent());
+
+ newCustomer.getOrders().clear();
+ for (Order o : customer.getOrders())
+ {
+ Order newOrder = new Order(o.getOrdamount(), o.getAdvanceamount(), newCustomer, o.getOrderdescription());
+
+ for(Payment p : o.getPayments())
+ {
+ Payment newPayment = paymentrepos.findById(p.getPaymentid())
+ .orElseThrow(() -> new EntityNotFoundException("Payment " + p.getPaymentid() + " not found!"));
+
+ newOrder.getPayments().add(newPayment);
+ }
+
+ newCustomer.getOrders().add(newOrder);
+ }
+
+ return customerrepos.save(newCustomer);
+ }
+
+ // ------ update --------
+ @Transactional
+ @Override
+ public Customer update(Customer customer, long custcode) {
+
+ Customer updateCustomer = findCustomerByID(custcode);
+
+ if(customer.getCustcity() != null)
+ {
+ updateCustomer.setCustcity(customer.getCustcity());
+ }
+ if(customer.getCustcountry() != null)
+ {
+ updateCustomer.setCustcountry(customer.getCustcountry());
+ }
+ if(customer.getCustname() != null)
+ {
+ updateCustomer.setCustname(customer.getCustname());
+ }
+ if(customer.getGrade() != null)
+ {
+ updateCustomer.setGrade(customer.getGrade());
+ }
+ if(customer.hasvalueforopeningamt)
+ {
+ updateCustomer.setOpeningamt(customer.getOpeningamt());
+ }
+ if(customer.hasvalueforoutstandingamt)
+ {
+ updateCustomer.setOutstandingamt(customer.getOutstandingamt());
+ }
+ if(customer.hasvalueforpaymentamt)
+ {
+ updateCustomer.setPaymentamt(customer.getPaymentamt());
+ }
+ if(customer.hasvalueforreceiveamt)
+ {
+ updateCustomer.setReceiveamt(customer.getReceiveamt());
+ }
+ if(customer.getPhone() != null)
+ {
+ updateCustomer.setPhone(customer.getPhone());
+ }
+ if(customer.getWorkingarea() != null)
+ {
+ updateCustomer.setWorkingarea(customer.getWorkingarea());
+ }
+ if(customer.getAgent() != null)
+ {
+ updateCustomer.setAgent(customer.getAgent());
+ }
+
+ if(customer.getOrders().size() > 0) {
+ updateCustomer.getOrders().clear();
+ for (Order o : customer.getOrders()) {
+ Order newOrder = new Order(o.getOrdamount(), o.getAdvanceamount(), updateCustomer, o.getOrderdescription());
+ if(o.getPayments().size() > 0) {
+ for (Payment p : o.getPayments()) {
+ Payment newPayment = paymentrepos.findById(p.getPaymentid())
+ .orElseThrow(() -> new EntityNotFoundException("Payment " + p.getPaymentid() + " not found!"));
+
+ newOrder.getPayments().add(newPayment);
+ }
+ }
+ updateCustomer.getOrders().add(newOrder);
+ }
+ }
+
+ return customerrepos.save(updateCustomer);
+ }
+
+ // ------ delete -------
+ @Transactional
+ @Override
+ public void delete(long custcode) {
+ if(customerrepos.findById(custcode).isPresent())
+ {
+ customerrepos.deleteById((custcode));
+ } else {
+ throw new EntityNotFoundException("Customer " + custcode + " not found!");
+ }
+ }
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/services/OrderServices.java b/src/main/java/com/lambdaschool/javaorders/services/OrderServices.java
new file mode 100644
index 000000000..8bea67d4a
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/services/OrderServices.java
@@ -0,0 +1,15 @@
+package com.lambdaschool.javaorders.services;
+
+import com.lambdaschool.javaorders.models.Order;
+
+import java.util.List;
+
+public interface OrderServices {
+ Order save(Order order);
+
+ Order findOrderById(long value);
+
+ List getCustAdvanceAmt(double amount);
+
+ void delete(long ordernum);
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/services/OrderServicesImplementation.java b/src/main/java/com/lambdaschool/javaorders/services/OrderServicesImplementation.java
new file mode 100644
index 000000000..40596bc72
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/services/OrderServicesImplementation.java
@@ -0,0 +1,69 @@
+package com.lambdaschool.javaorders.services;
+
+import com.lambdaschool.javaorders.models.Order;
+import com.lambdaschool.javaorders.models.Payment;
+import com.lambdaschool.javaorders.repositories.OrdersRepository;
+import com.lambdaschool.javaorders.repositories.PaymentRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityNotFoundException;
+import java.util.List;
+
+@Transactional
+@Service(value = "orderServices")
+public class OrderServicesImplementation implements OrderServices{
+ @Autowired
+ OrdersRepository orderrepos;
+
+ @Autowired
+ PaymentRepository paymentrepos;
+
+ @Override
+ public Order findOrderById(long value) {
+ return orderrepos.findById(value)
+ .orElseThrow(() -> new EntityNotFoundException("Order " + value + " was not found"));
+ }
+
+ @Override
+ public List getCustAdvanceAmt(double amount) {
+ return orderrepos.findByAdvanceamountGreaterThan(amount);
+ }
+
+ @Transactional
+ @Override
+ public Order save(Order order) {
+ Order newOrder = new Order();
+ if(order.getOrdnum() != 0 )
+ {
+ findOrderById(order.getOrdnum());
+ newOrder.setOrdnum((order.getOrdnum()));
+ }
+ newOrder.setAdvanceamount(order.getAdvanceamount());
+ newOrder.setOrdamount(order.getOrdamount());
+ newOrder.setOrderdescription(order.getOrderdescription());
+ newOrder.setCustomer(order.getCustomer());
+
+ newOrder.getPayments().clear();
+ for(Payment p : order.getPayments())
+ {
+ Payment newPayment = paymentrepos.findById(p.getPaymentid())
+ .orElseThrow(() -> new EntityNotFoundException("Payment " + p.getPaymentid() + " not found!"));
+
+ newOrder.getPayments().add(newPayment);
+ }
+ return orderrepos.save(newOrder);
+ }
+
+ @Transactional
+ @Override
+ public void delete(long ordernum) {
+ if(orderrepos.findById(ordernum).isPresent())
+ {
+ orderrepos.deleteById(ordernum);
+ } else {
+ throw new EntityNotFoundException("Order " + ordernum + " not found!");
+ }
+ }
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/services/PaymentServices.java b/src/main/java/com/lambdaschool/javaorders/services/PaymentServices.java
new file mode 100644
index 000000000..11bfc3369
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/services/PaymentServices.java
@@ -0,0 +1,7 @@
+package com.lambdaschool.javaorders.services;
+
+import com.lambdaschool.javaorders.models.Payment;
+
+public interface PaymentServices {
+ Payment save(Payment payment);
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/services/PaymentServicesImplementation.java b/src/main/java/com/lambdaschool/javaorders/services/PaymentServicesImplementation.java
new file mode 100644
index 000000000..1fb3c2db9
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/services/PaymentServicesImplementation.java
@@ -0,0 +1,17 @@
+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 PaymentServicesImplementation implements PaymentServices{
+ @Autowired
+ PaymentRepository paymentrepos;
+
+ @Override
+ public Payment save(Payment payment) {
+ return paymentrepos.save(payment);
+ }
+}
diff --git a/src/main/java/com/lambdaschool/javaorders/services/SeedData.java b/src/main/java/com/lambdaschool/javaorders/services/SeedData.java
new file mode 100644
index 000000000..472873d54
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/services/SeedData.java
@@ -0,0 +1,569 @@
+package com.lambdaschool.javaorders.services;
+
+import com.github.javafaker.Faker;
+import com.github.javafaker.Address;
+import com.github.javafaker.GameOfThrones;
+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.AgentsRepository;
+import com.lambdaschool.javaorders.repositories.CustomersRepository;
+import com.lambdaschool.javaorders.repositories.OrdersRepository;
+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;
+
+import java.util.*;
+
+
+@Transactional
+@Component
+public class SeedData implements CommandLineRunner {
+ Faker faker = new Faker();
+
+
+
+
+ /**
+ * Connects the customer table to this SeedData method
+ */
+ @Autowired
+ private CustomersRepository custrepos;
+
+ /**
+ * Connects the agents table to this SeedData method
+ */
+ @Autowired
+ private AgentsRepository agentrepos;
+
+ /**
+ * Connects the orders table to this SeedData method
+ */
+ @Autowired
+ private OrdersRepository 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.getPayments().add(pay1);
+
+ Order o02 = new Order(3000.00,
+ 500.00,
+ c19,
+ "SOD");
+ o02.getPayments().add(pay2);
+
+ Order o03 = new Order(4500.00,
+ 900.00,
+ c07,
+ "SOD");
+ o03.getPayments().add(pay3);
+ o03.getPayments().add(pay2);
+
+ Order o04 = new Order(2000.00,
+ 0.00,
+ c16,
+ "SOD");
+ o04.getPayments().add(pay4);
+
+ Order o05 = new Order(4000.00,
+ 600.00,
+ c22,
+ "SOD");
+ o05.getPayments().add(pay2);
+
+ Order o06 = new Order(2000.00,
+ 0.00,
+ c12,
+ "SOD");
+ o06.getPayments().add(pay3);
+
+ Order o07 = new Order(3500.00,
+ 2000.00,
+ c02,
+ "SOD");
+ o07.getPayments().add(pay4);
+
+ Order o08 = new Order(2500.00,
+ 400.00,
+ c03,
+ "SOD");
+ o08.getPayments().add(pay1);
+
+ Order o09 = new Order(500.00,
+ 0.00,
+ c23,
+ "SOD");
+ o09.getPayments().add(pay3);
+
+ Order o10 = new Order(4000.00,
+ 700.00,
+ c07,
+ "SOD");
+ o10.getPayments().add(pay4);
+
+ Order o11 = new Order(1500.00,
+ 600.00,
+ c08,
+ "SOD");
+ o11.getPayments().add(pay2);
+
+ Order o12 = new Order(2500.00,
+ 0.00,
+ c25,
+ "SOD");
+ o12.getPayments().add(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);
+
+ List agents = new ArrayList<>();
+ agentrepos.findAll().iterator().forEachRemaining(agents::add);
+ for (int i = 0; i < 100; i++) {
+ int grade = new Random().nextInt(12);
+ int agentId = new Random().nextInt(agents.size());
+ Customer c = new Customer(
+ faker.gameOfThrones().character(),
+ faker.gameOfThrones().city(),
+ faker.gameOfThrones().city(),
+ faker.address().country(),
+ Integer.toString(grade),
+ Double.parseDouble(faker.commerce().price()),
+ Double.parseDouble(faker.commerce().price()),
+ Double.parseDouble(faker.commerce().price()),
+ Double.parseDouble(faker.commerce().price()),
+ faker.phoneNumber().phoneNumber(),
+ agents.get(agentId));
+ custrepos.save(c);
+ for(int x = 0; x < new Random().nextInt(10) ; x++){
+ Order newOrder = new Order(
+ Double.parseDouble(faker.commerce().price()),
+ Double.parseDouble(faker.commerce().price()),
+ c,
+ "SOD"
+ );
+ newOrder.getPayments().add(pay1);
+ newOrder.getPayments().add(pay2);
+ ordersrepos.save(newOrder);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/lambdaschool/javaorders/views/OrderCount.java b/src/main/java/com/lambdaschool/javaorders/views/OrderCount.java
new file mode 100644
index 000000000..0b869a9e7
--- /dev/null
+++ b/src/main/java/com/lambdaschool/javaorders/views/OrderCount.java
@@ -0,0 +1,6 @@
+package com.lambdaschool.javaorders.views;
+
+public interface OrderCount {
+ String getName();
+ int getOrdercount();
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 000000000..9e63c41e2
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,26 @@
+# 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
+# data.sql
+spring.datasource.initialization-mode=never
+#
+# Good for production!
+# spring.jpa.hibernate.ddl-auto=update
+# spring.datasource.initialization-mode=never
+
diff --git a/data.sql b/src/main/resources/data.sql
similarity index 100%
rename from data.sql
rename to src/main/resources/data.sql
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..4381864b6
--- /dev/null
+++ b/src/test/java/com/lambdaschool/javaorders/JavaordersApplicationTests.java
@@ -0,0 +1,13 @@
+package com.lambdaschool.javaorders;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class JavaordersApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}