From d896dddd09d0a22639376010ad3cc10e9a69ce7c Mon Sep 17 00:00:00 2001 From: L-Steinmacher Date: Tue, 13 Apr 2021 13:06:21 -0700 Subject: [PATCH 1/4] first commit --- HELP.md | 22 + README.md | 1339 +---------------- SeedData.java | 635 ++++++++ data.sql | 93 ++ mvnw | 310 ++++ mvnw.cmd | 182 +++ pom.xml | 61 + .../orders/OrdersApplication.java | 16 + .../com/lambdaschool/orders/SeedData.java | 70 + .../orders/config/H2ServerConfiguration.java | 72 + .../orders/controllers/AgentController.java | 19 + .../controllers/CustomerController.java | 30 + .../com/lambdaschool/orders/models/Agent.java | 106 ++ .../lambdaschool/orders/models/Customer.java | 185 +++ .../com/lambdaschool/orders/models/Order.java | 94 ++ .../lambdaschool/orders/models/Payment.java | 49 + .../orders/repositories/AgentRepository.java | 8 + .../repositories/CustomerRepository.java | 8 + .../orders/repositories/OrderRepository.java | 8 + .../repositories/PaymentRepository.java | 8 + .../orders/services/AgentServices.java | 8 + .../orders/services/AgentServicesImpl.java | 22 + .../orders/services/CustomerServices.java | 8 + .../orders/services/CustomerServicesImpl.java | 22 + .../orders/services/OrderServices.java | 8 + .../orders/services/OrderServicesImpl.java | 23 + .../orders/services/PaymentServices.java | 8 + .../orders/services/PaymentServicesImpl.java | 23 + src/main/resources/application.properties | 24 + src/main/resources/data.sql | 93 ++ .../orders/OrdersApplicationTests.java | 15 + target/classes/application.properties | 24 + target/classes/data.sql | 93 ++ 33 files changed, 2409 insertions(+), 1277 deletions(-) create mode 100644 HELP.md create mode 100644 SeedData.java create mode 100644 data.sql create mode 100755 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/com/lambdaschool/orders/OrdersApplication.java create mode 100644 src/main/java/com/lambdaschool/orders/SeedData.java create mode 100644 src/main/java/com/lambdaschool/orders/config/H2ServerConfiguration.java create mode 100644 src/main/java/com/lambdaschool/orders/controllers/AgentController.java create mode 100644 src/main/java/com/lambdaschool/orders/controllers/CustomerController.java create mode 100644 src/main/java/com/lambdaschool/orders/models/Agent.java create mode 100644 src/main/java/com/lambdaschool/orders/models/Customer.java create mode 100644 src/main/java/com/lambdaschool/orders/models/Order.java create mode 100644 src/main/java/com/lambdaschool/orders/models/Payment.java create mode 100644 src/main/java/com/lambdaschool/orders/repositories/AgentRepository.java create mode 100644 src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java create mode 100644 src/main/java/com/lambdaschool/orders/repositories/OrderRepository.java create mode 100644 src/main/java/com/lambdaschool/orders/repositories/PaymentRepository.java create mode 100644 src/main/java/com/lambdaschool/orders/services/AgentServices.java create mode 100644 src/main/java/com/lambdaschool/orders/services/AgentServicesImpl.java create mode 100644 src/main/java/com/lambdaschool/orders/services/CustomerServices.java create mode 100644 src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java create mode 100644 src/main/java/com/lambdaschool/orders/services/OrderServices.java create mode 100644 src/main/java/com/lambdaschool/orders/services/OrderServicesImpl.java create mode 100644 src/main/java/com/lambdaschool/orders/services/PaymentServices.java create mode 100644 src/main/java/com/lambdaschool/orders/services/PaymentServicesImpl.java create mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/data.sql create mode 100644 src/test/java/com/lambdaschool/orders/OrdersApplicationTests.java create mode 100644 target/classes/application.properties create mode 100644 target/classes/data.sql diff --git a/HELP.md b/HELP.md new file mode 100644 index 0000000..329c94b --- /dev/null +++ b/HELP.md @@ -0,0 +1,22 @@ +# Getting Started + +### Reference Documentation + +For further reference, please consider the following sections: + +* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html) +* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.4.4/maven-plugin/reference/html/) +* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.4.4/maven-plugin/reference/html/#build-image) +* [Spring Web](https://docs.spring.io/spring-boot/docs/2.4.4/reference/htmlsingle/#boot-features-developing-web-applications) +* [Spring Data JPA](https://docs.spring.io/spring-boot/docs/2.4.4/reference/htmlsingle/#boot-features-jpa-and-spring-data) +* [Spring Boot DevTools](https://docs.spring.io/spring-boot/docs/2.4.4/reference/htmlsingle/#using-boot-devtools) + +### Guides + +The following guides illustrate how to use some features concretely: + +* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/) +* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/) +* [Building REST services with Spring](https://spring.io/guides/tutorials/bookmarks/) +* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/) + diff --git a/README.md b/README.md index 41b20aa..f59594a 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,17 @@ -# Java Reading Orders +# Java Modeling Orders A student that completes this project shows that they can: -* perform CRUD operations on an RDBMS using JPA and Hibernate (reading) -* use JPA constructs to create advanced queries -* use the JsonIgnoreProperties annotation to prevent infinite loops -* use SQL, JPA and Hibernate to perform custom query operations on a RDBMS through a Spring Application +* perform CRUD operations on an RDBMS using JPA and Hibernate (data modeling) +* implement seed data using SQL statements +* explain and use Spring Data Relationships +* implement a data seeding class using JPA and Hibernate +* use H2 Console and H2 IntelliJ integration to explore data ## Introduction -This is a basic database scheme with customers, orders, and sales agents. This Java Spring REST API application will provide endpoints for clients to read various data sets contained in the application's data. - -This is Part 2 of a 3 Part project. - -* Part 1 can be found at [java-orders](https://github.com/LambdaSchool/java-orders.git) +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 @@ -22,1293 +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. - -Using the provided seed data, a successful application will return the following data based on the given endpoint. Expand the section of the endpoint to see the data that is returned. Note that the given id numbers used in these examples are for seed data using `data.sql`. Seed data using command line runner from `SeedData.java` will yield different ids! - -### MVP - -
-http://localhost:2019/customers/orders - -```JSON -[ - { - "custcode": 1, - "custname": "Holmes", - "custcity": "London", - "workingarea": "London", - "custcountry": "UK", - "grade": "2", - "openingamt": 6000.0, - "receiveamt": 5000.0, - "paymentamt": 7000.0, - "outstandingamt": 4000.0, - "phone": "BBBBBBB", - "agent": { - "agentcode": 3, - "agentname": "Alford", - "workingarea": "New York", - "commission": 0.12, - "phone": "044-25874365", - "country": "" - }, - "orders": [] - }, - { - "custcode": 2, - "custname": "Micheal", - "custcity": "New York", - "workingarea": "New York", - "custcountry": "USA", - "grade": "2", - "openingamt": 3000.0, - "receiveamt": 5000.0, - "paymentamt": 2000.0, - "outstandingamt": 6000.0, - "phone": "CCCCCCC", - "agent": { - "agentcode": 8, - "agentname": "Subbarao", - "workingarea": "Bangalore", - "commission": 0.14, - "phone": "077-12346674", - "country": "" - }, - "orders": [ - { - "ordnum": 7, - "ordamount": 3500.0, - "advanceamount": 2000.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 4, - "type": "Mobile Pay" - } - ] - } - ] - }, - { - "custcode": 3, - "custname": "Albert", - "custcity": "New York", - "workingarea": "New York", - "custcountry": "USA", - "grade": "3", - "openingamt": 5000.0, - "receiveamt": 7000.0, - "paymentamt": 6000.0, - "outstandingamt": 6000.0, - "phone": "BBBBSBB", - "agent": { - "agentcode": 8, - "agentname": "Subbarao", - "workingarea": "Bangalore", - "commission": 0.14, - "phone": "077-12346674", - "country": "" - }, - "orders": [ - { - "ordnum": 8, - "ordamount": 2500.0, - "advanceamount": 400.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 1, - "type": "Cash" - } - ] - } - ] - }, - { - "custcode": 4, - "custname": "Ravindran", - "custcity": "Bangalore", - "workingarea": "Bangalore", - "custcountry": "India", - "grade": "2", - "openingamt": 5000.0, - "receiveamt": 7000.0, - "paymentamt": 4000.0, - "outstandingamt": 8000.0, - "phone": "AVAVAVA", - "agent": { - "agentcode": 11, - "agentname": "Ivan", - "workingarea": "Torento", - "commission": 0.15, - "phone": "008-22544166", - "country": "" - }, - "orders": [] - }, - { - "custcode": 5, - "custname": "Cook", - "custcity": "London", - "workingarea": "London", - "custcountry": "UK", - "grade": "2", - "openingamt": 4000.0, - "receiveamt": 9000.0, - "paymentamt": 7000.0, - "outstandingamt": 6000.0, - "phone": "FSDDSDF", - "agent": { - "agentcode": 6, - "agentname": "Lucida", - "workingarea": "San Jose", - "commission": 0.12, - "phone": "044-52981425", - "country": "" - }, - "orders": [] - }, - { - "custcode": 6, - "custname": "Stuart", - "custcity": "London", - "workingarea": "London", - "custcountry": "UK", - "grade": "1", - "openingamt": 6000.0, - "receiveamt": 8000.0, - "paymentamt": 3000.0, - "outstandingamt": 11000.0, - "phone": "GFSGERS", - "agent": { - "agentcode": 3, - "agentname": "Alford", - "workingarea": "New York", - "commission": 0.12, - "phone": "044-25874365", - "country": "" - }, - "orders": [] - }, - { - "custcode": 7, - "custname": "Bolt", - "custcity": "New York", - "workingarea": "New York", - "custcountry": "USA", - "grade": "3", - "openingamt": 5000.0, - "receiveamt": 7000.0, - "paymentamt": 9000.0, - "outstandingamt": 3000.0, - "phone": "DDNRDRH", - "agent": { - "agentcode": 8, - "agentname": "Subbarao", - "workingarea": "Bangalore", - "commission": 0.14, - "phone": "077-12346674", - "country": "" - }, - "orders": [ - { - "ordnum": 3, - "ordamount": 4500.0, - "advanceamount": 900.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 3, - "type": "Credit Card" - }, - { - "paymentid": 2, - "type": "Gift Card" - } - ] - }, - { - "ordnum": 10, - "ordamount": 4000.0, - "advanceamount": 700.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 4, - "type": "Mobile Pay" - } - ] - } - ] - }, - { - "custcode": 8, - "custname": "Fleming", - "custcity": "Brisban", - "workingarea": "Brisban", - "custcountry": "Australia", - "grade": "2", - "openingamt": 7000.0, - "receiveamt": 7000.0, - "paymentamt": 9000.0, - "outstandingamt": 5000.0, - "phone": "NHBGVFC", - "agent": { - "agentcode": 5, - "agentname": "Santakumar", - "workingarea": "Chennai", - "commission": 0.14, - "phone": "007-22388644", - "country": "" - }, - "orders": [ - { - "ordnum": 11, - "ordamount": 1500.0, - "advanceamount": 600.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 2, - "type": "Gift Card" - } - ] - } - ] - }, - { - "custcode": 9, - "custname": "Jacks", - "custcity": "Brisban", - "workingarea": "Brisban", - "custcountry": "Australia", - "grade": "1", - "openingamt": 7000.0, - "receiveamt": 7000.0, - "paymentamt": 7000.0, - "outstandingamt": 7000.0, - "phone": "WERTGDF", - "agent": { - "agentcode": 5, - "agentname": "Santakumar", - "workingarea": "Chennai", - "commission": 0.14, - "phone": "007-22388644", - "country": "" - }, - "orders": [] - }, - { - "custcode": 10, - "custname": "Yearannaidu", - "custcity": "Chennai", - "workingarea": "Chennai", - "custcountry": "India", - "grade": "1", - "openingamt": 8000.0, - "receiveamt": 7000.0, - "paymentamt": 7000.0, - "outstandingamt": 8000.0, - "phone": "ZZZZBFV", - "agent": { - "agentcode": 10, - "agentname": "McDen", - "workingarea": "London", - "commission": 0.15, - "phone": "078-22255588", - "country": "" - }, - "orders": [] - }, - { - "custcode": 11, - "custname": "Sasikant", - "custcity": "Mumbai", - "workingarea": "Mumbai", - "custcountry": "India", - "grade": "1", - "openingamt": 7000.0, - "receiveamt": 11000.0, - "paymentamt": 7000.0, - "outstandingamt": 11000.0, - "phone": "147-25896312", - "agent": { - "agentcode": 2, - "agentname": "Alex", - "workingarea": "London", - "commission": 0.13, - "phone": "075-12458969", - "country": "" - }, - "orders": [] - }, - { - "custcode": 12, - "custname": "Ramanathan", - "custcity": "Chennai", - "workingarea": "Chennai", - "custcountry": "India", - "grade": "1", - "openingamt": 7000.0, - "receiveamt": 11000.0, - "paymentamt": 9000.0, - "outstandingamt": 9000.0, - "phone": "GHRDWSD", - "agent": { - "agentcode": 10, - "agentname": "McDen", - "workingarea": "London", - "commission": 0.15, - "phone": "078-22255588", - "country": "" - }, - "orders": [ - { - "ordnum": 6, - "ordamount": 2000.0, - "advanceamount": 0.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 3, - "type": "Credit Card" - } - ] - } - ] - }, - { - "custcode": 13, - "custname": "Avinash", - "custcity": "Mumbai", - "workingarea": "Mumbai", - "custcountry": "India", - "grade": "2", - "openingamt": 7000.0, - "receiveamt": 11000.0, - "paymentamt": 9000.0, - "outstandingamt": 9000.0, - "phone": "113-12345678", - "agent": { - "agentcode": 2, - "agentname": "Alex", - "workingarea": "London", - "commission": 0.13, - "phone": "075-12458969", - "country": "" - }, - "orders": [ - { - "ordnum": 1, - "ordamount": 1000.0, - "advanceamount": 600.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 1, - "type": "Cash" - } - ] - } - ] - }, - { - "custcode": 14, - "custname": "Winston", - "custcity": "Brisban", - "workingarea": "Brisban", - "custcountry": "Australia", - "grade": "1", - "openingamt": 5000.0, - "receiveamt": 8000.0, - "paymentamt": 7000.0, - "outstandingamt": 6000.0, - "phone": "AAAAAAA", - "agent": { - "agentcode": 5, - "agentname": "Santakumar", - "workingarea": "Chennai", - "commission": 0.14, - "phone": "007-22388644", - "country": "" - }, - "orders": [] - }, - { - "custcode": 15, - "custname": "Karl", - "custcity": "London", - "workingarea": "London", - "custcountry": "UK", - "grade": "0", - "openingamt": 4000.0, - "receiveamt": 6000.0, - "paymentamt": 7000.0, - "outstandingamt": 3000.0, - "phone": "AAAABAA", - "agent": { - "agentcode": 6, - "agentname": "Lucida", - "workingarea": "San Jose", - "commission": 0.12, - "phone": "044-52981425", - "country": "" - }, - "orders": [] - }, - { - "custcode": 16, - "custname": "Shilton", - "custcity": "Torento", - "workingarea": "Torento", - "custcountry": "Canada", - "grade": "1", - "openingamt": 10000.0, - "receiveamt": 7000.0, - "paymentamt": 6000.0, - "outstandingamt": 11000.0, - "phone": "DDDDDDD", - "agent": { - "agentcode": 4, - "agentname": "Ravi", - "workingarea": "Bangalore", - "commission": 0.15, - "phone": "077-45625874", - "country": "" - }, - "orders": [ - { - "ordnum": 4, - "ordamount": 2000.0, - "advanceamount": 0.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 4, - "type": "Mobile Pay" - } - ] - } - ] - }, - { - "custcode": 17, - "custname": "Charles", - "custcity": "Hampshair", - "workingarea": "Hampshair", - "custcountry": "UK", - "grade": "3", - "openingamt": 6000.0, - "receiveamt": 4000.0, - "paymentamt": 5000.0, - "outstandingamt": 5000.0, - "phone": "MMMMMMM", - "agent": { - "agentcode": 9, - "agentname": "Mukesh", - "workingarea": "Mumbai", - "commission": 0.11, - "phone": "029-12358964", - "country": "" - }, - "orders": [] - }, - { - "custcode": 18, - "custname": "Srinivas", - "custcity": "Bangalore", - "workingarea": "Bangalore", - "custcountry": "India", - "grade": "2", - "openingamt": 8000.0, - "receiveamt": 4000.0, - "paymentamt": 3000.0, - "outstandingamt": 9000.0, - "phone": "AAAAAAB", - "agent": { - "agentcode": 7, - "agentname": "Anderson", - "workingarea": "Brisban", - "commission": 0.13, - "phone": "045-21447739", - "country": "" - }, - "orders": [] - }, - { - "custcode": 19, - "custname": "Steven", - "custcity": "San Jose", - "workingarea": "San Jose", - "custcountry": "USA", - "grade": "1", - "openingamt": 5000.0, - "receiveamt": 7000.0, - "paymentamt": 9000.0, - "outstandingamt": 3000.0, - "phone": "KRFYGJK", - "agent": { - "agentcode": 10, - "agentname": "McDen", - "workingarea": "London", - "commission": 0.15, - "phone": "078-22255588", - "country": "" - }, - "orders": [ - { - "ordnum": 2, - "ordamount": 3000.0, - "advanceamount": 500.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 2, - "type": "Gift Card" - } - ] - } - ] - }, - { - "custcode": 20, - "custname": "Karolina", - "custcity": "Torento", - "workingarea": "Torento", - "custcountry": "Canada", - "grade": "1", - "openingamt": 7000.0, - "receiveamt": 7000.0, - "paymentamt": 9000.0, - "outstandingamt": 5000.0, - "phone": "HJKORED", - "agent": { - "agentcode": 4, - "agentname": "Ravi", - "workingarea": "Bangalore", - "commission": 0.15, - "phone": "077-45625874", - "country": "" - }, - "orders": [] - }, - { - "custcode": 21, - "custname": "Martin", - "custcity": "Torento", - "workingarea": "Torento", - "custcountry": "Canada", - "grade": "2", - "openingamt": 8000.0, - "receiveamt": 7000.0, - "paymentamt": 7000.0, - "outstandingamt": 8000.0, - "phone": "MJYURFD", - "agent": { - "agentcode": 4, - "agentname": "Ravi", - "workingarea": "Bangalore", - "commission": 0.15, - "phone": "077-45625874", - "country": "" - }, - "orders": [] - }, - { - "custcode": 22, - "custname": "Ramesh", - "custcity": "Mumbai", - "workingarea": "Mumbai", - "custcountry": "India", - "grade": "3", - "openingamt": 8000.0, - "receiveamt": 7000.0, - "paymentamt": 3000.0, - "outstandingamt": 12000.0, - "phone": "Phone No", - "agent": { - "agentcode": 2, - "agentname": "Alex", - "workingarea": "London", - "commission": 0.13, - "phone": "075-12458969", - "country": "" - }, - "orders": [ - { - "ordnum": 5, - "ordamount": 4000.0, - "advanceamount": 600.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 2, - "type": "Gift Card" - } - ] - } - ] - }, - { - "custcode": 23, - "custname": "Rangarappa", - "custcity": "Bangalore", - "workingarea": "Bangalore", - "custcountry": "India", - "grade": "2", - "openingamt": 8000.0, - "receiveamt": 11000.0, - "paymentamt": 7000.0, - "outstandingamt": 12000.0, - "phone": "AAAATGF", - "agent": { - "agentcode": 1, - "agentname": "Ramasundar", - "workingarea": "Bangalore", - "commission": 0.15, - "phone": "077-25814763", - "country": "" - }, - "orders": [ - { - "ordnum": 9, - "ordamount": 500.0, - "advanceamount": 0.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 3, - "type": "Credit Card" - } - ] - } - ] - }, - { - "custcode": 24, - "custname": "Venkatpati", - "custcity": "Bangalore", - "workingarea": "Bangalore", - "custcountry": "India", - "grade": "2", - "openingamt": 8000.0, - "receiveamt": 11000.0, - "paymentamt": 7000.0, - "outstandingamt": 12000.0, - "phone": "JRTVFDD", - "agent": { - "agentcode": 7, - "agentname": "Anderson", - "workingarea": "Brisban", - "commission": 0.13, - "phone": "045-21447739", - "country": "" - }, - "orders": [] - }, - { - "custcode": 25, - "custname": "Sundariya", - "custcity": "Chennai", - "workingarea": "Chennai", - "custcountry": "India", - "grade": "3", - "openingamt": 7000.0, - "receiveamt": 11000.0, - "paymentamt": 7000.0, - "outstandingamt": 11000.0, - "phone": "PPHGRTS", - "agent": { - "agentcode": 10, - "agentname": "McDen", - "workingarea": "London", - "commission": 0.15, - "phone": "078-22255588", - "country": "" - }, - "orders": [ - { - "ordnum": 12, - "ordamount": 2500.0, - "advanceamount": 0.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 1, - "type": "Cash" - } - ] - } - ] - } -] -``` - -
- -
-http://localhost:2019/customers/customer/7 - -```JSON -{ - "custcode": 7, - "custname": "Bolt", - "custcity": "New York", - "workingarea": "New York", - "custcountry": "USA", - "grade": "3", - "openingamt": 5000.0, - "receiveamt": 7000.0, - "paymentamt": 9000.0, - "outstandingamt": 3000.0, - "phone": "DDNRDRH", - "agent": { - "agentcode": 8, - "agentname": "Subbarao", - "workingarea": "Bangalore", - "commission": 0.14, - "phone": "077-12346674", - "country": "" - }, - "orders": [ - { - "ordnum": 3, - "ordamount": 4500.0, - "advanceamount": 900.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 3, - "type": "Credit Card" - }, - { - "paymentid": 2, - "type": "Gift Card" - } - ] - }, - { - "ordnum": 10, - "ordamount": 4000.0, - "advanceamount": 700.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 4, - "type": "Mobile Pay" - } - ] - } - ] -} -``` - -
- -
-http://localhost:2019/customers/customer/77 - -```JSON -{ - "timestamp": "2020-01-08T23:30:47.650+0000", - "status": 500, - "error": "Internal Server Error", - "message": "Customer 77 Not Found", - "trace": "javax.persistence.EntityNotFoundException: Customer 77 Not Found\n\tat com.lambdaschool.orders.services.CustomersServiceImpl.lambda$findCustomersById$0(CustomersServiceImpl.java:52)\n\tat java.base/java.util.Optional.orElseThrow(Optional.java:408)\n\tat com.lambdaschool.orders.services.CustomersServiceImpl.findCustomersById(CustomersServiceImpl.java:52)\n\tat com.lambdaschool.orders.services.CustomersServiceImpl$$FastClassBySpringCGLIB$$e088be2d.invoke()\n\tat org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n\tat org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:769)\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n\tat org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747)\n\tat org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366)\n\tat org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99)\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n\tat org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747)\n\tat org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n\tat com.lambdaschool.orders.services.CustomersServiceImpl$$EnhancerBySpringCGLIB$$389d142b.findCustomersById()\n\tat com.lambdaschool.orders.controllers.CustomersController.getCustomerById(CustomersController.java:58)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:634)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591)\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.base/java.lang.Thread.run(Thread.java:834)\n", - "path": "/customers/customer/77" -} -``` - -
-
-http://localhost:2019/customers/namelike/mes + * 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. -```JSON -[ - { - "custcode": 1, - "custname": "Holmes", - "custcity": "London", - "workingarea": "London", - "custcountry": "UK", - "grade": "2", - "openingamt": 6000.0, - "receiveamt": 5000.0, - "paymentamt": 7000.0, - "outstandingamt": 4000.0, - "phone": "BBBBBBB", - "agent": { - "agentcode": 3, - "agentname": "Alford", - "workingarea": "New York", - "commission": 0.12, - "phone": "044-25874365", - "country": "" - }, - "orders": [] - }, - { - "custcode": 22, - "custname": "Ramesh", - "custcity": "Mumbai", - "workingarea": "Mumbai", - "custcountry": "India", - "grade": "3", - "openingamt": 8000.0, - "receiveamt": 7000.0, - "paymentamt": 3000.0, - "outstandingamt": 12000.0, - "phone": "Phone No", - "agent": { - "agentcode": 2, - "agentname": "Alex", - "workingarea": "London", - "commission": 0.13, - "phone": "075-12458969", - "country": "" - }, - "orders": [ - { - "ordnum": 5, - "ordamount": 4000.0, - "advanceamount": 600.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 2, - "type": "Gift Card" - } - ] - } - ] - } -] -``` +### MVP and Stretch Goal -
- -
-http://localhost:2019/customers/namelike/cin - -```JSON -[] -``` - -
- -
-http://localhost:2019/agents/agent/9 - -```JSON -{ - "agentcode": 9, - "agentname": "Mukesh", - "workingarea": "Mumbai", - "commission": 0.11, - "phone": "029-12358964", - "country": "", - "customers": [ - { - "custcode": 17, - "custname": "Charles", - "custcity": "Hampshair", - "workingarea": "Hampshair", - "custcountry": "UK", - "grade": "3", - "openingamt": 6000.0, - "receiveamt": 4000.0, - "paymentamt": 5000.0, - "outstandingamt": 5000.0, - "phone": "MMMMMMM", - "orders": [] - } - ] -} -``` - -
- -
-http://localhost:2019/orders/order/7 - -```JSON -{ - "ordnum": 7, - "ordamount": 3500.0, - "advanceamount": 2000.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 4, - "type": "Mobile Pay" - } - ], - "customer": { - "custcode": 2, - "custname": "Micheal", - "custcity": "New York", - "workingarea": "New York", - "custcountry": "USA", - "grade": "2", - "openingamt": 3000.0, - "receiveamt": 5000.0, - "paymentamt": 2000.0, - "outstandingamt": 6000.0, - "phone": "CCCCCCC", - "agent": { - "agentcode": 8, - "agentname": "Subbarao", - "workingarea": "Bangalore", - "commission": 0.14, - "phone": "077-12346674", - "country": "" - } - } -} -``` - -
- -### Stretch Goal - -
-http://localhost:2019/orders/advanceamount - -```JSON -[ - { - "ordnum": 1, - "ordamount": 1000.0, - "advanceamount": 600.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 1, - "type": "Cash" - } - ], - "customer": { - "custcode": 13, - "custname": "Avinash", - "custcity": "Mumbai", - "workingarea": "Mumbai", - "custcountry": "India", - "grade": "2", - "openingamt": 7000.0, - "receiveamt": 11000.0, - "paymentamt": 9000.0, - "outstandingamt": 9000.0, - "phone": "113-12345678", - "agent": { - "agentcode": 2, - "agentname": "Alex", - "workingarea": "London", - "commission": 0.13, - "phone": "075-12458969", - "country": "" - } - } - }, - { - "ordnum": 2, - "ordamount": 3000.0, - "advanceamount": 500.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 2, - "type": "Gift Card" - } - ], - "customer": { - "custcode": 19, - "custname": "Steven", - "custcity": "San Jose", - "workingarea": "San Jose", - "custcountry": "USA", - "grade": "1", - "openingamt": 5000.0, - "receiveamt": 7000.0, - "paymentamt": 9000.0, - "outstandingamt": 3000.0, - "phone": "KRFYGJK", - "agent": { - "agentcode": 10, - "agentname": "McDen", - "workingarea": "London", - "commission": 0.15, - "phone": "078-22255588", - "country": "" - } - } - }, - { - "ordnum": 3, - "ordamount": 4500.0, - "advanceamount": 900.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 3, - "type": "Credit Card" - }, - { - "paymentid": 2, - "type": "Gift Card" - } - ], - "customer": { - "custcode": 7, - "custname": "Bolt", - "custcity": "New York", - "workingarea": "New York", - "custcountry": "USA", - "grade": "3", - "openingamt": 5000.0, - "receiveamt": 7000.0, - "paymentamt": 9000.0, - "outstandingamt": 3000.0, - "phone": "DDNRDRH", - "agent": { - "agentcode": 8, - "agentname": "Subbarao", - "workingarea": "Bangalore", - "commission": 0.14, - "phone": "077-12346674", - "country": "" - } - } - }, - { - "ordnum": 5, - "ordamount": 4000.0, - "advanceamount": 600.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 2, - "type": "Gift Card" - } - ], - "customer": { - "custcode": 22, - "custname": "Ramesh", - "custcity": "Mumbai", - "workingarea": "Mumbai", - "custcountry": "India", - "grade": "3", - "openingamt": 8000.0, - "receiveamt": 7000.0, - "paymentamt": 3000.0, - "outstandingamt": 12000.0, - "phone": "Phone No", - "agent": { - "agentcode": 2, - "agentname": "Alex", - "workingarea": "London", - "commission": 0.13, - "phone": "075-12458969", - "country": "" - } - } - }, - { - "ordnum": 7, - "ordamount": 3500.0, - "advanceamount": 2000.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 4, - "type": "Mobile Pay" - } - ], - "customer": { - "custcode": 2, - "custname": "Micheal", - "custcity": "New York", - "workingarea": "New York", - "custcountry": "USA", - "grade": "2", - "openingamt": 3000.0, - "receiveamt": 5000.0, - "paymentamt": 2000.0, - "outstandingamt": 6000.0, - "phone": "CCCCCCC", - "agent": { - "agentcode": 8, - "agentname": "Subbarao", - "workingarea": "Bangalore", - "commission": 0.14, - "phone": "077-12346674", - "country": "" - } - } - }, - { - "ordnum": 8, - "ordamount": 2500.0, - "advanceamount": 400.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 1, - "type": "Cash" - } - ], - "customer": { - "custcode": 3, - "custname": "Albert", - "custcity": "New York", - "workingarea": "New York", - "custcountry": "USA", - "grade": "3", - "openingamt": 5000.0, - "receiveamt": 7000.0, - "paymentamt": 6000.0, - "outstandingamt": 6000.0, - "phone": "BBBBSBB", - "agent": { - "agentcode": 8, - "agentname": "Subbarao", - "workingarea": "Bangalore", - "commission": 0.14, - "phone": "077-12346674", - "country": "" - } - } - }, - { - "ordnum": 10, - "ordamount": 4000.0, - "advanceamount": 700.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 4, - "type": "Mobile Pay" - } - ], - "customer": { - "custcode": 7, - "custname": "Bolt", - "custcity": "New York", - "workingarea": "New York", - "custcountry": "USA", - "grade": "3", - "openingamt": 5000.0, - "receiveamt": 7000.0, - "paymentamt": 9000.0, - "outstandingamt": 3000.0, - "phone": "DDNRDRH", - "agent": { - "agentcode": 8, - "agentname": "Subbarao", - "workingarea": "Bangalore", - "commission": 0.14, - "phone": "077-12346674", - "country": "" - } - } - }, - { - "ordnum": 11, - "ordamount": 1500.0, - "advanceamount": 600.0, - "orderdescription": "SOD", - "payments": [ - { - "paymentid": 2, - "type": "Gift Card" - } - ], - "customer": { - "custcode": 8, - "custname": "Fleming", - "custcity": "Brisban", - "workingarea": "Brisban", - "custcountry": "Australia", - "grade": "2", - "openingamt": 7000.0, - "receiveamt": 7000.0, - "paymentamt": 9000.0, - "outstandingamt": 5000.0, - "phone": "NHBGVFC", - "agent": { - "agentcode": 5, - "agentname": "Santakumar", - "workingarea": "Chennai", - "commission": 0.14, - "phone": "007-22388644", - "country": "" - } - } - } -] -``` - -
+The database will be available from the H2 Console. Each table will contain the appropriate data. ## Instructions -* [ ] Please fork and clone this repository. Copy your solution from part 1 into this repository. Your solution from part 1 is the starting point for part 2. You will then need to run a `git add .` 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. -* [ ] Expose the following endpoints +### MVP -* [ ] GET /customers/orders - Returns all customers with their orders -* [ ] GET /customers/customer/{id} - Returns the customer and their orders with the given customer id -* [ ] GET /customers/namelike/{likename} - Returns all customers and their orders with a customer name containing the given substring -* [ ] GET /agents/agent/{id} - Returns the agent and their customers with the given agent id -* [ ] GET /orders/order/{id} - Returns the order and its customer with the given order number -* [ ] GET /customers/orders/count - Using a custom query, return a list of all customers with the number of orders they have placed. +* [ ] 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. ### Stretch Goal -* [ ] GET /orders/advanceamount - returns all orders with their customers that have an advanceamount greater than 0. +* [ ] 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 + * [ ] Randomize as much of the data as possible + * [ ] All orders can be of the same payment type \ No newline at end of file diff --git a/SeedData.java b/SeedData.java new file mode 100644 index 0000000..1ef109f --- /dev/null +++ b/SeedData.java @@ -0,0 +1,635 @@ +package com.lambdaschool.orders; + +import com.github.javafaker.Faker; +import com.lambdaschool.orders.models.Agent; +import com.lambdaschool.orders.models.Customer; +import com.lambdaschool.orders.models.Order; +import com.lambdaschool.orders.models.Payment; +import com.lambdaschool.orders.repositories.AgentsRepository; +import com.lambdaschool.orders.repositories.CustomersRepository; +import com.lambdaschool.orders.repositories.OrdersRepository; +import com.lambdaschool.orders.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; + + /** + * A Random generator is needed to randomly generate faker data. + */ + private Random random = new Random(); + + /** + * 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); + + //Begins the faker data + + Faker dataFaker = new Faker(new Locale("en-US")); + Set customerNames = new HashSet<>(); + for (int i = 0; i < 100; i++) + { + customerNames.add(dataFaker.name() + .fullName()); + } + + for (String theName : customerNames) + { + String custcity = dataFaker.address() + .city(); + String tempWorkingarea = dataFaker.address() + .cityName(); + String tempCustcountry = dataFaker.address() + .country(); + String tempGrade = dataFaker.country() + .countryCode2(); + double tempOpeningamt = dataFaker.number() + .randomDouble(2, + 0, + 10000); + double tempReceiveamt = dataFaker.number() + .randomDouble(2, + 0, + 10000); + double tempPaymentamt = dataFaker.number() + .randomDouble(2, + 0, + 10000); + double tempOutstandingamt = dataFaker.number() + .randomDouble(2, + 0, + 10000); + String tempPhone = dataFaker.phoneNumber() + .phoneNumber(); + + Customer fakeCustomer = new Customer(theName, + custcity, + tempWorkingarea, + tempCustcountry, + tempGrade, + tempOpeningamt, + tempReceiveamt, + tempPaymentamt, + tempOutstandingamt, + tempPhone, + a10); + + int randomNumber = random.nextInt(10); // random number 0 through 9 + for (int i = 0; i < randomNumber; i++) + { + double tempGetOrdamount = dataFaker.number() + .randomDouble(2, + 0, + 10000); + double tempGetAdvanceamount = dataFaker.number() + .randomDouble(2, + 0, + 10000); + String tempGetOrderdescription = dataFaker.lorem() + .characters(); + + Order newOrder = new Order(tempGetOrdamount, + tempGetAdvanceamount, + fakeCustomer, + tempGetOrderdescription); + + newOrder.getPayments() + .add(pay1); + fakeCustomer.getOrders() + .add(newOrder); + } + + // this actually saves the faker data. + custrepos.save(fakeCustomer); + } + } +} diff --git a/data.sql b/data.sql new file mode 100644 index 0000000..81d290d --- /dev/null +++ b/data.sql @@ -0,0 +1,93 @@ +DELETE +FROM orders; + +DELETE +FROM customers; + +DELETE +FROM agents; + +INSERT INTO AGENTS (agentcode, agentname, workingarea, commission, phone, country) +VALUES (1, 'Ramasundar', 'Bangalore', 0.15, '077-25814763', ''), + (2, 'Alex', 'London', 0.13, '075-12458969', ''), + (3, 'Alford', 'New York', 0.12, '044-25874365', ''), + (4, 'Ravi', 'Bangalore', 0.15, '077-45625874', ''), + (5, 'Santakumar', 'Chennai', 0.14, '007-22388644', ''), + (6, 'Lucida', 'San Jose', 0.12, '044-52981425', ''), + (7, 'Anderson', 'Brisban', 0.13, '045-21447739', ''), + (8, 'Subbarao', 'Bangalore', 0.14, '077-12346674', ''), + (9, 'Mukesh', 'Mumbai', 0.11, '029-12358964', ''), + (10, 'McDen', 'London', 0.15, '078-22255588', ''), + (11, 'Ivan', 'Torento', 0.15, '008-22544166', ''), + (12, 'Benjamin', 'Hampshair', 0.11, '008-22536178', ''); + +INSERT INTO CUSTOMERS (custcode, custname, custcity, workingarea, custcountry, grade, openingamt, receiveamt, + paymentamt, outstandingamt, phone, agentcode) +VALUES (1, 'Holmes', 'London', 'London', 'UK', '2', 6000.00, 5000.00, 7000.00, 4000.00, 'BBBBBBB', 3), + (2, 'Micheal', 'New York', 'New York', 'USA', '2', 3000.00, 5000.00, 2000.00, 6000.00, 'CCCCCCC', 8), + (3, 'Albert', 'New York', 'New York', 'USA', '3', 5000.00, 7000.00, 6000.00, 6000.00, 'BBBBSBB', 8), + (4, 'Ravindran', 'Bangalore', 'Bangalore', 'India', '2', 5000.00, 7000.00, 4000.00, 8000.00, 'AVAVAVA', 11), + (5, 'Cook', 'London', 'London', 'UK', '2', 4000.00, 9000.00, 7000.00, 6000.00, 'FSDDSDF', 6), + (6, 'Stuart', 'London', 'London', 'UK', '1', 6000.00, 8000.00, 3000.00, 11000.00, 'GFSGERS', 3), + (7, 'Bolt', 'New York', 'New York', 'USA', '3', 5000.00, 7000.00, 9000.00, 3000.00, 'DDNRDRH', 8), + (8, 'Fleming', 'Brisban', 'Brisban', 'Australia', '2', 7000.00, 7000.00, 9000.00, 5000.00, 'NHBGVFC', 5), + (9, 'Jacks', 'Brisban', 'Brisban', 'Australia', '1', 7000.00, 7000.00, 7000.00, 7000.00, 'WERTGDF', 5), + (10, 'Yearannaidu', 'Chennai', 'Chennai', 'India', '1', 8000.00, 7000.00, 7000.00, 8000.00, 'ZZZZBFV', 10), + (11, 'Sasikant', 'Mumbai', 'Mumbai', 'India', '1', 7000.00, 11000.00, 7000.00, 11000.00, '147-25896312', 2), + (12, 'Ramanathan', 'Chennai', 'Chennai', 'India', '1', 7000.00, 11000.00, 9000.00, 9000.00, 'GHRDWSD', 10), + (13, 'Avinash', 'Mumbai', 'Mumbai', 'India', '2', 7000.00, 11000.00, 9000.00, 9000.00, '113-12345678', 2), + (14, 'Winston', 'Brisban', 'Brisban', 'Australia', '1', 5000.00, 8000.00, 7000.00, 6000.00, 'AAAAAAA', 5), + (15, 'Karl', 'London', 'London', 'UK', '0', 4000.00, 6000.00, 7000.00, 3000.00, 'AAAABAA', 6), + (16, 'Shilton', 'Torento', 'Torento', 'Canada', '1', 10000.00, 7000.00, 6000.00, 11000.00, 'DDDDDDD', 4), + (17, 'Charles', 'Hampshair', 'Hampshair', 'UK', '3', 6000.00, 4000.00, 5000.00, 5000.00, 'MMMMMMM', 9), + (18, 'Srinivas', 'Bangalore', 'Bangalore', 'India', '2', 8000.00, 4000.00, 3000.00, 9000.00, 'AAAAAAB', 7), + (19, 'Steven', 'San Jose', 'San Jose', 'USA', '1', 5000.00, 7000.00, 9000.00, 3000.00, 'KRFYGJK', 10), + (20, 'Karolina', 'Torento', 'Torento', 'Canada', '1', 7000.00, 7000.00, 9000.00, 5000.00, 'HJKORED', 4), + (21, 'Martin', 'Torento', 'Torento', 'Canada', '2', 8000.00, 7000.00, 7000.00, 8000.00, 'MJYURFD', 4), + (22, 'Ramesh', 'Mumbai', 'Mumbai', 'India', '3', 8000.00, 7000.00, 3000.00, 12000.00, 'Phone No', 2), + (23, 'Rangarappa', 'Bangalore', 'Bangalore', 'India', '2', 8000.00, 11000.00, 7000.00, 12000.00, 'AAAATGF', 1), + (24, 'Venkatpati', 'Bangalore', 'Bangalore', 'India', '2', 8000.00, 11000.00, 7000.00, 12000.00, 'JRTVFDD', 7), + (25, 'Sundariya', 'Chennai', 'Chennai', 'India', '3', 7000.00, 11000.00, 7000.00, 11000.00, 'PPHGRTS', 10); + +INSERT INTO ORDERS (ordnum, ordamount, advanceamount, custcode, orderdescription) +VALUES (1, 1000.00, 600.00, 13, 'SOD'), + (2, 3000.00, 500.00, 19, 'SOD'), + (3, 4500.00, 900.00, 7, 'SOD'), + (4, 2000.00, 0.00, 16, 'SOD'), + (5, 4000.00, 600.00, 22, 'SOD'), + (6, 2000.00, 0.00, 12, 'SOD'), + (7, 3500.00, 2000.00, 2, 'SOD'), + (8, 2500.00, 400.00, 03, 'SOD'), + (9, 500.00, 0.00, 23, 'SOD'), + (10, 4000.00, 700.00, 7, 'SOD'), + (11, 1500.00, 600.00, 8, 'SOD'), + (12, 2500.00, 0.00, 25, 'SOD'); + +INSERT INTO PAYMENTS (paymentid, type) +VALUES (1, 'Cash'), + (2, 'Gift Card'), + (3, 'Credit Card'), + (4, 'Mobile Pay'); + +INSERT INTO ORDERSPAYMENTS (ordnum, paymentid) +VALUES (1, 1), + (2, 2), + (3, 3), + (3, 2), + (4, 4), + (5, 2), + (6, 3), + (7, 4), + (8, 1), + (9, 3), + (10, 4), + (11, 2), + (12, 1); + +/* +We must tell hibernate the ids that have already been used. +The number must be larger than the last used id. +50 > 25 so we are good! + */ + +alter sequence hibernate_sequence restart with 50; diff --git a/mvnw b/mvnw new file mode 100755 index 0000000..a16b543 --- /dev/null +++ b/mvnw @@ -0,0 +1,310 @@ +#!/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 0000000..c8d4337 --- /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 0000000..0f71f56 --- /dev/null +++ b/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.2.8.RELEASE + + + com.LambdaSchool + orders + 0.0.1-SNAPSHOT + orders + 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.github.javafaker + javafaker + 1.0.1 + + + com.h2database + h2 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/com/lambdaschool/orders/OrdersApplication.java b/src/main/java/com/lambdaschool/orders/OrdersApplication.java new file mode 100644 index 0000000..5d0d7be --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/OrdersApplication.java @@ -0,0 +1,16 @@ +package com.lambdaschool.orders; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class OrdersApplication +{ + + public static void main(String[] args) + { + SpringApplication.run(OrdersApplication.class, + args); + } + +} diff --git a/src/main/java/com/lambdaschool/orders/SeedData.java b/src/main/java/com/lambdaschool/orders/SeedData.java new file mode 100644 index 0000000..649ad5c --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/SeedData.java @@ -0,0 +1,70 @@ +package com.lambdaschool.orders; + +import com.github.javafaker.Faker; +import com.lambdaschool.orders.models.Agent; +import com.lambdaschool.orders.models.Customer; +import com.lambdaschool.orders.models.Payment; +import com.lambdaschool.orders.services.AgentServices; +import com.lambdaschool.orders.services.CustomerServices; +import com.lambdaschool.orders.services.OrderServices; +import com.lambdaschool.orders.services.PaymentServices; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +import javax.transaction.Transactional; +import java.util.HashSet; +import java.util.Locale; +import java.util.Random; +import java.util.Set; + +@Transactional +@Component +public class SeedData implements CommandLineRunner +{ + @Autowired + private AgentServices agentServices; + + @Autowired + private CustomerServices customerServices; + + @Autowired + private OrderServices orderServices; + + @Autowired + private PaymentServices paymentServices; + + private Random random = new Random(); + + @Transactional + @Override + public void run(String[] args) + { + Payment pay1 = new Payment("Cash"); + pay1 = paymentServices.save(pay1); + Payment pay2 = new Payment("Credit Card"); + pay2 = paymentServices.save(pay2); + Payment pay3 = new Payment("Mobile Pay"); + pay3 = paymentServices.save(pay3); + + Faker nameFaker = new Faker(new Locale("en-US")); + + Set custNamesSet = new HashSet<>(); + for (int i = 0; i < 100; i++) + { + custNamesSet.add(nameFaker.shakespeare()) + } + + for (String agentName : custNamesSet) + { + Customer fakeCustomer = new Customer(custName, + nameFaker.address().cityName(), + nameFaker.address().city(), + nameFaker.address().country(), + nameFaker.numerify(), + nameFaker.) + } + + + } +} diff --git a/src/main/java/com/lambdaschool/orders/config/H2ServerConfiguration.java b/src/main/java/com/lambdaschool/orders/config/H2ServerConfiguration.java new file mode 100644 index 0000000..3aa1b8a --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/config/H2ServerConfiguration.java @@ -0,0 +1,72 @@ +package com.lambdaschool.crudyrestaurants.config; + +import org.h2.tools.Server; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.sql.SQLException; + +/** + * Configures H2 access through the JetBrains IntelliJ IDEA IDE. + *

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

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

+ * Go to http://localhost:8082 and connect to the database "jdbc:h2:mem:testdb", username "sa", password empty. + * + * @return The created web server needed to access H2. + * @throws SQLException If the server cannot be created. + */ + @Bean + @ConditionalOnExpression("${h2.web.enabled:true}") + public Server h2WebServer() throws + SQLException + { + return Server.createWebServer("-web", + "-webAllowOthers", + "-webPort", + h2WebPort) + .start(); + } +} \ No newline at end of file diff --git a/src/main/java/com/lambdaschool/orders/controllers/AgentController.java b/src/main/java/com/lambdaschool/orders/controllers/AgentController.java new file mode 100644 index 0000000..791d6a5 --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/controllers/AgentController.java @@ -0,0 +1,19 @@ +package com.lambdaschool.orders.controllers; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping() +public class AgentController +{ + //http://localhost:2019/customers/orders + +// http://localhost:2019/customers/customer/77 +// http://localhost:2019/customers/namelike/mes +// http://localhost:2019/customers/namelike/cin +// http://localhost:2019/agents/agent/9 +// http://localhost:2019/orders/order/7 +// Stretch Goal +// http://localhost:2019/orders/advanceamount +} diff --git a/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java b/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java new file mode 100644 index 0000000..77f789f --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java @@ -0,0 +1,30 @@ +package com.lambdaschool.orders.controllers; + +import com.lambdaschool.orders.services.CustomerServices; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/customers") +public class CustomerController +{ + @Autowired + private CustomerServices customerServices; + // http://localhost:2019/customers/orders + @GetMapping(value = "/orders", produces = "application/json") + public ResponseEntity listAllOrders() + { + return ; + } + + // http://localhost:2019/customers/customer/77 + // http://localhost:2019/customers/namelike/mes + // http://localhost:2019/customers/namelike/cin + // http://localhost:2019/orders/order/7 + // Stretch Goal + // http://localhost:2019/orders/advanceamount + +} diff --git a/src/main/java/com/lambdaschool/orders/models/Agent.java b/src/main/java/com/lambdaschool/orders/models/Agent.java new file mode 100644 index 0000000..e6e0dd6 --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/models/Agent.java @@ -0,0 +1,106 @@ +package com.lambdaschool.orders.models; + + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "agents") +public class Agent +{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long agentcode; + + @Column(unique = true, + nullable = false) + private String agentname; + private String workingarea; + private double commission; + private String phone; + private String country; + + @OneToMany(mappedBy = "agent", + cascade = CascadeType.ALL, + orphanRemoval = 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; + } +} diff --git a/src/main/java/com/lambdaschool/orders/models/Customer.java b/src/main/java/com/lambdaschool/orders/models/Customer.java new file mode 100644 index 0000000..456e313 --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/models/Customer.java @@ -0,0 +1,185 @@ +package com.lambdaschool.orders.models; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "customers") +public class Customer +{ + @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) + private Agent agent; + + @OneToMany(mappedBy = "customer", + cascade = CascadeType.ALL, + orphanRemoval = 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, + Agent agent) + { + this.custname = custname; + this.custcity = custcity; + this.workingarea = workingarea; + this.custcountry = custcountry; + this.grade = grade; + this.openingamt = openingamt; + this.receiveamt = receiveamt; + this.paymentamt = paymentamt; + this.outstandingamt = outstandingamt; + this.phone = phone; + this.agent = agent; + } + + public long getCustcode() + { + return custcode; + } + + public void setCustcode(long custcode) + { + this.custcode = custcode; + } + + public String getCustname() + { + return custname; + } + + public void setCustname(String custname) + { + this.custname = custname; + } + + public String getCustcity() + { + return custcity; + } + + public void setCustcity(String custcity) + { + this.custcity = custcity; + } + + public String getWorkingarea() + { + return workingarea; + } + + public void setWorkingarea(String workingarea) + { + this.workingarea = workingarea; + } + + public String getCustcountry() + { + return custcountry; + } + + public void setCustcountry(String custcountry) + { + this.custcountry = custcountry; + } + + public String getGrade() + { + return grade; + } + + public void setGrade(String grade) + { + this.grade = grade; + } + + public double getOpeningamt() + { + return openingamt; + } + + public void setOpeningamt(double openingamt) + { + this.openingamt = openingamt; + } + + public double getReceiveamt() + { + return receiveamt; + } + + public void setReceiveamt(double receiveamt) + { + this.receiveamt = receiveamt; + } + + public double getPaymentamt() + { + return paymentamt; + } + + public void setPaymentamt(double paymentamt) + { + this.paymentamt = paymentamt; + } + + public double getOutstandingamt() + { + return outstandingamt; + } + + public void setOutstandingamt(double outstandingamt) + { + this.outstandingamt = outstandingamt; + } + + public String getPhone() + { + return phone; + } + + public void setPhone(String phone) + { + this.phone = phone; + } + + public Agent getAgent() + { + return agent; + } + + public void setAgent(Agent agent) + { + this.agent = agent; + } +} diff --git a/src/main/java/com/lambdaschool/orders/models/Order.java b/src/main/java/com/lambdaschool/orders/models/Order.java new file mode 100644 index 0000000..7df7a3b --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/models/Order.java @@ -0,0 +1,94 @@ +package com.lambdaschool.orders.models; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "orders") +public class Order +{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long ordnum; + + private double ordamount; + private double advanceamount; + + @ManyToMany() + @JoinTable(name = "orderspayments", + joinColumns = @JoinColumn(name = "ordnum"), + inverseJoinColumns = @JoinColumn(name = "paymentid")) + private Set payments = new HashSet<>(); + + @ManyToOne + @JoinColumn(name = "custcode", nullable = false) + private Customer customer; + private String orderdescription; + + public Order() + { + } + + public Order( + double ordamount, + double advanceamount, + Customer customer, + String orderdescription) + { + this.ordamount = ordamount; + this.advanceamount = advanceamount; + this.customer = customer; + this.orderdescription = orderdescription; + } + + public long getOrdnum() + { + return ordnum; + } + + public void setOrdnum(long ordnum) + { + this.ordnum = ordnum; + } + + public double getOrdamount() + { + return ordamount; + } + + public void setOrdamount(double ordamount) + { + this.ordamount = ordamount; + } + + public double getAdvanceamount() + { + return advanceamount; + } + + public void setAdvanceamount(double advanceamount) + { + this.advanceamount = advanceamount; + } + + public Customer getCustomer() + { + return customer; + } + + public void setCustomer(Customer customer) + { + this.customer = customer; + } + + public String getOrderdescription() + { + return orderdescription; + } + + public void setOrderdescription(String orderdescription) + { + this.orderdescription = orderdescription; + } +} diff --git a/src/main/java/com/lambdaschool/orders/models/Payment.java b/src/main/java/com/lambdaschool/orders/models/Payment.java new file mode 100644 index 0000000..842353d --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/models/Payment.java @@ -0,0 +1,49 @@ +package com.lambdaschool.orders.models; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "payments") +public class Payment +{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long paymentid; + + @Column(unique = true, nullable = false) + private String type; + + @ManyToMany() + 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; + } +} diff --git a/src/main/java/com/lambdaschool/orders/repositories/AgentRepository.java b/src/main/java/com/lambdaschool/orders/repositories/AgentRepository.java new file mode 100644 index 0000000..f2f752b --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/repositories/AgentRepository.java @@ -0,0 +1,8 @@ +package com.lambdaschool.orders.repositories; + +import com.lambdaschool.orders.models.Agent; +import org.springframework.data.repository.CrudRepository; + +public interface AgentRepository extends CrudRepository +{ +} diff --git a/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java b/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java new file mode 100644 index 0000000..74a0427 --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java @@ -0,0 +1,8 @@ +package com.lambdaschool.orders.repositories; + +import com.lambdaschool.orders.models.Customer; +import org.springframework.data.repository.CrudRepository; + +public interface CustomerRepository extends CrudRepository +{ +} diff --git a/src/main/java/com/lambdaschool/orders/repositories/OrderRepository.java b/src/main/java/com/lambdaschool/orders/repositories/OrderRepository.java new file mode 100644 index 0000000..7801507 --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/repositories/OrderRepository.java @@ -0,0 +1,8 @@ +package com.lambdaschool.orders.repositories; + +import com.lambdaschool.orders.models.Order; +import org.springframework.data.repository.CrudRepository; + +public interface OrderRepository extends CrudRepository +{ +} diff --git a/src/main/java/com/lambdaschool/orders/repositories/PaymentRepository.java b/src/main/java/com/lambdaschool/orders/repositories/PaymentRepository.java new file mode 100644 index 0000000..4a95309 --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/repositories/PaymentRepository.java @@ -0,0 +1,8 @@ +package com.lambdaschool.orders.repositories; + +import com.lambdaschool.orders.models.Payment; +import org.springframework.data.repository.CrudRepository; + +public interface PaymentRepository extends CrudRepository +{ +} diff --git a/src/main/java/com/lambdaschool/orders/services/AgentServices.java b/src/main/java/com/lambdaschool/orders/services/AgentServices.java new file mode 100644 index 0000000..6180adf --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/services/AgentServices.java @@ -0,0 +1,8 @@ +package com.lambdaschool.orders.services; + +import com.lambdaschool.orders.models.Agent; + +public interface AgentServices +{ + Agent save(Agent agent); +} diff --git a/src/main/java/com/lambdaschool/orders/services/AgentServicesImpl.java b/src/main/java/com/lambdaschool/orders/services/AgentServicesImpl.java new file mode 100644 index 0000000..61d5f0f --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/services/AgentServicesImpl.java @@ -0,0 +1,22 @@ +package com.lambdaschool.orders.services; + +import com.lambdaschool.orders.models.Agent; +import com.lambdaschool.orders.repositories.AgentRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; + +@Transactional +@Service(value = "agentServices") +public class AgentServicesImpl implements AgentServices +{ + @Autowired + private AgentRepository agentrepos; + @Transactional + @Override + public Agent save(Agent agent) + { + return agentrepos.save(agent); + } +} diff --git a/src/main/java/com/lambdaschool/orders/services/CustomerServices.java b/src/main/java/com/lambdaschool/orders/services/CustomerServices.java new file mode 100644 index 0000000..1986087 --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/services/CustomerServices.java @@ -0,0 +1,8 @@ +package com.lambdaschool.orders.services; + +import com.lambdaschool.orders.models.Customer; + +public interface CustomerServices +{ + Customer save(Customer customer); +} diff --git a/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java b/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java new file mode 100644 index 0000000..f27342d --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java @@ -0,0 +1,22 @@ +package com.lambdaschool.orders.services; + +import com.lambdaschool.orders.models.Customer; +import com.lambdaschool.orders.repositories.CustomerRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; + +@Transactional +@Service(value = "customerServices") +public class CustomerServicesImpl implements CustomerServices +{ + @Autowired + private CustomerRepository customerrepos; + @Transactional + @Override + public Customer save(Customer customer) + { + return customerrepos.save(customer); + } +} diff --git a/src/main/java/com/lambdaschool/orders/services/OrderServices.java b/src/main/java/com/lambdaschool/orders/services/OrderServices.java new file mode 100644 index 0000000..6e8fbec --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/services/OrderServices.java @@ -0,0 +1,8 @@ +package com.lambdaschool.orders.services; + +import com.lambdaschool.orders.models.Order; + +public interface OrderServices +{ + Order save(Order order); +} diff --git a/src/main/java/com/lambdaschool/orders/services/OrderServicesImpl.java b/src/main/java/com/lambdaschool/orders/services/OrderServicesImpl.java new file mode 100644 index 0000000..f0ccbec --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/services/OrderServicesImpl.java @@ -0,0 +1,23 @@ +package com.lambdaschool.orders.services; + +import com.lambdaschool.orders.models.Order; +import com.lambdaschool.orders.repositories.OrderRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; + +@Transactional +@Service(value = "orderServices") +public class OrderServicesImpl implements OrderServices +{ + @Autowired + private OrderRepository orderrepos; + @Transactional + @Override + public Order save(Order order) + { + return orderrepos.save(order); + } + +} diff --git a/src/main/java/com/lambdaschool/orders/services/PaymentServices.java b/src/main/java/com/lambdaschool/orders/services/PaymentServices.java new file mode 100644 index 0000000..23a5492 --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/services/PaymentServices.java @@ -0,0 +1,8 @@ +package com.lambdaschool.orders.services; + +import com.lambdaschool.orders.models.Payment; + +public interface PaymentServices +{ + Payment save(Payment payment); +} diff --git a/src/main/java/com/lambdaschool/orders/services/PaymentServicesImpl.java b/src/main/java/com/lambdaschool/orders/services/PaymentServicesImpl.java new file mode 100644 index 0000000..d623f2f --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/services/PaymentServicesImpl.java @@ -0,0 +1,23 @@ +package com.lambdaschool.orders.services; + +import com.lambdaschool.orders.models.Payment; +import com.lambdaschool.orders.repositories.PaymentRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; + +@Transactional +@Service(value = "paymentServices") +public class PaymentServicesImpl implements PaymentServices +{ + @Autowired + private PaymentRepository paymentrepos; + @Transactional + @Override + public Payment save(Payment payment) + { + return paymentrepos.save(payment); + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..127e574 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,24 @@ +# Configurations useful for working with H2 +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console +# +# We set a port that is not frequently used +server.port=${PORT:2019} +# +# Feature that determines what happens when no accessors are found for a type +# (and there are no annotations to indicate it is meant to be serialized). +spring.jackson.serialization.fail-on-empty-beans=false +# +# keeps a transaction inside of the same entity manager +# This property register an EntityManager to the current thread, +# so you will have the same EntityManager until the web request is finished. +spring.jpa.open-in-view=true +# +# What do with the schema +# drop n create table again, good for testing +spring.jpa.hibernate.ddl-auto=create +spring.datasource.initialization-mode=always +# +# Good for production! +# spring.jpa.hibernate.ddl-auto=update +# spring.datasource.initialization-mode=never \ No newline at end of file diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql new file mode 100644 index 0000000..81d290d --- /dev/null +++ b/src/main/resources/data.sql @@ -0,0 +1,93 @@ +DELETE +FROM orders; + +DELETE +FROM customers; + +DELETE +FROM agents; + +INSERT INTO AGENTS (agentcode, agentname, workingarea, commission, phone, country) +VALUES (1, 'Ramasundar', 'Bangalore', 0.15, '077-25814763', ''), + (2, 'Alex', 'London', 0.13, '075-12458969', ''), + (3, 'Alford', 'New York', 0.12, '044-25874365', ''), + (4, 'Ravi', 'Bangalore', 0.15, '077-45625874', ''), + (5, 'Santakumar', 'Chennai', 0.14, '007-22388644', ''), + (6, 'Lucida', 'San Jose', 0.12, '044-52981425', ''), + (7, 'Anderson', 'Brisban', 0.13, '045-21447739', ''), + (8, 'Subbarao', 'Bangalore', 0.14, '077-12346674', ''), + (9, 'Mukesh', 'Mumbai', 0.11, '029-12358964', ''), + (10, 'McDen', 'London', 0.15, '078-22255588', ''), + (11, 'Ivan', 'Torento', 0.15, '008-22544166', ''), + (12, 'Benjamin', 'Hampshair', 0.11, '008-22536178', ''); + +INSERT INTO CUSTOMERS (custcode, custname, custcity, workingarea, custcountry, grade, openingamt, receiveamt, + paymentamt, outstandingamt, phone, agentcode) +VALUES (1, 'Holmes', 'London', 'London', 'UK', '2', 6000.00, 5000.00, 7000.00, 4000.00, 'BBBBBBB', 3), + (2, 'Micheal', 'New York', 'New York', 'USA', '2', 3000.00, 5000.00, 2000.00, 6000.00, 'CCCCCCC', 8), + (3, 'Albert', 'New York', 'New York', 'USA', '3', 5000.00, 7000.00, 6000.00, 6000.00, 'BBBBSBB', 8), + (4, 'Ravindran', 'Bangalore', 'Bangalore', 'India', '2', 5000.00, 7000.00, 4000.00, 8000.00, 'AVAVAVA', 11), + (5, 'Cook', 'London', 'London', 'UK', '2', 4000.00, 9000.00, 7000.00, 6000.00, 'FSDDSDF', 6), + (6, 'Stuart', 'London', 'London', 'UK', '1', 6000.00, 8000.00, 3000.00, 11000.00, 'GFSGERS', 3), + (7, 'Bolt', 'New York', 'New York', 'USA', '3', 5000.00, 7000.00, 9000.00, 3000.00, 'DDNRDRH', 8), + (8, 'Fleming', 'Brisban', 'Brisban', 'Australia', '2', 7000.00, 7000.00, 9000.00, 5000.00, 'NHBGVFC', 5), + (9, 'Jacks', 'Brisban', 'Brisban', 'Australia', '1', 7000.00, 7000.00, 7000.00, 7000.00, 'WERTGDF', 5), + (10, 'Yearannaidu', 'Chennai', 'Chennai', 'India', '1', 8000.00, 7000.00, 7000.00, 8000.00, 'ZZZZBFV', 10), + (11, 'Sasikant', 'Mumbai', 'Mumbai', 'India', '1', 7000.00, 11000.00, 7000.00, 11000.00, '147-25896312', 2), + (12, 'Ramanathan', 'Chennai', 'Chennai', 'India', '1', 7000.00, 11000.00, 9000.00, 9000.00, 'GHRDWSD', 10), + (13, 'Avinash', 'Mumbai', 'Mumbai', 'India', '2', 7000.00, 11000.00, 9000.00, 9000.00, '113-12345678', 2), + (14, 'Winston', 'Brisban', 'Brisban', 'Australia', '1', 5000.00, 8000.00, 7000.00, 6000.00, 'AAAAAAA', 5), + (15, 'Karl', 'London', 'London', 'UK', '0', 4000.00, 6000.00, 7000.00, 3000.00, 'AAAABAA', 6), + (16, 'Shilton', 'Torento', 'Torento', 'Canada', '1', 10000.00, 7000.00, 6000.00, 11000.00, 'DDDDDDD', 4), + (17, 'Charles', 'Hampshair', 'Hampshair', 'UK', '3', 6000.00, 4000.00, 5000.00, 5000.00, 'MMMMMMM', 9), + (18, 'Srinivas', 'Bangalore', 'Bangalore', 'India', '2', 8000.00, 4000.00, 3000.00, 9000.00, 'AAAAAAB', 7), + (19, 'Steven', 'San Jose', 'San Jose', 'USA', '1', 5000.00, 7000.00, 9000.00, 3000.00, 'KRFYGJK', 10), + (20, 'Karolina', 'Torento', 'Torento', 'Canada', '1', 7000.00, 7000.00, 9000.00, 5000.00, 'HJKORED', 4), + (21, 'Martin', 'Torento', 'Torento', 'Canada', '2', 8000.00, 7000.00, 7000.00, 8000.00, 'MJYURFD', 4), + (22, 'Ramesh', 'Mumbai', 'Mumbai', 'India', '3', 8000.00, 7000.00, 3000.00, 12000.00, 'Phone No', 2), + (23, 'Rangarappa', 'Bangalore', 'Bangalore', 'India', '2', 8000.00, 11000.00, 7000.00, 12000.00, 'AAAATGF', 1), + (24, 'Venkatpati', 'Bangalore', 'Bangalore', 'India', '2', 8000.00, 11000.00, 7000.00, 12000.00, 'JRTVFDD', 7), + (25, 'Sundariya', 'Chennai', 'Chennai', 'India', '3', 7000.00, 11000.00, 7000.00, 11000.00, 'PPHGRTS', 10); + +INSERT INTO ORDERS (ordnum, ordamount, advanceamount, custcode, orderdescription) +VALUES (1, 1000.00, 600.00, 13, 'SOD'), + (2, 3000.00, 500.00, 19, 'SOD'), + (3, 4500.00, 900.00, 7, 'SOD'), + (4, 2000.00, 0.00, 16, 'SOD'), + (5, 4000.00, 600.00, 22, 'SOD'), + (6, 2000.00, 0.00, 12, 'SOD'), + (7, 3500.00, 2000.00, 2, 'SOD'), + (8, 2500.00, 400.00, 03, 'SOD'), + (9, 500.00, 0.00, 23, 'SOD'), + (10, 4000.00, 700.00, 7, 'SOD'), + (11, 1500.00, 600.00, 8, 'SOD'), + (12, 2500.00, 0.00, 25, 'SOD'); + +INSERT INTO PAYMENTS (paymentid, type) +VALUES (1, 'Cash'), + (2, 'Gift Card'), + (3, 'Credit Card'), + (4, 'Mobile Pay'); + +INSERT INTO ORDERSPAYMENTS (ordnum, paymentid) +VALUES (1, 1), + (2, 2), + (3, 3), + (3, 2), + (4, 4), + (5, 2), + (6, 3), + (7, 4), + (8, 1), + (9, 3), + (10, 4), + (11, 2), + (12, 1); + +/* +We must tell hibernate the ids that have already been used. +The number must be larger than the last used id. +50 > 25 so we are good! + */ + +alter sequence hibernate_sequence restart with 50; diff --git a/src/test/java/com/lambdaschool/orders/OrdersApplicationTests.java b/src/test/java/com/lambdaschool/orders/OrdersApplicationTests.java new file mode 100644 index 0000000..d01ca58 --- /dev/null +++ b/src/test/java/com/lambdaschool/orders/OrdersApplicationTests.java @@ -0,0 +1,15 @@ +package com.lambdaschool.orders; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class OrdersApplicationTests +{ + + @Test + void contextLoads() + { + } + +} diff --git a/target/classes/application.properties b/target/classes/application.properties new file mode 100644 index 0000000..127e574 --- /dev/null +++ b/target/classes/application.properties @@ -0,0 +1,24 @@ +# Configurations useful for working with H2 +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console +# +# We set a port that is not frequently used +server.port=${PORT:2019} +# +# Feature that determines what happens when no accessors are found for a type +# (and there are no annotations to indicate it is meant to be serialized). +spring.jackson.serialization.fail-on-empty-beans=false +# +# keeps a transaction inside of the same entity manager +# This property register an EntityManager to the current thread, +# so you will have the same EntityManager until the web request is finished. +spring.jpa.open-in-view=true +# +# What do with the schema +# drop n create table again, good for testing +spring.jpa.hibernate.ddl-auto=create +spring.datasource.initialization-mode=always +# +# Good for production! +# spring.jpa.hibernate.ddl-auto=update +# spring.datasource.initialization-mode=never \ No newline at end of file diff --git a/target/classes/data.sql b/target/classes/data.sql new file mode 100644 index 0000000..81d290d --- /dev/null +++ b/target/classes/data.sql @@ -0,0 +1,93 @@ +DELETE +FROM orders; + +DELETE +FROM customers; + +DELETE +FROM agents; + +INSERT INTO AGENTS (agentcode, agentname, workingarea, commission, phone, country) +VALUES (1, 'Ramasundar', 'Bangalore', 0.15, '077-25814763', ''), + (2, 'Alex', 'London', 0.13, '075-12458969', ''), + (3, 'Alford', 'New York', 0.12, '044-25874365', ''), + (4, 'Ravi', 'Bangalore', 0.15, '077-45625874', ''), + (5, 'Santakumar', 'Chennai', 0.14, '007-22388644', ''), + (6, 'Lucida', 'San Jose', 0.12, '044-52981425', ''), + (7, 'Anderson', 'Brisban', 0.13, '045-21447739', ''), + (8, 'Subbarao', 'Bangalore', 0.14, '077-12346674', ''), + (9, 'Mukesh', 'Mumbai', 0.11, '029-12358964', ''), + (10, 'McDen', 'London', 0.15, '078-22255588', ''), + (11, 'Ivan', 'Torento', 0.15, '008-22544166', ''), + (12, 'Benjamin', 'Hampshair', 0.11, '008-22536178', ''); + +INSERT INTO CUSTOMERS (custcode, custname, custcity, workingarea, custcountry, grade, openingamt, receiveamt, + paymentamt, outstandingamt, phone, agentcode) +VALUES (1, 'Holmes', 'London', 'London', 'UK', '2', 6000.00, 5000.00, 7000.00, 4000.00, 'BBBBBBB', 3), + (2, 'Micheal', 'New York', 'New York', 'USA', '2', 3000.00, 5000.00, 2000.00, 6000.00, 'CCCCCCC', 8), + (3, 'Albert', 'New York', 'New York', 'USA', '3', 5000.00, 7000.00, 6000.00, 6000.00, 'BBBBSBB', 8), + (4, 'Ravindran', 'Bangalore', 'Bangalore', 'India', '2', 5000.00, 7000.00, 4000.00, 8000.00, 'AVAVAVA', 11), + (5, 'Cook', 'London', 'London', 'UK', '2', 4000.00, 9000.00, 7000.00, 6000.00, 'FSDDSDF', 6), + (6, 'Stuart', 'London', 'London', 'UK', '1', 6000.00, 8000.00, 3000.00, 11000.00, 'GFSGERS', 3), + (7, 'Bolt', 'New York', 'New York', 'USA', '3', 5000.00, 7000.00, 9000.00, 3000.00, 'DDNRDRH', 8), + (8, 'Fleming', 'Brisban', 'Brisban', 'Australia', '2', 7000.00, 7000.00, 9000.00, 5000.00, 'NHBGVFC', 5), + (9, 'Jacks', 'Brisban', 'Brisban', 'Australia', '1', 7000.00, 7000.00, 7000.00, 7000.00, 'WERTGDF', 5), + (10, 'Yearannaidu', 'Chennai', 'Chennai', 'India', '1', 8000.00, 7000.00, 7000.00, 8000.00, 'ZZZZBFV', 10), + (11, 'Sasikant', 'Mumbai', 'Mumbai', 'India', '1', 7000.00, 11000.00, 7000.00, 11000.00, '147-25896312', 2), + (12, 'Ramanathan', 'Chennai', 'Chennai', 'India', '1', 7000.00, 11000.00, 9000.00, 9000.00, 'GHRDWSD', 10), + (13, 'Avinash', 'Mumbai', 'Mumbai', 'India', '2', 7000.00, 11000.00, 9000.00, 9000.00, '113-12345678', 2), + (14, 'Winston', 'Brisban', 'Brisban', 'Australia', '1', 5000.00, 8000.00, 7000.00, 6000.00, 'AAAAAAA', 5), + (15, 'Karl', 'London', 'London', 'UK', '0', 4000.00, 6000.00, 7000.00, 3000.00, 'AAAABAA', 6), + (16, 'Shilton', 'Torento', 'Torento', 'Canada', '1', 10000.00, 7000.00, 6000.00, 11000.00, 'DDDDDDD', 4), + (17, 'Charles', 'Hampshair', 'Hampshair', 'UK', '3', 6000.00, 4000.00, 5000.00, 5000.00, 'MMMMMMM', 9), + (18, 'Srinivas', 'Bangalore', 'Bangalore', 'India', '2', 8000.00, 4000.00, 3000.00, 9000.00, 'AAAAAAB', 7), + (19, 'Steven', 'San Jose', 'San Jose', 'USA', '1', 5000.00, 7000.00, 9000.00, 3000.00, 'KRFYGJK', 10), + (20, 'Karolina', 'Torento', 'Torento', 'Canada', '1', 7000.00, 7000.00, 9000.00, 5000.00, 'HJKORED', 4), + (21, 'Martin', 'Torento', 'Torento', 'Canada', '2', 8000.00, 7000.00, 7000.00, 8000.00, 'MJYURFD', 4), + (22, 'Ramesh', 'Mumbai', 'Mumbai', 'India', '3', 8000.00, 7000.00, 3000.00, 12000.00, 'Phone No', 2), + (23, 'Rangarappa', 'Bangalore', 'Bangalore', 'India', '2', 8000.00, 11000.00, 7000.00, 12000.00, 'AAAATGF', 1), + (24, 'Venkatpati', 'Bangalore', 'Bangalore', 'India', '2', 8000.00, 11000.00, 7000.00, 12000.00, 'JRTVFDD', 7), + (25, 'Sundariya', 'Chennai', 'Chennai', 'India', '3', 7000.00, 11000.00, 7000.00, 11000.00, 'PPHGRTS', 10); + +INSERT INTO ORDERS (ordnum, ordamount, advanceamount, custcode, orderdescription) +VALUES (1, 1000.00, 600.00, 13, 'SOD'), + (2, 3000.00, 500.00, 19, 'SOD'), + (3, 4500.00, 900.00, 7, 'SOD'), + (4, 2000.00, 0.00, 16, 'SOD'), + (5, 4000.00, 600.00, 22, 'SOD'), + (6, 2000.00, 0.00, 12, 'SOD'), + (7, 3500.00, 2000.00, 2, 'SOD'), + (8, 2500.00, 400.00, 03, 'SOD'), + (9, 500.00, 0.00, 23, 'SOD'), + (10, 4000.00, 700.00, 7, 'SOD'), + (11, 1500.00, 600.00, 8, 'SOD'), + (12, 2500.00, 0.00, 25, 'SOD'); + +INSERT INTO PAYMENTS (paymentid, type) +VALUES (1, 'Cash'), + (2, 'Gift Card'), + (3, 'Credit Card'), + (4, 'Mobile Pay'); + +INSERT INTO ORDERSPAYMENTS (ordnum, paymentid) +VALUES (1, 1), + (2, 2), + (3, 3), + (3, 2), + (4, 4), + (5, 2), + (6, 3), + (7, 4), + (8, 1), + (9, 3), + (10, 4), + (11, 2), + (12, 1); + +/* +We must tell hibernate the ids that have already been used. +The number must be larger than the last used id. +50 > 25 so we are good! + */ + +alter sequence hibernate_sequence restart with 50; From 921efe30f65c17263e8434f7e14f5d18d862a774 Mon Sep 17 00:00:00 2001 From: L-Steinmacher Date: Tue, 13 Apr 2021 16:43:29 -0700 Subject: [PATCH 2/4] MVP --- .../com/lambdaschool/orders/SeedData.java | 140 +++++++++--------- .../orders/controllers/AgentController.java | 25 ++-- .../controllers/CustomerController.java | 23 ++- .../orders/controllers/OrderController.java | 28 ++++ .../com/lambdaschool/orders/models/Agent.java | 3 + .../lambdaschool/orders/models/Customer.java | 4 + .../com/lambdaschool/orders/models/Order.java | 4 + .../lambdaschool/orders/models/Payment.java | 5 +- .../repositories/CustomerRepository.java | 5 + .../orders/services/AgentServices.java | 4 + .../orders/services/AgentServicesImpl.java | 9 ++ .../orders/services/CustomerServices.java | 7 + .../orders/services/CustomerServicesImpl.java | 26 ++++ .../orders/services/OrderServices.java | 5 + .../orders/services/OrderServicesImpl.java | 9 ++ 15 files changed, 214 insertions(+), 83 deletions(-) create mode 100644 src/main/java/com/lambdaschool/orders/controllers/OrderController.java diff --git a/src/main/java/com/lambdaschool/orders/SeedData.java b/src/main/java/com/lambdaschool/orders/SeedData.java index 649ad5c..98426d4 100644 --- a/src/main/java/com/lambdaschool/orders/SeedData.java +++ b/src/main/java/com/lambdaschool/orders/SeedData.java @@ -1,70 +1,70 @@ -package com.lambdaschool.orders; - -import com.github.javafaker.Faker; -import com.lambdaschool.orders.models.Agent; -import com.lambdaschool.orders.models.Customer; -import com.lambdaschool.orders.models.Payment; -import com.lambdaschool.orders.services.AgentServices; -import com.lambdaschool.orders.services.CustomerServices; -import com.lambdaschool.orders.services.OrderServices; -import com.lambdaschool.orders.services.PaymentServices; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.CommandLineRunner; -import org.springframework.stereotype.Component; - -import javax.transaction.Transactional; -import java.util.HashSet; -import java.util.Locale; -import java.util.Random; -import java.util.Set; - -@Transactional -@Component -public class SeedData implements CommandLineRunner -{ - @Autowired - private AgentServices agentServices; - - @Autowired - private CustomerServices customerServices; - - @Autowired - private OrderServices orderServices; - - @Autowired - private PaymentServices paymentServices; - - private Random random = new Random(); - - @Transactional - @Override - public void run(String[] args) - { - Payment pay1 = new Payment("Cash"); - pay1 = paymentServices.save(pay1); - Payment pay2 = new Payment("Credit Card"); - pay2 = paymentServices.save(pay2); - Payment pay3 = new Payment("Mobile Pay"); - pay3 = paymentServices.save(pay3); - - Faker nameFaker = new Faker(new Locale("en-US")); - - Set custNamesSet = new HashSet<>(); - for (int i = 0; i < 100; i++) - { - custNamesSet.add(nameFaker.shakespeare()) - } - - for (String agentName : custNamesSet) - { - Customer fakeCustomer = new Customer(custName, - nameFaker.address().cityName(), - nameFaker.address().city(), - nameFaker.address().country(), - nameFaker.numerify(), - nameFaker.) - } - - - } -} +//package com.lambdaschool.orders; +// +//import com.github.javafaker.Faker; +//import com.lambdaschool.orders.models.Agent; +//import com.lambdaschool.orders.models.Customer; +//import com.lambdaschool.orders.models.Payment; +//import com.lambdaschool.orders.services.AgentServices; +//import com.lambdaschool.orders.services.CustomerServices; +//import com.lambdaschool.orders.services.OrderServices; +//import com.lambdaschool.orders.services.PaymentServices; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.CommandLineRunner; +//import org.springframework.stereotype.Component; +// +//import javax.transaction.Transactional; +//import java.util.HashSet; +//import java.util.Locale; +//import java.util.Random; +//import java.util.Set; +// +//@Transactional +//@Component +//public class SeedData implements CommandLineRunner +//{ +// @Autowired +// private AgentServices agentServices; +// +// @Autowired +// private CustomerServices customerServices; +// +// @Autowired +// private OrderServices orderServices; +// +// @Autowired +// private PaymentServices paymentServices; +// +// private Random random = new Random(); +// +// @Transactional +// @Override +// public void run(String[] args) +// { +// Payment pay1 = new Payment("Cash"); +// pay1 = paymentServices.save(pay1); +// Payment pay2 = new Payment("Credit Card"); +// pay2 = paymentServices.save(pay2); +// Payment pay3 = new Payment("Mobile Pay"); +// pay3 = paymentServices.save(pay3); +// +// Faker nameFaker = new Faker(new Locale("en-US")); +// +// Set custNamesSet = new HashSet<>(); +// for (int i = 0; i < 100; i++) +// { +// custNamesSet.add(nameFaker.shakespeare()); +// } +// +// for (String agentName : custNamesSet) +// { +// Customer fakeCustomer = new Customer(custName, +// nameFaker.address().cityName(), +// nameFaker.address().city(), +// nameFaker.address().country(), +// nameFaker.numerify(), +// nameFaker.); +// } +// +// +// } +//} diff --git a/src/main/java/com/lambdaschool/orders/controllers/AgentController.java b/src/main/java/com/lambdaschool/orders/controllers/AgentController.java index 791d6a5..f403cbe 100644 --- a/src/main/java/com/lambdaschool/orders/controllers/AgentController.java +++ b/src/main/java/com/lambdaschool/orders/controllers/AgentController.java @@ -1,19 +1,26 @@ package com.lambdaschool.orders.controllers; +import com.lambdaschool.orders.models.Agent; +import com.lambdaschool.orders.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.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController -@RequestMapping() +@RequestMapping("/agents") public class AgentController { - //http://localhost:2019/customers/orders - -// http://localhost:2019/customers/customer/77 -// http://localhost:2019/customers/namelike/mes -// http://localhost:2019/customers/namelike/cin + @Autowired + private AgentServices agentServices; // http://localhost:2019/agents/agent/9 -// http://localhost:2019/orders/order/7 -// Stretch Goal -// http://localhost:2019/orders/advanceamount + @GetMapping(value = "/agent/{agentcode}", produces = "application/json") + public ResponseEntity findByAgentcode(@PathVariable long agentcode) + { + Agent a = agentServices.findAgentByAgentcode(agentcode); + return new ResponseEntity<>(a, HttpStatus.OK); + } } diff --git a/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java b/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java index 77f789f..9c07887 100644 --- a/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java +++ b/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java @@ -1,12 +1,17 @@ package com.lambdaschool.orders.controllers; +import com.lambdaschool.orders.models.Customer; import com.lambdaschool.orders.services.CustomerServices; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @RequestMapping("/customers") public class CustomerController @@ -17,13 +22,25 @@ public class CustomerController @GetMapping(value = "/orders", produces = "application/json") public ResponseEntity listAllOrders() { - return ; + List rtnList = customerServices.findAllCustomersOrders(); + return new ResponseEntity<>(rtnList, HttpStatus.OK); } - // http://localhost:2019/customers/customer/77 + // http://localhost:2019/customers/customer/7 + @GetMapping(value = "/customer/{custcode}", produces = "application/json") + public ResponseEntity findByCustcode(@PathVariable long custcode) + { + Customer c = customerServices.findCustomerByCustcode(custcode); + return new ResponseEntity<>(c, HttpStatus.OK); + } // http://localhost:2019/customers/namelike/mes + @GetMapping(value = "/namelike/{custname}", produces = "application/json") + public ResponseEntity findCustomerByCustnameLike(@PathVariable String custname) + { + List rtnlist = customerServices.findByNameLike(custname); + return new ResponseEntity<>(rtnlist, HttpStatus.OK); + } // http://localhost:2019/customers/namelike/cin - // http://localhost:2019/orders/order/7 // Stretch Goal // http://localhost:2019/orders/advanceamount diff --git a/src/main/java/com/lambdaschool/orders/controllers/OrderController.java b/src/main/java/com/lambdaschool/orders/controllers/OrderController.java new file mode 100644 index 0000000..17a9dd1 --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/controllers/OrderController.java @@ -0,0 +1,28 @@ +package com.lambdaschool.orders.controllers; + +import com.lambdaschool.orders.models.Order; +import com.lambdaschool.orders.services.OrderServices; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/orders") +public class OrderController +{ + @Autowired + private OrderServices orderServices; + // http://localhost:2019/orders/order/7 + @GetMapping(value = "/order/{ordnum}", produces = "application/json") + public ResponseEntity findByOrdnum(@PathVariable long ordnum) + { + Order o = orderServices.findOrderByOrdnum(ordnum); + return new ResponseEntity<>(o, HttpStatus.OK); + } + // Stretch Goal + // http://localhost:2019/orders/advanceamount +} diff --git a/src/main/java/com/lambdaschool/orders/models/Agent.java b/src/main/java/com/lambdaschool/orders/models/Agent.java index e6e0dd6..498366e 100644 --- a/src/main/java/com/lambdaschool/orders/models/Agent.java +++ b/src/main/java/com/lambdaschool/orders/models/Agent.java @@ -1,6 +1,8 @@ package com.lambdaschool.orders.models; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + import javax.persistence.*; import java.util.ArrayList; import java.util.List; @@ -24,6 +26,7 @@ public class Agent @OneToMany(mappedBy = "agent", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonIgnoreProperties(value = "agent", allowSetters = true) private List customers = new ArrayList<>(); public Agent() diff --git a/src/main/java/com/lambdaschool/orders/models/Customer.java b/src/main/java/com/lambdaschool/orders/models/Customer.java index 456e313..3dce38a 100644 --- a/src/main/java/com/lambdaschool/orders/models/Customer.java +++ b/src/main/java/com/lambdaschool/orders/models/Customer.java @@ -1,5 +1,7 @@ package com.lambdaschool.orders.models; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + import javax.persistence.*; import java.util.ArrayList; import java.util.List; @@ -26,11 +28,13 @@ public class Customer @ManyToOne @JoinColumn(name = "agentcode", nullable = false) + @JsonIgnoreProperties(value = "customer", 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() diff --git a/src/main/java/com/lambdaschool/orders/models/Order.java b/src/main/java/com/lambdaschool/orders/models/Order.java index 7df7a3b..517f087 100644 --- a/src/main/java/com/lambdaschool/orders/models/Order.java +++ b/src/main/java/com/lambdaschool/orders/models/Order.java @@ -1,5 +1,7 @@ package com.lambdaschool.orders.models; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + import javax.persistence.*; import java.util.HashSet; import java.util.Set; @@ -19,10 +21,12 @@ public class Order @JoinTable(name = "orderspayments", joinColumns = @JoinColumn(name = "ordnum"), inverseJoinColumns = @JoinColumn(name = "paymentid")) + @JsonIgnoreProperties(value = "orders", allowSetters = true) private Set payments = new HashSet<>(); @ManyToOne @JoinColumn(name = "custcode", nullable = false) + @JsonIgnoreProperties(value = "order",allowSetters = true) private Customer customer; private String orderdescription; diff --git a/src/main/java/com/lambdaschool/orders/models/Payment.java b/src/main/java/com/lambdaschool/orders/models/Payment.java index 842353d..7cac812 100644 --- a/src/main/java/com/lambdaschool/orders/models/Payment.java +++ b/src/main/java/com/lambdaschool/orders/models/Payment.java @@ -1,5 +1,7 @@ package com.lambdaschool.orders.models; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + import javax.persistence.*; import java.util.HashSet; import java.util.Set; @@ -15,7 +17,8 @@ public class Payment @Column(unique = true, nullable = false) private String type; - @ManyToMany() + @ManyToMany(mappedBy = "payments") + @JsonIgnoreProperties(value = "payments", allowSetters = true) private Set orders = new HashSet<>(); public Payment() diff --git a/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java b/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java index 74a0427..7bcc023 100644 --- a/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java +++ b/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java @@ -3,6 +3,11 @@ import com.lambdaschool.orders.models.Customer; import org.springframework.data.repository.CrudRepository; +import java.util.List; + public interface CustomerRepository extends CrudRepository { + Customer findByCustname(String custname); + List findByCustnameContainingIgnoringCase(String custname); + } diff --git a/src/main/java/com/lambdaschool/orders/services/AgentServices.java b/src/main/java/com/lambdaschool/orders/services/AgentServices.java index 6180adf..1fd3648 100644 --- a/src/main/java/com/lambdaschool/orders/services/AgentServices.java +++ b/src/main/java/com/lambdaschool/orders/services/AgentServices.java @@ -2,7 +2,11 @@ import com.lambdaschool.orders.models.Agent; +import java.util.List; + public interface AgentServices { Agent save(Agent agent); + + Agent findAgentByAgentcode(Long agentcode); } diff --git a/src/main/java/com/lambdaschool/orders/services/AgentServicesImpl.java b/src/main/java/com/lambdaschool/orders/services/AgentServicesImpl.java index 61d5f0f..efb988f 100644 --- a/src/main/java/com/lambdaschool/orders/services/AgentServicesImpl.java +++ b/src/main/java/com/lambdaschool/orders/services/AgentServicesImpl.java @@ -5,7 +5,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.persistence.EntityNotFoundException; import javax.transaction.Transactional; +import java.util.List; @Transactional @Service(value = "agentServices") @@ -19,4 +21,11 @@ public Agent save(Agent agent) { return agentrepos.save(agent); } + + @Override + public Agent findAgentByAgentcode(Long agentcode) + { + return agentrepos.findById(agentcode) + .orElseThrow(() -> new EntityNotFoundException("Agent " + agentcode + "Not Found")); + } } diff --git a/src/main/java/com/lambdaschool/orders/services/CustomerServices.java b/src/main/java/com/lambdaschool/orders/services/CustomerServices.java index 1986087..8406308 100644 --- a/src/main/java/com/lambdaschool/orders/services/CustomerServices.java +++ b/src/main/java/com/lambdaschool/orders/services/CustomerServices.java @@ -2,7 +2,14 @@ import com.lambdaschool.orders.models.Customer; +import java.util.List; + public interface CustomerServices { Customer save(Customer customer); + + List findAllCustomersOrders(); + Customer findCustomerByCustcode(long custcode); + List findByNameLike(String custname); + } diff --git a/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java b/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java index f27342d..6f9c066 100644 --- a/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java +++ b/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java @@ -5,7 +5,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.persistence.EntityNotFoundException; import javax.transaction.Transactional; +import java.util.ArrayList; +import java.util.List; @Transactional @Service(value = "customerServices") @@ -19,4 +22,27 @@ public Customer save(Customer customer) { return customerrepos.save(customer); } + + @Override + public List findAllCustomersOrders() + { + List rtnlist = new ArrayList<>(); + customerrepos.findAll().iterator().forEachRemaining(rtnlist::add); + return rtnlist; + } + + @Override + public Customer findCustomerByCustcode(long custcode) + { + return customerrepos.findById(custcode) + .orElseThrow(() -> new EntityNotFoundException("Customer " + custcode + " Not Found")); + } + + @Override + public List findByNameLike(String custname) + { + List list = customerrepos.findByCustnameContainingIgnoringCase(custname); + + return list; + } } diff --git a/src/main/java/com/lambdaschool/orders/services/OrderServices.java b/src/main/java/com/lambdaschool/orders/services/OrderServices.java index 6e8fbec..e1b16a6 100644 --- a/src/main/java/com/lambdaschool/orders/services/OrderServices.java +++ b/src/main/java/com/lambdaschool/orders/services/OrderServices.java @@ -2,7 +2,12 @@ import com.lambdaschool.orders.models.Order; +import java.util.List; + public interface OrderServices { Order save(Order order); + + Order findOrderByOrdnum(long ordnum); + } diff --git a/src/main/java/com/lambdaschool/orders/services/OrderServicesImpl.java b/src/main/java/com/lambdaschool/orders/services/OrderServicesImpl.java index f0ccbec..7f52295 100644 --- a/src/main/java/com/lambdaschool/orders/services/OrderServicesImpl.java +++ b/src/main/java/com/lambdaschool/orders/services/OrderServicesImpl.java @@ -5,7 +5,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.persistence.EntityNotFoundException; import javax.transaction.Transactional; +import java.util.List; @Transactional @Service(value = "orderServices") @@ -20,4 +22,11 @@ public Order save(Order order) return orderrepos.save(order); } + @Override + public Order findOrderByOrdnum(long ordnum) + { + return orderrepos.findById(ordnum) + .orElseThrow(() -> new EntityNotFoundException("Order " + ordnum + " Not Found")); + } + } From 7ca6dd846022e8549b95d9540246f045f8bd932c Mon Sep 17 00:00:00 2001 From: L-Steinmacher Date: Tue, 13 Apr 2021 17:41:41 -0700 Subject: [PATCH 3/4] Ok MVP for real --- .../orders/controllers/CustomerController.java | 12 +++++++++--- .../orders/controllers/OrderController.java | 5 +++++ .../orders/repositories/CustomerRepository.java | 9 +++++++++ .../orders/services/CustomerServices.java | 2 ++ .../orders/services/CustomerServicesImpl.java | 8 ++++++++ .../lambdaschool/orders/services/OrderServices.java | 2 ++ .../com/lambdaschool/orders/views/OrderCounts.java | 7 +++++++ 7 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/lambdaschool/orders/views/OrderCounts.java diff --git a/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java b/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java index 9c07887..09548d2 100644 --- a/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java +++ b/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java @@ -2,6 +2,7 @@ import com.lambdaschool.orders.models.Customer; import com.lambdaschool.orders.services.CustomerServices; +import com.lambdaschool.orders.views.OrderCounts; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -40,8 +41,13 @@ public ResponseEntity findCustomerByCustnameLike(@PathVariable String custnam List rtnlist = customerServices.findByNameLike(custname); return new ResponseEntity<>(rtnlist, HttpStatus.OK); } - // http://localhost:2019/customers/namelike/cin - // Stretch Goal - // http://localhost:2019/orders/advanceamount + + // http://localhost:2019/customers/orders/count + @GetMapping(value = "/orders/count", produces = "application/json") + public ResponseEntity getOrderCounts() + { + List rtnList = customerServices.getOrderCounts(); + return new ResponseEntity<>(rtnList, HttpStatus.OK); + } } diff --git a/src/main/java/com/lambdaschool/orders/controllers/OrderController.java b/src/main/java/com/lambdaschool/orders/controllers/OrderController.java index 17a9dd1..aaff39a 100644 --- a/src/main/java/com/lambdaschool/orders/controllers/OrderController.java +++ b/src/main/java/com/lambdaschool/orders/controllers/OrderController.java @@ -25,4 +25,9 @@ public ResponseEntity findByOrdnum(@PathVariable long ordnum) } // Stretch Goal // http://localhost:2019/orders/advanceamount +// @GetMapping(value = "/advanceamount", produces = "application/json") +// public ResponseEntity findByAdvanceamount(@PathVariable double advanceamount) +// { +// +// } } diff --git a/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java b/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java index 7bcc023..b88d14d 100644 --- a/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java +++ b/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java @@ -1,6 +1,8 @@ package com.lambdaschool.orders.repositories; import com.lambdaschool.orders.models.Customer; +import com.lambdaschool.orders.views.OrderCounts; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import java.util.List; @@ -10,4 +12,11 @@ public interface CustomerRepository extends CrudRepository Customer findByCustname(String custname); List findByCustnameContainingIgnoringCase(String custname); + @Query(value = "SELECT c.custname , count(ordnum) countorders " + + "FROM customers c LEFT JOIN orders o " + + "ON c.custcode = o.custcode " + + "GROUP BY c.custname " + + "ORDER BY countorders DESC", + nativeQuery = true) + List findOrderCounts(); } diff --git a/src/main/java/com/lambdaschool/orders/services/CustomerServices.java b/src/main/java/com/lambdaschool/orders/services/CustomerServices.java index 8406308..ae91a9f 100644 --- a/src/main/java/com/lambdaschool/orders/services/CustomerServices.java +++ b/src/main/java/com/lambdaschool/orders/services/CustomerServices.java @@ -1,6 +1,7 @@ package com.lambdaschool.orders.services; import com.lambdaschool.orders.models.Customer; +import com.lambdaschool.orders.views.OrderCounts; import java.util.List; @@ -11,5 +12,6 @@ public interface CustomerServices List findAllCustomersOrders(); Customer findCustomerByCustcode(long custcode); List findByNameLike(String custname); + List getOrderCounts(); } diff --git a/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java b/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java index 6f9c066..6f58869 100644 --- a/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java +++ b/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java @@ -2,6 +2,7 @@ import com.lambdaschool.orders.models.Customer; import com.lambdaschool.orders.repositories.CustomerRepository; +import com.lambdaschool.orders.views.OrderCounts; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -45,4 +46,11 @@ public List findByNameLike(String custname) return list; } + + @Override + public List getOrderCounts() + { + List rtnList = customerrepos.findOrderCounts(); + return rtnList; + } } diff --git a/src/main/java/com/lambdaschool/orders/services/OrderServices.java b/src/main/java/com/lambdaschool/orders/services/OrderServices.java index e1b16a6..af0471e 100644 --- a/src/main/java/com/lambdaschool/orders/services/OrderServices.java +++ b/src/main/java/com/lambdaschool/orders/services/OrderServices.java @@ -1,6 +1,7 @@ package com.lambdaschool.orders.services; import com.lambdaschool.orders.models.Order; +import com.lambdaschool.orders.views.OrderCounts; import java.util.List; @@ -10,4 +11,5 @@ public interface OrderServices Order findOrderByOrdnum(long ordnum); + } diff --git a/src/main/java/com/lambdaschool/orders/views/OrderCounts.java b/src/main/java/com/lambdaschool/orders/views/OrderCounts.java new file mode 100644 index 0000000..c7206ea --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/views/OrderCounts.java @@ -0,0 +1,7 @@ +package com.lambdaschool.orders.views; + +public interface OrderCounts +{ + String getCustname(); + int getCountorders(); +} From 492a31f35694c3b3d08c23935e70540bf8c16d79 Mon Sep 17 00:00:00 2001 From: L-Steinmacher Date: Tue, 13 Apr 2021 18:38:07 -0700 Subject: [PATCH 4/4] Stretch --- .../orders/controllers/CustomerController.java | 9 +++++++++ .../orders/repositories/CustomerRepository.java | 10 ++++++++++ .../lambdaschool/orders/services/CustomerServices.java | 2 ++ .../orders/services/CustomerServicesImpl.java | 8 ++++++++ .../com/lambdaschool/orders/views/AdvanceAmounts.java | 7 +++++++ 5 files changed, 36 insertions(+) create mode 100644 src/main/java/com/lambdaschool/orders/views/AdvanceAmounts.java diff --git a/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java b/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java index 09548d2..9bdc8e3 100644 --- a/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java +++ b/src/main/java/com/lambdaschool/orders/controllers/CustomerController.java @@ -2,6 +2,7 @@ import com.lambdaschool.orders.models.Customer; import com.lambdaschool.orders.services.CustomerServices; +import com.lambdaschool.orders.views.AdvanceAmounts; import com.lambdaschool.orders.views.OrderCounts; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -50,4 +51,12 @@ public ResponseEntity getOrderCounts() return new ResponseEntity<>(rtnList, HttpStatus.OK); } + // http://localhost:2019/customers/orders/advanceamount + @GetMapping(value = "orders/advanceamount", produces = "application/json") + public ResponseEntity getAdvanceAmount() + { + List rtnList = customerServices.getAdvanceAmounts(); + return new ResponseEntity<>(rtnList,HttpStatus.OK); + } + } diff --git a/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java b/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java index b88d14d..3169855 100644 --- a/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java +++ b/src/main/java/com/lambdaschool/orders/repositories/CustomerRepository.java @@ -1,6 +1,7 @@ package com.lambdaschool.orders.repositories; import com.lambdaschool.orders.models.Customer; +import com.lambdaschool.orders.views.AdvanceAmounts; import com.lambdaschool.orders.views.OrderCounts; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; @@ -19,4 +20,13 @@ public interface CustomerRepository extends CrudRepository "ORDER BY countorders DESC", nativeQuery = true) List findOrderCounts(); + + @Query(value = "SELECT c.custname , o.advanceamount " + + "FROM customers c LEFT JOIN orders o " + + "ON c.custcode = o.custcode " + + "WHERE o.advanceamount > 0 OR o.advanceamount != null " + + "GROUP BY o.advanceamount, c.custname " + + "ORDER BY o.advanceamount DESC", + nativeQuery = true) + List findAdvanceAmounts(); } diff --git a/src/main/java/com/lambdaschool/orders/services/CustomerServices.java b/src/main/java/com/lambdaschool/orders/services/CustomerServices.java index ae91a9f..65620ac 100644 --- a/src/main/java/com/lambdaschool/orders/services/CustomerServices.java +++ b/src/main/java/com/lambdaschool/orders/services/CustomerServices.java @@ -1,6 +1,7 @@ package com.lambdaschool.orders.services; import com.lambdaschool.orders.models.Customer; +import com.lambdaschool.orders.views.AdvanceAmounts; import com.lambdaschool.orders.views.OrderCounts; import java.util.List; @@ -13,5 +14,6 @@ public interface CustomerServices Customer findCustomerByCustcode(long custcode); List findByNameLike(String custname); List getOrderCounts(); + List getAdvanceAmounts(); } diff --git a/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java b/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java index 6f58869..622630e 100644 --- a/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java +++ b/src/main/java/com/lambdaschool/orders/services/CustomerServicesImpl.java @@ -2,6 +2,7 @@ import com.lambdaschool.orders.models.Customer; import com.lambdaschool.orders.repositories.CustomerRepository; +import com.lambdaschool.orders.views.AdvanceAmounts; import com.lambdaschool.orders.views.OrderCounts; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -53,4 +54,11 @@ public List getOrderCounts() List rtnList = customerrepos.findOrderCounts(); return rtnList; } + + @Override + public List getAdvanceAmounts() + { + List rtnList = customerrepos.findAdvanceAmounts(); + return rtnList; + } } diff --git a/src/main/java/com/lambdaschool/orders/views/AdvanceAmounts.java b/src/main/java/com/lambdaschool/orders/views/AdvanceAmounts.java new file mode 100644 index 0000000..b1d2cfb --- /dev/null +++ b/src/main/java/com/lambdaschool/orders/views/AdvanceAmounts.java @@ -0,0 +1,7 @@ +package com.lambdaschool.orders.views; + +public interface AdvanceAmounts +{ + String getCustname(); + double getAdvanceamount(); +}