Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 31 additions & 32 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -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/
115 changes: 115 additions & 0 deletions .mvn/wrapper/MavenWrapperDownloader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
/*
* 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 ();
}

}
Binary file added .mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
93 changes: 49 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ A student that completes this project shows that they can:

## Introduction

This is a basic database scheme with customers, orders, and sales agents. This Java Spring REST API application will provide the data modeling to support the application. This is part 1 of a 3 part application series.
This is a basic database scheme with customers, orders, and sales agents. This Java Spring REST API application will
provide the data modeling to support the application. This is part 1 of a 3 part application series.

### Database layout

Expand All @@ -19,76 +20,80 @@ The table layouts are as follows
![Image of Database Layout](java-orders-db.png)

* AGENTS
* AGENTCODE primary key, not null Long
* AGENTNAME string
* WORKINGAREA string
* COMMISSION double
* PHONE string
* COUNTRY string
* AGENTCODE primary key, not null Long
* AGENTNAME string
* WORKINGAREA string
* COMMISSION double
* PHONE string
* COUNTRY string

* CUSTOMERS
* 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
* 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

* ORDERS
* ORDNUM primary key, not null Long
* ORDAMOUNT double
* ADVANCEAMOUNT double
* CUSTCODE Long foreign key (one customer to many orders) not null
* ORDERDESCRIPTION String
* ORDNUM primary key, not null Long
* ORDAMOUNT double
* ADVANCEAMOUNT double
* CUSTCODE Long foreign key (one customer to many orders) not null
* ORDERDESCRIPTION String

* PAYMENTS
* PAYMENTID primary key, not null long
* TYPE String not null
* PAYMENTID primary key, not null long
* TYPE String not null

* ORDERSPAYMENTS (join table)
* ORDERNUM foreign key to ORDERS
* PAYMENTID foreign key to PAYMENTS.
* ORDERNUM foreign key to ORDERS
* PAYMENTID foreign key to PAYMENTS.

* Customers has a foreign key to Agents (AGENTCODE) this means:
* Customers has a Many to One relationship to Agents and
* Agents has a One to Many relationship to Customers
* Customers has a Many to One relationship to Agents and
* Agents has a One to Many relationship to Customers

* Orders has a foreign key to Customers (CUSTCODE)
* Orders has a Many to One relationship to Customers and
* Customers has a One to Many relationship to Orders
* Orders has a Many to One relationship to Customers and
* Customers has a One to Many relationship to Orders

* Orders has a many to many relationship with payments
* multiple orders can use the same payment type and an order can have multiple payment types.
* For example, you can use both gift card and credit card to pay for an order.
* multiple orders can use the same payment type and an order can have multiple payment types.
* For example, you can use both gift card and credit card to pay for an order.

### MVP and Stretch Goal

The database will be available from the H2 Console. Each table will contain the appropriate data.

## Instructions

* [ ] Please fork and clone this repository. This repository does not have a starter project, so create one inside of the cloned repository folder. Regularly commit and push your code as appropriate.
* [ ] Please fork and clone this repository. This repository does not have a starter project, so create one inside of
the cloned repository folder. Regularly commit and push your code as appropriate.

### MVP

* [ ] Create the entities needed to store this data.
* [ ] Seed the database
* [ ] A data.sql file has been provided with seed data. You can use this class directly or modify it to fit your models. However, the data found in the file is the seed data to use!
* [ ] A SeedData.java file has been provided seed data. You can use this class directly or modify it to fit your models. However, the data found in the file is the seed data to use!
* [ ] Your application should be able to easily switch between seeding with the data.sql data or the data from SeedData.java.
* [ ] A data.sql file has been provided with seed data. You can use this class directly or modify it to fit your
models. However, the data found in the file is the seed data to use!
* [ ] A SeedData.java file has been provided seed data. You can use this class directly or modify it to fit your
models. However, the data found in the file is the seed data to use!
* [ ] Your application should be able to easily switch between seeding with the data.sql data or the data from
SeedData.java.

### Stretch Goal

* [ ] Implement Javafaker
* [ ] Create around 100 new customers
* [ ] Randomize as much of the data as possible
* [ ] You can assign all new customers to the same agent
* [ ] Randomly assign 0 - 10 orders to each customer
* [ ] Create around 100 new customers
* [ ] Randomize as much of the data as possible
* [ ] All orders can be of the same payment type
* [ ] You can assign all new customers to the same agent
* [ ] Randomly assign 0 - 10 orders to each customer
* [ ] Randomize as much of the data as possible
* [ ] All orders can be of the same payment type
Loading