From 4ff35304f25f4a27815576183a4fd98c510758fd Mon Sep 17 00:00:00 2001 From: Reid Phillips Date: Sat, 11 Jan 2020 10:50:36 -0600 Subject: [PATCH 01/31] Initial changes for sprint 2 sign in and main menu functionality, incomplete. --- .../controllers/MainMenuRouteController.java | 45 +++++++++++++++++ .../controllers/SignInRestController.java | 26 ++++++++++ .../controllers/SignInRouteController.java | 32 ++++++++++++ .../controllers/enums/ViewModelNames.java | 1 + src/main/resources/static/scripts/signIn.js | 8 +++ src/main/resources/templates/mainMenu.html | 49 +++++++++++++++++++ src/main/resources/templates/signIn.html | 31 ++++++++++++ 7 files changed, 192 insertions(+) create mode 100644 src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java create mode 100644 src/main/java/edu/uark/registerapp/controllers/SignInRestController.java create mode 100644 src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java create mode 100644 src/main/resources/static/scripts/signIn.js create mode 100644 src/main/resources/templates/mainMenu.html create mode 100644 src/main/resources/templates/signIn.html diff --git a/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java b/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java new file mode 100644 index 00000000..9a3cda2d --- /dev/null +++ b/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java @@ -0,0 +1,45 @@ +package edu.uark.registerapp.controllers; + +import java.util.Map; +import java.util.Optional; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; + +import edu.uark.registerapp.controllers.enums.ViewModelNames; +import edu.uark.registerapp.controllers.enums.ViewNames; +import edu.uark.registerapp.models.entities.ActiveUserEntity; + +@Controller +@RequestMapping(value = "/mainMenu") +public class MainMenuRouteController extends BaseRouteController { + @RequestMapping(method = RequestMethod.GET) + public ModelAndView start( + @RequestParam final Map queryParameters, + final HttpServletRequest request + ) { + + final Optional activeUserEntity = + this.getCurrentUser(request); + if (!activeUserEntity.isPresent()) { + return this.buildInvalidSessionResponse(); + } + + ModelAndView modelAndView = + this.setErrorMessageFromQueryString( + new ModelAndView(ViewNames.MAIN_MENU.getViewName()), + queryParameters); + + // TODO: Examine the ActiveUser classification if you want this information + modelAndView.addObject( + ViewModelNames.IS_ELEVATED_USER.getValue(), + true); + + return modelAndView; + } +} diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java new file mode 100644 index 00000000..68133574 --- /dev/null +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java @@ -0,0 +1,26 @@ +package edu.uark.registerapp.controllers; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import edu.uark.registerapp.controllers.enums.ViewNames; +import edu.uark.registerapp.models.api.ApiResponse; + +@RestController +@RequestMapping(value = "/api") +public class SignInRestController extends BaseRestController { + @RequestMapping(value="/signOut", method = RequestMethod.DELETE) + public @ResponseBody ApiResponse removeActiveUser( + final HttpServletRequest request + ) { + + // TODO: Sign out the user associated with request.getSession().getId() + + return (new ApiResponse()) + .setRedirectUrl(ViewNames.SIGN_IN.getRoute()); + } +} diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java new file mode 100644 index 00000000..306f98fb --- /dev/null +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java @@ -0,0 +1,32 @@ +package edu.uark.registerapp.controllers; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; + +import edu.uark.registerapp.controllers.enums.ViewNames; + +@Controller +@RequestMapping(value = "/") +public class SignInRouteController extends BaseRouteController { + // TODO: Route for initial page load + + @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + public ModelAndView performSignIn( + // TODO: Define an object that will represent the sign in request and add it as a parameter here + HttpServletRequest request + ) { + + // TODO: Use the credentials provided in the request body + // and the "id" property of the (HttpServletRequest)request.getSession() variable + // to sign in the user + + return new ModelAndView( + REDIRECT_PREPEND.concat( + ViewNames.MAIN_MENU.getRoute())); + } +} diff --git a/src/main/java/edu/uark/registerapp/controllers/enums/ViewModelNames.java b/src/main/java/edu/uark/registerapp/controllers/enums/ViewModelNames.java index 7c39b102..6ee26935 100644 --- a/src/main/java/edu/uark/registerapp/controllers/enums/ViewModelNames.java +++ b/src/main/java/edu/uark/registerapp/controllers/enums/ViewModelNames.java @@ -3,6 +3,7 @@ public enum ViewModelNames { NOT_DEFINED(""), ERROR_MESSAGE("errorMessage"), + IS_ELEVATED_USER("isElevatedUser"), PRODUCTS("products"), // Product listing PRODUCT("product"); // Product detail diff --git a/src/main/resources/static/scripts/signIn.js b/src/main/resources/static/scripts/signIn.js new file mode 100644 index 00000000..a1524a6a --- /dev/null +++ b/src/main/resources/static/scripts/signIn.js @@ -0,0 +1,8 @@ +document.addEventListener("DOMContentLoaded", function(event) { + // TODO: Anything you want to do when the page is loaded? +}); + +function validateForm() { + // TODO: Validate the user input + return true; +} diff --git a/src/main/resources/templates/mainMenu.html b/src/main/resources/templates/mainMenu.html new file mode 100644 index 00000000..36bdbf1b --- /dev/null +++ b/src/main/resources/templates/mainMenu.html @@ -0,0 +1,49 @@ + + + + Register - Main Menu + + + + + + + + + + +
+

Main Menu

+
+ +
+
+

+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/signIn.html b/src/main/resources/templates/signIn.html new file mode 100644 index 00000000..96f63609 --- /dev/null +++ b/src/main/resources/templates/signIn.html @@ -0,0 +1,31 @@ + + + + Register - Sign In + + + + + + + + + + +
+

Sign In

+
+ +
+
+

+
+ +
+ +
+
+ + + + \ No newline at end of file From 5b50dda13830b3de1eb5500b06497b6296e825ce Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Mon, 15 Feb 2021 22:08:18 -0600 Subject: [PATCH 02/31] Update datasource url so local machines can access database while running site --- src/main/resources/application.properties | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 301f32d2..ba5527df 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,8 +1,6 @@ spring.session.store-type=HAZELCAST -spring.datasource.url=${JDBC_DATABASE_URL} -spring.datasource.username=${JDBC_DATABASE_USERNAME} -spring.datasource.password=${JDBC_DATABASE_PASSWORD} +spring.datasource.url=jdbc:postgresql://ec2-50-16-108-254.compute-1.amazonaws.com:5432/dr0tn6cgvje1i?password=71048d253b3d26369694a983c9d05a5786dd9dfbe504b3e4f0156c8e3d13fff6&sslmode=require&user=xiwltegjgspgse spring.datasource.driverClassName=org.postgresql.Driver spring.datasource.platform=org.hibernate.dialect.PostgreSQLDialect spring.datasource.maxActive=5 From a808f68eba9bf2091df9eb8ff53d945f0d0af1e8 Mon Sep 17 00:00:00 2001 From: fxnggg <74802761+fxnggg@users.noreply.github.com> Date: Tue, 16 Feb 2021 17:35:24 -0600 Subject: [PATCH 03/31] Update .project --- .project | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.project b/.project index b51ee30c..2f16d643 100644 --- a/.project +++ b/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1613507358663 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + From a8b2cc97ff7494566faf42ecc09cbde1e6fd866d Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Thu, 25 Feb 2021 16:29:50 -0600 Subject: [PATCH 04/31] application.properties: Allows local instance of website to access remote database --- src/main/resources/application.properties | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 301f32d2..ba5527df 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,8 +1,6 @@ spring.session.store-type=HAZELCAST -spring.datasource.url=${JDBC_DATABASE_URL} -spring.datasource.username=${JDBC_DATABASE_USERNAME} -spring.datasource.password=${JDBC_DATABASE_PASSWORD} +spring.datasource.url=jdbc:postgresql://ec2-50-16-108-254.compute-1.amazonaws.com:5432/dr0tn6cgvje1i?password=71048d253b3d26369694a983c9d05a5786dd9dfbe504b3e4f0156c8e3d13fff6&sslmode=require&user=xiwltegjgspgse spring.datasource.driverClassName=org.postgresql.Driver spring.datasource.platform=org.hibernate.dialect.PostgreSQLDialect spring.datasource.maxActive=5 From 497eefdf911c74eb0eb81bb6ae73fbef2161aee0 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Sun, 28 Feb 2021 16:09:04 -0600 Subject: [PATCH 05/31] Adds new sign in page made by Jackie (no routing yet) --- src/main/resources/templates/signIn_v2.html | 51 +++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/main/resources/templates/signIn_v2.html diff --git a/src/main/resources/templates/signIn_v2.html b/src/main/resources/templates/signIn_v2.html new file mode 100644 index 00000000..61e61c6b --- /dev/null +++ b/src/main/resources/templates/signIn_v2.html @@ -0,0 +1,51 @@ + + + Team-Super-Mega-Store-store login + + +

Team-SMS-store login

+
+ +
+
+ +
+

+ + +
+
+ + + + \ No newline at end of file From ece30c4c1e4009b201021058e4de47db317aacf8 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Mon, 1 Mar 2021 21:53:30 -0600 Subject: [PATCH 06/31] Landing page is now the Sign In page. Product listings now accessible at /productListing/ --- README.md | 4 ++-- .../controllers/ProductListingRouteController.java | 2 +- .../registerapp/controllers/SignInRouteController.java | 7 ++++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 86e4a71d..59cba1ca 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,5 @@ The application defaults to port 8080. To start from the IDE press F5 to run. This will open the debug and run view. You will need to create a launch configuration which Visual Studio Code will help you with. - # Landing page (list available products) -`https://uarkregappjava.herokuapp.com/` \ No newline at end of file + # Landing page +`https://team-sms-store.herokuapp.com/` \ No newline at end of file diff --git a/src/main/java/edu/uark/registerapp/controllers/ProductListingRouteController.java b/src/main/java/edu/uark/registerapp/controllers/ProductListingRouteController.java index 3c2a1178..e96a45fb 100644 --- a/src/main/java/edu/uark/registerapp/controllers/ProductListingRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/ProductListingRouteController.java @@ -12,7 +12,7 @@ import edu.uark.registerapp.models.api.Product; @Controller -@RequestMapping(value = "/") +@RequestMapping(value = "/productListing") public class ProductListingRouteController { @RequestMapping(method = RequestMethod.GET) public ModelAndView showProductListing() { diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java index 306f98fb..a422555a 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java @@ -13,7 +13,12 @@ @Controller @RequestMapping(value = "/") public class SignInRouteController extends BaseRouteController { - // TODO: Route for initial page load + @RequestMapping(method = RequestMethod.GET) + public ModelAndView showSignIn() { + ModelAndView modelAndView = new ModelAndView(ViewNames.SIGN_IN.getViewName()); + + return modelAndView; + } @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public ModelAndView performSignIn( From dee63498e5b15be7f5dbaaa10a1c80f0830f248d Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Tue, 2 Mar 2021 10:22:01 -0600 Subject: [PATCH 07/31] Created form for sign in and created a test route to the main menu (/mainMenu/test). Also created new class for checking for active users (Task 5). --- .../employees/ActiveEmployeeExistsQuery.java | 29 +++++++++++ .../controllers/MainMenuRouteController.java | 5 ++ src/main/resources/static/scripts/signIn.js | 1 + src/main/resources/templates/signIn.html | 8 ++- src/main/resources/templates/signIn_v2.html | 51 ------------------- 5 files changed, 42 insertions(+), 52 deletions(-) create mode 100644 src/main/java/edu/uark/registerapp/commands/employees/ActiveEmployeeExistsQuery.java delete mode 100644 src/main/resources/templates/signIn_v2.html diff --git a/src/main/java/edu/uark/registerapp/commands/employees/ActiveEmployeeExistsQuery.java b/src/main/java/edu/uark/registerapp/commands/employees/ActiveEmployeeExistsQuery.java new file mode 100644 index 00000000..3a90ea3b --- /dev/null +++ b/src/main/java/edu/uark/registerapp/commands/employees/ActiveEmployeeExistsQuery.java @@ -0,0 +1,29 @@ +package edu.uark.registerapp.commands.employees; + +// import java.util.Optional; +// import java.util.UUID; + +// import edu.uark.registerapp.models.entities.EmployeeEntity; +// import edu.uark.registerapp.models.repositories.EmployeeRepository; + +public class ActiveEmployeeExistsQuery { + + + // public boolean existsByisActive(boolean isActive) { + + // return true; // TEMP + // } + + // public boolean existsByEmployeeId(int employeeId) { + + // return true; // TEMP + // } + + // public Optional findById(UUID id) { + + // } + + // public Optional findByEmployeeId(int employeeId) { + + // } +} diff --git a/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java b/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java index 9a3cda2d..a74241c3 100644 --- a/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java @@ -18,6 +18,11 @@ @Controller @RequestMapping(value = "/mainMenu") public class MainMenuRouteController extends BaseRouteController { + @RequestMapping(value = "/test", method = RequestMethod.GET) + public ModelAndView test() { + return new ModelAndView(ViewNames.MAIN_MENU.getViewName()); + } + @RequestMapping(method = RequestMethod.GET) public ModelAndView start( @RequestParam final Map queryParameters, diff --git a/src/main/resources/static/scripts/signIn.js b/src/main/resources/static/scripts/signIn.js index a1524a6a..8cb27555 100644 --- a/src/main/resources/static/scripts/signIn.js +++ b/src/main/resources/static/scripts/signIn.js @@ -1,5 +1,6 @@ document.addEventListener("DOMContentLoaded", function(event) { // TODO: Anything you want to do when the page is loaded? + // TODO: Check for any defined employees - If none, redirect to employee detail }); function validateForm() { diff --git a/src/main/resources/templates/signIn.html b/src/main/resources/templates/signIn.html index 96f63609..46b14d11 100644 --- a/src/main/resources/templates/signIn.html +++ b/src/main/resources/templates/signIn.html @@ -22,7 +22,13 @@

- + + +

+ + +

+
diff --git a/src/main/resources/templates/signIn_v2.html b/src/main/resources/templates/signIn_v2.html deleted file mode 100644 index 61e61c6b..00000000 --- a/src/main/resources/templates/signIn_v2.html +++ /dev/null @@ -1,51 +0,0 @@ - - - Team-Super-Mega-Store-store login - - -

Team-SMS-store login

-
- -
-
- -
-

- - -
-
- - - - \ No newline at end of file From fe178bc508e2890f4f98c4484e001eb5f4faf45d Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Tue, 2 Mar 2021 13:03:23 -0600 Subject: [PATCH 08/31] Final small changes before mergin with Sprint2Starter. Need to merge because some of the stuff from Sprint2Employee is needed for further sign in development. --- .../commands/employees/EmployeeSignInCommand.java | 14 ++++++++++++++ .../registerapp/models/api/EmployeeSignIn.java | 11 +++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java create mode 100644 src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java diff --git a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java new file mode 100644 index 00000000..2adba0c5 --- /dev/null +++ b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java @@ -0,0 +1,14 @@ +package edu.uark.registerapp.commands.employees; + +import edu.uark.registerapp.models.api.EmployeeSignIn; + +public class EmployeeSignInCommand { + + private EmployeeSignIn employeeSignIn; + private String sessionKey; + + // TO DO: Validate employeeSignIn's employeeId and password + + // TO DO: Query employee by id and verify matching passwords + +} diff --git a/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java b/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java new file mode 100644 index 00000000..dbf31634 --- /dev/null +++ b/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java @@ -0,0 +1,11 @@ +package edu.uark.registerapp.models.api; + +public class EmployeeSignIn { + private String employeeId; + private String password; + + EmployeeSignIn(String employeeId, String password) { + this.employeeId = employeeId; + this.password = password; + } +} From b1e7cefca1d29ce1c2b9667120fb1ac67de843ed Mon Sep 17 00:00:00 2001 From: fxnggg <74802761+fxnggg@users.noreply.github.com> Date: Tue, 2 Mar 2021 13:28:47 -0600 Subject: [PATCH 09/31] Add navigation buttons for main menu and custom CSS --- src/main/resources/static/styles/mainMenu.css | 17 +++++++++++++++++ src/main/resources/templates/mainMenu.html | 8 ++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/main/resources/static/styles/mainMenu.css diff --git a/src/main/resources/static/styles/mainMenu.css b/src/main/resources/static/styles/mainMenu.css new file mode 100644 index 00000000..9901e699 --- /dev/null +++ b/src/main/resources/static/styles/mainMenu.css @@ -0,0 +1,17 @@ +.navButtons { + margin-top: 20px; +} + +.button { + background-color: white; + border: 4px solid black; + color: black; + font-family: 'Times New Roman', Times, serif; + font-weight: bold; + font-size: 18px; + padding: 24px 24px; + margin: 10 auto; + cursor: pointer; + width: 25%; + display: block; +} \ No newline at end of file diff --git a/src/main/resources/templates/mainMenu.html b/src/main/resources/templates/mainMenu.html index 36bdbf1b..40ee8508 100644 --- a/src/main/resources/templates/mainMenu.html +++ b/src/main/resources/templates/mainMenu.html @@ -5,6 +5,7 @@ + @@ -22,6 +23,13 @@

+ From cb38233942b4a190b04a40f4ef384a94675a16b1 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Wed, 3 Mar 2021 16:18:35 -0600 Subject: [PATCH 11/31] Exclude .iml files. Added the exclusion of .iml files, which are generated by IntelliJ and are superfluous for most team members. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3466d7bf..605f4f96 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ HELP.md mvnw mvnw.cmd target/ - +# Ingore intelliJ generated module settings files +*.iml From 21b595c7700937d3ca1a81ee1dbc047fafc74c99 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Wed, 3 Mar 2021 16:37:24 -0600 Subject: [PATCH 12/31] ActiveEmployeeExistsQuery.java class complete. Cleaned up SignInRouteController.java. --- .../employees/ActiveEmployeeExistsQuery.java | 41 ++++++++----------- .../controllers/SignInRouteController.java | 14 +++---- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/src/main/java/edu/uark/registerapp/commands/employees/ActiveEmployeeExistsQuery.java b/src/main/java/edu/uark/registerapp/commands/employees/ActiveEmployeeExistsQuery.java index 3a90ea3b..a491ac29 100644 --- a/src/main/java/edu/uark/registerapp/commands/employees/ActiveEmployeeExistsQuery.java +++ b/src/main/java/edu/uark/registerapp/commands/employees/ActiveEmployeeExistsQuery.java @@ -1,29 +1,24 @@ package edu.uark.registerapp.commands.employees; -// import java.util.Optional; -// import java.util.UUID; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; -// import edu.uark.registerapp.models.entities.EmployeeEntity; -// import edu.uark.registerapp.models.repositories.EmployeeRepository; +import edu.uark.registerapp.models.repositories.EmployeeRepository; +import edu.uark.registerapp.commands.exceptions.NotFoundException; +@Service public class ActiveEmployeeExistsQuery { - - - // public boolean existsByisActive(boolean isActive) { - - // return true; // TEMP - // } - - // public boolean existsByEmployeeId(int employeeId) { - - // return true; // TEMP - // } - - // public Optional findById(UUID id) { - - // } - - // public Optional findByEmployeeId(int employeeId) { - - // } + public void execute() + { + final Boolean activeEmployeeExists = + this.employeeRepository.existsByIsActive(true); + + if (!activeEmployeeExists) + { + throw new NotFoundException("Employee"); + } + } + + @Autowired + private EmployeeRepository employeeRepository; } diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java index a422555a..704b3cd9 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java @@ -12,19 +12,19 @@ @Controller @RequestMapping(value = "/") -public class SignInRouteController extends BaseRouteController { +public class SignInRouteController extends BaseRouteController +{ @RequestMapping(method = RequestMethod.GET) - public ModelAndView showSignIn() { - ModelAndView modelAndView = new ModelAndView(ViewNames.SIGN_IN.getViewName()); - - return modelAndView; + public ModelAndView showSignIn() + { + return new ModelAndView(ViewNames.SIGN_IN.getViewName()); } @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public ModelAndView performSignIn( // TODO: Define an object that will represent the sign in request and add it as a parameter here - HttpServletRequest request - ) { + HttpServletRequest request) + { // TODO: Use the credentials provided in the request body // and the "id" property of the (HttpServletRequest)request.getSession() variable From 4aa8ea7cf7171683af3c2be9cf40496172509352 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Wed, 3 Mar 2021 17:47:58 -0600 Subject: [PATCH 13/31] Task 3 COMPLETE! --- src/main/resources/static/scripts/signIn.js | 34 +++++++++++++++++++-- src/main/resources/templates/signIn.html | 6 ++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/resources/static/scripts/signIn.js b/src/main/resources/static/scripts/signIn.js index 8cb27555..e84c19c5 100644 --- a/src/main/resources/static/scripts/signIn.js +++ b/src/main/resources/static/scripts/signIn.js @@ -1,9 +1,37 @@ -document.addEventListener("DOMContentLoaded", function(event) { +document.addEventListener("DOMContentLoaded", function(event) +{ // TODO: Anything you want to do when the page is loaded? // TODO: Check for any defined employees - If none, redirect to employee detail }); -function validateForm() { - // TODO: Validate the user input +function validateForm() +{ + // Validate employeeId + let employeeId = document.forms["signIn"]["employeeId"].value; + + if (employeeId.length == 0) + { + alert("Please enter your ID!"); + return false; + } + + /* + There is no need to check if the employeeId entered is an integer. + This is because the form entry has type="number", which means this + function won't even be called if the entered value isn't an integer. + + This function also doesn't need to check for ID size because the + input's "max" attribute takes care of that. + */ + + // Validate password + let password = document.forms["signIn"]["password"].value; + + if (password.length == 0) + { + alert("Please enter your password!"); + return false; + } + return true; } diff --git a/src/main/resources/templates/signIn.html b/src/main/resources/templates/signIn.html index 46b14d11..5a9076f2 100644 --- a/src/main/resources/templates/signIn.html +++ b/src/main/resources/templates/signIn.html @@ -20,10 +20,10 @@

Sign In

- -
+ + - +

From 74b7a8d1d6282ed76319e59d94ad5934aa4c67e1 Mon Sep 17 00:00:00 2001 From: fxnggg <74802761+fxnggg@users.noreply.github.com> Date: Wed, 3 Mar 2021 23:11:15 -0600 Subject: [PATCH 14/31] Add EmployeeSignIn object parameter --- .../registerapp/controllers/SignInRouteController.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java index 704b3cd9..9ced1cda 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java @@ -2,14 +2,20 @@ import javax.servlet.http.HttpServletRequest; +import java.util.Map; + import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import edu.uark.registerapp.controllers.enums.ViewNames; +import edu.uark.registerapp.models.api.EmployeeSignIn; + + @Controller @RequestMapping(value = "/") public class SignInRouteController extends BaseRouteController @@ -23,13 +29,14 @@ public ModelAndView showSignIn() @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public ModelAndView performSignIn( // TODO: Define an object that will represent the sign in request and add it as a parameter here - HttpServletRequest request) + EmployeeSignIn signIn, HttpServletRequest request) { // TODO: Use the credentials provided in the request body // and the "id" property of the (HttpServletRequest)request.getSession() variable // to sign in the user + return new ModelAndView( REDIRECT_PREPEND.concat( ViewNames.MAIN_MENU.getRoute())); From e97da037921b96f05a399af5ffed0a0d5ceb9b83 Mon Sep 17 00:00:00 2001 From: fxnggg <74802761+fxnggg@users.noreply.github.com> Date: Wed, 3 Mar 2021 23:11:42 -0600 Subject: [PATCH 15/31] Create method to validate sign in --- .../employees/EmployeeSignInCommand.java | 24 ++++++++++++++++++- .../models/api/EmployeeSignIn.java | 10 ++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java index 2adba0c5..f42a339e 100644 --- a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java @@ -1,6 +1,8 @@ package edu.uark.registerapp.commands.employees; import edu.uark.registerapp.models.api.EmployeeSignIn; +import edu.uark.registerapp.models.repositories.EmployeeRepository; + public class EmployeeSignInCommand { @@ -8,7 +10,27 @@ public class EmployeeSignInCommand { private String sessionKey; // TO DO: Validate employeeSignIn's employeeId and password + boolean validateSignIn() + { + if(employeeSignIn.getId().equals("")) + return false; - // TO DO: Query employee by id and verify matching passwords + String idNum = employeeSignIn.getId(); + for(int i = 0; i < idNum.length(); i++) + { + if(!(idNum.charAt(i) >= 0 && idNum.charAt(i) <= 9)) + return false; + } + if(employeeSignIn.getPassword().equals("")) + return false; + + return true; + + } + // TO DO: Query employee by id and verify matching passwords + /*if(validateSignIn()) + { + EmployeeRepository.queryByEmployeeId() + }*/ } diff --git a/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java b/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java index dbf31634..0e67c7b8 100644 --- a/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java +++ b/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java @@ -8,4 +8,14 @@ public class EmployeeSignIn { this.employeeId = employeeId; this.password = password; } + + public String getId() + { + return this.employeeId; + } + + public String getPassword() + { + return this.password; + } } From aa2bc340538a742642a2c20566b363e65ed98d4f Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Thu, 4 Mar 2021 13:40:10 -0600 Subject: [PATCH 16/31] Completed the EmployeeSignInCommand.java class. --- .../employees/EmployeeSignInCommand.java | 91 ++++++++++++++++--- .../controllers/SignInRouteController.java | 4 +- src/main/resources/static/scripts/signIn.js | 1 - src/main/resources/templates/signIn.html | 1 - 4 files changed, 81 insertions(+), 16 deletions(-) diff --git a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java index f42a339e..16c97549 100644 --- a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java @@ -1,6 +1,17 @@ package edu.uark.registerapp.commands.employees; +import java.util.Optional; +import java.util.Arrays; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.transaction.Transactional; + import edu.uark.registerapp.models.api.EmployeeSignIn; +import edu.uark.registerapp.models.entities.ActiveUserEntity; +import edu.uark.registerapp.models.entities.EmployeeEntity; +import edu.uark.registerapp.models.repositories.ActiveUserRepository; import edu.uark.registerapp.models.repositories.EmployeeRepository; @@ -8,17 +19,73 @@ public class EmployeeSignInCommand { private EmployeeSignIn employeeSignIn; private String sessionKey; + + EmployeeSignInCommand(EmployeeSignIn employeeSignIn, String sessionKey) + { + this.employeeSignIn = employeeSignIn; + this.sessionKey = sessionKey; + } + + @Transactional + boolean execute() + { + if (!validateSignIn()) // Credentials are invalid + return false; + + Optional employee = // Finds employee by employee ID + employeeRepository.findByEmployeeId( + Integer.parseInt(employeeSignIn.getId())); + + if (employee.isEmpty()) // Employee does not exist + return false; + + if (!Arrays.equals( // Passwords do NOT match + employeeSignIn.getPassword().getBytes(), + employee.get().getPassword())) + { + return false; + } + + // NOTE: At this point, we have a valid sign in + + Optional activeUser = // Finds active user by UUID + activeUserRepository.findByEmployeeId(employee.get().getId()); + + if (activeUser.isPresent()) // Updates existing active user's session key + { + ActiveUserEntity user = activeUser.get().setSessionKey(sessionKey); + activeUserRepository.save(user); + } + else // Creates new active user + { + ActiveUserEntity user = new ActiveUserEntity(); + + user.setClassification(employee.get().getClassification()); + + // Create full name then set active user name + String employeeName = employee.get().getFirstName(); + employeeName.concat(" ").concat(employee.get().getLastName()); + user.setName(employeeName); + + user.setEmployeeId(employee.get().getId()); + user.setSessionKey(sessionKey); + + activeUserRepository.save(user); + } + + return true; + } - // TO DO: Validate employeeSignIn's employeeId and password - boolean validateSignIn() + private boolean validateSignIn() { - if(employeeSignIn.getId().equals("")) + String employeeId = employeeSignIn.getId(); + + if (StringUtils.isBlank(employeeId) || employeeId.length() > 5) return false; - String idNum = employeeSignIn.getId(); - for(int i = 0; i < idNum.length(); i++) + for (int i = 0; i < employeeId.length(); i++) { - if(!(idNum.charAt(i) >= 0 && idNum.charAt(i) <= 9)) + if(!(employeeId.charAt(i) >= 0 && employeeId.charAt(i) <= 9)) return false; } @@ -26,11 +93,11 @@ boolean validateSignIn() return false; return true; - } - // TO DO: Query employee by id and verify matching passwords - /*if(validateSignIn()) - { - EmployeeRepository.queryByEmployeeId() - }*/ + + @Autowired + private EmployeeRepository employeeRepository; + + @Autowired + private ActiveUserRepository activeUserRepository; } diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java index 9ced1cda..d145799b 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java @@ -28,8 +28,8 @@ public ModelAndView showSignIn() @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public ModelAndView performSignIn( - // TODO: Define an object that will represent the sign in request and add it as a parameter here - EmployeeSignIn signIn, HttpServletRequest request) + EmployeeSignIn signIn, + HttpServletRequest request) { // TODO: Use the credentials provided in the request body diff --git a/src/main/resources/static/scripts/signIn.js b/src/main/resources/static/scripts/signIn.js index e84c19c5..5ccc507c 100644 --- a/src/main/resources/static/scripts/signIn.js +++ b/src/main/resources/static/scripts/signIn.js @@ -1,7 +1,6 @@ document.addEventListener("DOMContentLoaded", function(event) { // TODO: Anything you want to do when the page is loaded? - // TODO: Check for any defined employees - If none, redirect to employee detail }); function validateForm() diff --git a/src/main/resources/templates/signIn.html b/src/main/resources/templates/signIn.html index 5a9076f2..1e8ce05b 100644 --- a/src/main/resources/templates/signIn.html +++ b/src/main/resources/templates/signIn.html @@ -20,7 +20,6 @@

Sign In

- From eb023fab8d569ac36e0fcd3f7980d038613d8cb5 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Thu, 4 Mar 2021 16:40:02 -0600 Subject: [PATCH 17/31] Added EMPTY employeeDetail.html. Added ActiveUserDeleteCommand.java (incomplete). Added condition for signIn redirect to employeeDetail (but no redirect functionality). Added routing to employeeDetail at '/employeeDetail'. --- .../activeUsers/ActiveUserDeleteCommand.java | 13 +++++++++ .../employees/EmployeeSignInCommand.java | 2 +- .../controllers/SignInRouteController.java | 17 ++++++++++++ .../models/api/EmployeeSignIn.java | 1 + .../resources/templates/employeeDetail.html | 27 +++++++++++++++++++ 5 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java create mode 100644 src/main/resources/templates/employeeDetail.html diff --git a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java new file mode 100644 index 00000000..b0f7520a --- /dev/null +++ b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java @@ -0,0 +1,13 @@ +package edu.uark.registerapp.commands.activeUsers; + +public class ActiveUserDeleteCommand { + + private String sessionKey; + + ActiveUserDeleteCommand(String sessionKey) + { + this.sessionKey = sessionKey; + } + + // public boolean execute() +} diff --git a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java index 16c97549..fcc54a41 100644 --- a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java @@ -27,7 +27,7 @@ public class EmployeeSignInCommand { } @Transactional - boolean execute() + public boolean execute() { if (!validateSignIn()) // Credentials are invalid return false; diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java index d145799b..ecb7a4c4 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java @@ -4,6 +4,7 @@ import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -14,6 +15,7 @@ import edu.uark.registerapp.controllers.enums.ViewNames; import edu.uark.registerapp.models.api.EmployeeSignIn; +import edu.uark.registerapp.models.repositories.EmployeeRepository; @Controller @@ -23,6 +25,12 @@ public class SignInRouteController extends BaseRouteController @RequestMapping(method = RequestMethod.GET) public ModelAndView showSignIn() { + // Check if any employees exist. If none, redirect to employeeDetail. + if (this.employeeRepository.count() == 0) + { + // TO DO: Redirect to employeeDetail + } + return new ModelAndView(ViewNames.SIGN_IN.getViewName()); } @@ -41,4 +49,13 @@ public ModelAndView performSignIn( REDIRECT_PREPEND.concat( ViewNames.MAIN_MENU.getRoute())); } + + @RequestMapping(value = "/employeeDetail", method = RequestMethod.GET) + public ModelAndView showEmployeeDetail() + { + return new ModelAndView(ViewNames.EMPLOYEE_DETAIL.getViewName()); + } + + @Autowired + EmployeeRepository employeeRepository; } diff --git a/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java b/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java index 0e67c7b8..8f987098 100644 --- a/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java +++ b/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java @@ -1,6 +1,7 @@ package edu.uark.registerapp.models.api; public class EmployeeSignIn { + private String employeeId; private String password; diff --git a/src/main/resources/templates/employeeDetail.html b/src/main/resources/templates/employeeDetail.html new file mode 100644 index 00000000..c8b6f479 --- /dev/null +++ b/src/main/resources/templates/employeeDetail.html @@ -0,0 +1,27 @@ + + + + Employee Detail + + + + + + + + + +
+

Employee Detail

+
+ +
+
+

+
+

This page is under construction.

+
+ + + + \ No newline at end of file From 9ea02528ddd10cd839d3115de7e435bdfe0e2044 Mon Sep 17 00:00:00 2001 From: EvanPerez777 Date: Thu, 4 Mar 2021 21:45:14 -0600 Subject: [PATCH 18/31] Update SignInRestController.java Signed out the user associated with request.getSession().getId() --- .../registerapp/controllers/SignInRestController.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java index 68133574..02bd8787 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java @@ -2,11 +2,14 @@ import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import edu.uark.registerapp.commands.activeUsers.ActiveUserDeleteCommand; import edu.uark.registerapp.controllers.enums.ViewNames; import edu.uark.registerapp.models.api.ApiResponse; @@ -20,7 +23,15 @@ public class SignInRestController extends BaseRestController { // TODO: Sign out the user associated with request.getSession().getId() + this.activeUserDeleteCommand + .setSessionKey(request.getSession().getId()) + .execute(); + + return (new ApiResponse()) .setRedirectUrl(ViewNames.SIGN_IN.getRoute()); } + // Properties + @Autowired + private ActiveUserDeleteCommand activeUserDeleteCommand; } From 08bddbc1148f3ed4be06fc860fbbfafb05280af1 Mon Sep 17 00:00:00 2001 From: EvanPerez777 Date: Fri, 5 Mar 2021 11:08:16 -0600 Subject: [PATCH 19/31] Update ActiveUserDeleteCommand.java --- .../activeUsers/ActiveUserDeleteCommand.java | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java index b0f7520a..a9fb015e 100644 --- a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java @@ -1,7 +1,32 @@ package edu.uark.registerapp.commands.activeUsers; -public class ActiveUserDeleteCommand { +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.transaction.annotation.Transactional; + +import edu.uark.registerapp.commands.VoidCommandInterface; +import edu.uark.registerapp.models.entities.ActiveUserEntity; +import edu.uark.registerapp.models.repositories.ActiveUserRepository; + +public class ActiveUserDeleteCommand implements VoidCommandInterface { + + + + @Transactional + @Override + public void execute() { + final Optional activeUserEntity = + this.activeUserRepository.findBySessionKey(this.sessionKey); + + if (activeUserEntity.isPresent()) { + this.activeUserRepository.delete(activeUserEntity.get()); + } + } + + private String sessionKey; ActiveUserDeleteCommand(String sessionKey) @@ -9,5 +34,19 @@ public class ActiveUserDeleteCommand { this.sessionKey = sessionKey; } - // public boolean execute() + public String getSessionKey() + { + return this.sessionKey; + } + + public ActiveUserDeleteCommand setSessionKey(String sessionKey) { + this.sessionKey = sessionKey; + return this; + } + + // Properties + @Autowired + private ActiveUserRepository activeUserRepository; + + } From d48642ec324de6fa29cbf5a381dadd5784a64be5 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Fri, 5 Mar 2021 14:14:06 -0600 Subject: [PATCH 20/31] Sign in works. Still need to add error message for invalid login info. Main menu employee detail button works, as well. Still need to finish employeDetail.html. --- .../activeUsers/ActiveUserDeleteCommand.java | 6 +-- .../employees/EmployeeSignInCommand.java | 47 ++++++++++++++---- .../EmployeeDetailRouteController.java | 18 +++++++ .../controllers/MainMenuRouteController.java | 4 -- .../controllers/SignInRestController.java | 14 +++--- .../controllers/SignInRouteController.java | 49 +++++++++++++------ .../models/api/EmployeeSignIn.java | 15 +++++- src/main/resources/static/scripts/mainMenu.js | 11 ++++- 8 files changed, 120 insertions(+), 44 deletions(-) create mode 100644 src/main/java/edu/uark/registerapp/controllers/EmployeeDetailRouteController.java diff --git a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java index a9fb015e..df8a97b8 100644 --- a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java @@ -3,7 +3,6 @@ import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.transaction.annotation.Transactional; import edu.uark.registerapp.commands.VoidCommandInterface; @@ -12,11 +11,8 @@ public class ActiveUserDeleteCommand implements VoidCommandInterface { - - - - @Transactional @Override + @Transactional public void execute() { final Optional activeUserEntity = this.activeUserRepository.findBySessionKey(this.sessionKey); diff --git a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java index fcc54a41..7c62a094 100644 --- a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java @@ -1,10 +1,12 @@ package edu.uark.registerapp.commands.employees; import java.util.Optional; -import java.util.Arrays; +import java.util.Arrays; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import javax.transaction.Transactional; @@ -20,12 +22,18 @@ public class EmployeeSignInCommand { private EmployeeSignIn employeeSignIn; private String sessionKey; - EmployeeSignInCommand(EmployeeSignIn employeeSignIn, String sessionKey) + public EmployeeSignInCommand(EmployeeSignIn employeeSignIn, String sessionKey) { this.employeeSignIn = employeeSignIn; this.sessionKey = sessionKey; } + EmployeeSignInCommand() + { + this.employeeSignIn = new EmployeeSignIn(); + this.sessionKey = ""; + } + @Transactional public boolean execute() { @@ -40,8 +48,8 @@ public boolean execute() return false; if (!Arrays.equals( // Passwords do NOT match - employeeSignIn.getPassword().getBytes(), - employee.get().getPassword())) + employeeSignIn.getPassword().getBytes(), + employee.get().getPassword())) { return false; } @@ -65,6 +73,7 @@ public boolean execute() // Create full name then set active user name String employeeName = employee.get().getFirstName(); employeeName.concat(" ").concat(employee.get().getLastName()); + user.setName(employeeName); user.setEmployeeId(employee.get().getId()); @@ -81,23 +90,43 @@ private boolean validateSignIn() String employeeId = employeeSignIn.getId(); if (StringUtils.isBlank(employeeId) || employeeId.length() > 5) + { return false; + } for (int i = 0; i < employeeId.length(); i++) { - if(!(employeeId.charAt(i) >= 0 && employeeId.charAt(i) <= 9)) + if(!(employeeId.charAt(i) >= '0' && employeeId.charAt(i) <= '9')) + { return false; + } } - if(employeeSignIn.getPassword().equals("")) + if(StringUtils.isBlank(employeeSignIn.getPassword())) + { return false; + } return true; } - @Autowired - private EmployeeRepository employeeRepository; + /* + ONLY CALLED BY SignInRouteController + PROBABLY A BAD WAY TO DO THIS + I think @Autowired doesn't work because this class is not a controller... + ...hence SignInRouteController setting this property + */ + public void setEmployeeRepository(EmployeeRepository employeeRepository) + { + this.employeeRepository = employeeRepository; + } - @Autowired + // THIS IS ALSO PROBABLY BAD FOR THE SAME REASON AS ABOVE + public void setActiveUserRepository(ActiveUserRepository activeUserRepository) + { + this.activeUserRepository = activeUserRepository; + } + + private EmployeeRepository employeeRepository; private ActiveUserRepository activeUserRepository; } diff --git a/src/main/java/edu/uark/registerapp/controllers/EmployeeDetailRouteController.java b/src/main/java/edu/uark/registerapp/controllers/EmployeeDetailRouteController.java new file mode 100644 index 00000000..6f467bea --- /dev/null +++ b/src/main/java/edu/uark/registerapp/controllers/EmployeeDetailRouteController.java @@ -0,0 +1,18 @@ +package edu.uark.registerapp.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; + +import edu.uark.registerapp.controllers.enums.ViewNames; + +@Controller +@RequestMapping(value = "/employeeDetail") +public class EmployeeDetailRouteController { + @RequestMapping(method = RequestMethod.GET) + public ModelAndView showEmployeeDetail() + { + return new ModelAndView(ViewNames.EMPLOYEE_DETAIL.getViewName()); + } +} diff --git a/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java b/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java index a74241c3..0efc49c0 100644 --- a/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java @@ -18,10 +18,6 @@ @Controller @RequestMapping(value = "/mainMenu") public class MainMenuRouteController extends BaseRouteController { - @RequestMapping(value = "/test", method = RequestMethod.GET) - public ModelAndView test() { - return new ModelAndView(ViewNames.MAIN_MENU.getViewName()); - } @RequestMapping(method = RequestMethod.GET) public ModelAndView start( diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java index 02bd8787..516ccda5 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java @@ -20,18 +20,16 @@ public class SignInRestController extends BaseRestController { public @ResponseBody ApiResponse removeActiveUser( final HttpServletRequest request ) { - - // TODO: Sign out the user associated with request.getSession().getId() - - this.activeUserDeleteCommand - .setSessionKey(request.getSession().getId()) - .execute(); + // this.activeUserDeleteCommand + // .setSessionKey(request.getSession().getId()) + // .execute(); return (new ApiResponse()) .setRedirectUrl(ViewNames.SIGN_IN.getRoute()); } + // Properties - @Autowired - private ActiveUserDeleteCommand activeUserDeleteCommand; + // @Autowired + // private ActiveUserDeleteCommand activeUserDeleteCommand; } diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java index ecb7a4c4..1e2f7d4a 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java @@ -2,19 +2,20 @@ import javax.servlet.http.HttpServletRequest; -import java.util.Map; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import org.springframework.web.servlet.view.RedirectView; +import edu.uark.registerapp.commands.employees.EmployeeSignInCommand; import edu.uark.registerapp.controllers.enums.ViewNames; import edu.uark.registerapp.models.api.EmployeeSignIn; +import edu.uark.registerapp.models.repositories.ActiveUserRepository; import edu.uark.registerapp.models.repositories.EmployeeRepository; @@ -28,7 +29,8 @@ public ModelAndView showSignIn() // Check if any employees exist. If none, redirect to employeeDetail. if (this.employeeRepository.count() == 0) { - // TO DO: Redirect to employeeDetail + return new ModelAndView( + REDIRECT_PREPEND.concat(ViewNames.EMPLOYEE_DETAIL.getRoute())); } return new ModelAndView(ViewNames.SIGN_IN.getViewName()); @@ -39,23 +41,40 @@ public ModelAndView performSignIn( EmployeeSignIn signIn, HttpServletRequest request) { + signIn = new EmployeeSignIn(request.getParameter("employeeId"), + request.getParameter("password")); - // TODO: Use the credentials provided in the request body - // and the "id" property of the (HttpServletRequest)request.getSession() variable - // to sign in the user + EmployeeSignInCommand signInCommand = new EmployeeSignInCommand(signIn, + request.getSession().getId()); + // See comments on this set method in EmployeeSignInCommand.java + // TLDR: I don't like doing it this way but I don't know how to do better + signInCommand.setEmployeeRepository(this.employeeRepository); + signInCommand.setActiveUserRepository(this.activeUserRepository); - return new ModelAndView( - REDIRECT_PREPEND.concat( - ViewNames.MAIN_MENU.getRoute())); - } + /* + We don't need to validate the sign in information here because + EmployeeSignInCommand.execute() does this and returns false + if unsuccessful. + */ - @RequestMapping(value = "/employeeDetail", method = RequestMethod.GET) - public ModelAndView showEmployeeDetail() - { - return new ModelAndView(ViewNames.EMPLOYEE_DETAIL.getViewName()); + if (signInCommand.execute()) // Sign in is successful... + { + return new ModelAndView( + REDIRECT_PREPEND.concat(ViewNames.MAIN_MENU.getRoute())); + } + else + { + // TO DO: Add error message for failed sign in + + return new ModelAndView(ViewNames.SIGN_IN.getViewName()); + } + } @Autowired EmployeeRepository employeeRepository; + + @Autowired + ActiveUserRepository activeUserRepository; } diff --git a/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java b/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java index 8f987098..f37f59ae 100644 --- a/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java +++ b/src/main/java/edu/uark/registerapp/models/api/EmployeeSignIn.java @@ -5,11 +5,24 @@ public class EmployeeSignIn { private String employeeId; private String password; - EmployeeSignIn(String employeeId, String password) { + public EmployeeSignIn(String employeeId, String password) + { this.employeeId = employeeId; this.password = password; } + public EmployeeSignIn(int employeeId, String password) + { + this.employeeId = Integer.toString(employeeId); + this.password = password; + } + + public EmployeeSignIn() + { + this.employeeId = ""; + this.password = ""; + } + public String getId() { return this.employeeId; diff --git a/src/main/resources/static/scripts/mainMenu.js b/src/main/resources/static/scripts/mainMenu.js index cd890cda..811e4014 100644 --- a/src/main/resources/static/scripts/mainMenu.js +++ b/src/main/resources/static/scripts/mainMenu.js @@ -1,5 +1,6 @@ window.addEventListener('DOMContentLoaded', (event) => { - document.getElementById("productsButton").addEventListener('click', navigate); + document.getElementById("productsButton").addEventListener('click', goToProductListing); + document.getElementById("employeeButton").addEventListener('click', goToEmployeeDetail); document.getElementById("transactionButton").addEventListener('click', displayError); document.getElementById("salesButton").addEventListener('click', displayError); document.getElementById("cashierButton").addEventListener('click', displayError); @@ -7,13 +8,19 @@ window.addEventListener('DOMContentLoaded', (event) => { // Navigate to products listing page -function navigate(event) +function goToProductListing(event) { window.location.assign( "/productListing/" ); } +// Navigate to employee detail page +function goToEmployeeDetail(event) +{ + window.location.assign("/employeeDetail/"); +} + // Display error message function displayError(errorMessage) { errorMessage = "Functionality has not yet been implemented."; From ed4e637258ebb3c149dfd9f0e416bf61284876b0 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Fri, 5 Mar 2021 14:55:32 -0600 Subject: [PATCH 21/31] Fixed ActiveUserDeleteCommand and related calls. --- .../activeUsers/ActiveUserDeleteCommand.java | 46 ++++++++++--------- .../employees/EmployeeSignInCommand.java | 3 -- .../controllers/SignInRestController.java | 15 +++--- .../controllers/SignInRouteController.java | 3 -- 4 files changed, 32 insertions(+), 35 deletions(-) diff --git a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java index df8a97b8..cba1ad4f 100644 --- a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java @@ -2,18 +2,39 @@ import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import edu.uark.registerapp.commands.VoidCommandInterface; import edu.uark.registerapp.models.entities.ActiveUserEntity; import edu.uark.registerapp.models.repositories.ActiveUserRepository; +@Service public class ActiveUserDeleteCommand implements VoidCommandInterface { - + + private String sessionKey; + private ActiveUserRepository activeUserRepository; + + public ActiveUserDeleteCommand(String sessionKey, ActiveUserRepository activeUserRepository) + { + this.sessionKey = sessionKey; + this.activeUserRepository = activeUserRepository; + } + + public ActiveUserDeleteCommand() + { + this.sessionKey = ""; + } + @Override @Transactional - public void execute() { + public void execute() + { + if (activeUserRepository == null) + { + return; + } + final Optional activeUserEntity = this.activeUserRepository.findBySessionKey(this.sessionKey); @@ -22,27 +43,8 @@ public void execute() { } } - - private String sessionKey; - - ActiveUserDeleteCommand(String sessionKey) - { - this.sessionKey = sessionKey; - } - public String getSessionKey() { return this.sessionKey; } - - public ActiveUserDeleteCommand setSessionKey(String sessionKey) { - this.sessionKey = sessionKey; - return this; - } - - // Properties - @Autowired - private ActiveUserRepository activeUserRepository; - - } diff --git a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java index 7c62a094..2f39fcd3 100644 --- a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java @@ -4,9 +4,6 @@ import java.util.Arrays; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; import javax.transaction.Transactional; diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java index 516ccda5..7bedc81b 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java @@ -3,7 +3,6 @@ import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -12,6 +11,7 @@ import edu.uark.registerapp.commands.activeUsers.ActiveUserDeleteCommand; import edu.uark.registerapp.controllers.enums.ViewNames; import edu.uark.registerapp.models.api.ApiResponse; +import edu.uark.registerapp.models.repositories.ActiveUserRepository; @RestController @RequestMapping(value = "/api") @@ -20,16 +20,17 @@ public class SignInRestController extends BaseRestController { public @ResponseBody ApiResponse removeActiveUser( final HttpServletRequest request ) { - // this.activeUserDeleteCommand - // .setSessionKey(request.getSession().getId()) - // .execute(); - + ActiveUserDeleteCommand signOutCommand = + new ActiveUserDeleteCommand(request.getSession().getId(), + this.activeUserRepository); + + signOutCommand.execute(); return (new ApiResponse()) .setRedirectUrl(ViewNames.SIGN_IN.getRoute()); } // Properties - // @Autowired - // private ActiveUserDeleteCommand activeUserDeleteCommand; + @Autowired + private ActiveUserRepository activeUserRepository; } diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java index 1e2f7d4a..20cfad3c 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java @@ -8,8 +8,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; -import org.springframework.web.servlet.view.RedirectView; import edu.uark.registerapp.commands.employees.EmployeeSignInCommand; import edu.uark.registerapp.controllers.enums.ViewNames; @@ -69,7 +67,6 @@ public ModelAndView performSignIn( return new ModelAndView(ViewNames.SIGN_IN.getViewName()); } - } @Autowired From 69cf9043b3762b6e55454f44d7f84c54849e66da Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Fri, 5 Mar 2021 15:53:45 -0600 Subject: [PATCH 22/31] Invalid login now shows error. 'Active' value in employee table now updates with log in/out. --- .../activeUsers/ActiveUserDeleteCommand.java | 23 +++++++++++++++++-- .../employees/EmployeeSignInCommand.java | 5 ++++ .../controllers/SignInRestController.java | 10 ++++++-- .../controllers/SignInRouteController.java | 16 ++++++++++--- 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java index cba1ad4f..8b5eba52 100644 --- a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java @@ -7,18 +7,25 @@ import edu.uark.registerapp.commands.VoidCommandInterface; import edu.uark.registerapp.models.entities.ActiveUserEntity; +import edu.uark.registerapp.models.entities.EmployeeEntity; import edu.uark.registerapp.models.repositories.ActiveUserRepository; +import edu.uark.registerapp.models.repositories.EmployeeRepository; @Service public class ActiveUserDeleteCommand implements VoidCommandInterface { private String sessionKey; private ActiveUserRepository activeUserRepository; + private EmployeeRepository employeeRepository; - public ActiveUserDeleteCommand(String sessionKey, ActiveUserRepository activeUserRepository) + public ActiveUserDeleteCommand( + String sessionKey, + ActiveUserRepository activeUserRepository, + EmployeeRepository employeeRepository) { this.sessionKey = sessionKey; this.activeUserRepository = activeUserRepository; + this.employeeRepository = employeeRepository; } public ActiveUserDeleteCommand() @@ -38,7 +45,19 @@ public void execute() final Optional activeUserEntity = this.activeUserRepository.findBySessionKey(this.sessionKey); - if (activeUserEntity.isPresent()) { + if (activeUserEntity.isPresent()) // Found active user + { + if (employeeRepository != null) + { + Optional employee = + employeeRepository.findById(activeUserEntity.get().getId()); + + if (employee.isPresent()) // Found corresponding entry in 'employee' table + { + employee.get().setIsActive(false); + } + } + this.activeUserRepository.delete(activeUserEntity.get()); } } diff --git a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java index 2f39fcd3..f3c886f6 100644 --- a/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/employees/EmployeeSignInCommand.java @@ -76,7 +76,12 @@ public boolean execute() user.setEmployeeId(employee.get().getId()); user.setSessionKey(sessionKey); + // New active user entry - complete activeUserRepository.save(user); + + // Update 'active' column on employee table to true + employee.get().setIsActive(true); + employeeRepository.save(employee.get()); } return true; diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java index 7bedc81b..f7153d83 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRestController.java @@ -12,6 +12,7 @@ import edu.uark.registerapp.controllers.enums.ViewNames; import edu.uark.registerapp.models.api.ApiResponse; import edu.uark.registerapp.models.repositories.ActiveUserRepository; +import edu.uark.registerapp.models.repositories.EmployeeRepository; @RestController @RequestMapping(value = "/api") @@ -21,8 +22,10 @@ public class SignInRestController extends BaseRestController { final HttpServletRequest request ) { ActiveUserDeleteCommand signOutCommand = - new ActiveUserDeleteCommand(request.getSession().getId(), - this.activeUserRepository); + new ActiveUserDeleteCommand( + request.getSession().getId(), + this.activeUserRepository, + this.employeeRepository); signOutCommand.execute(); @@ -33,4 +36,7 @@ public class SignInRestController extends BaseRestController { // Properties @Autowired private ActiveUserRepository activeUserRepository; + + @Autowired + private EmployeeRepository employeeRepository; } diff --git a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java index 20cfad3c..47734d3f 100644 --- a/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/SignInRouteController.java @@ -10,6 +10,8 @@ import org.springframework.web.servlet.ModelAndView; import edu.uark.registerapp.commands.employees.EmployeeSignInCommand; +import edu.uark.registerapp.commands.exceptions.NotFoundException; +import edu.uark.registerapp.controllers.enums.ViewModelNames; import edu.uark.registerapp.controllers.enums.ViewNames; import edu.uark.registerapp.models.api.EmployeeSignIn; @@ -63,9 +65,17 @@ public ModelAndView performSignIn( } else { - // TO DO: Add error message for failed sign in - - return new ModelAndView(ViewNames.SIGN_IN.getViewName()); + ModelAndView modelAndView = + new ModelAndView(ViewNames.SIGN_IN.getViewName()); + + final Exception e = + new NotFoundException("An employee with matching ID or password"); + + modelAndView.addObject( + ViewModelNames.ERROR_MESSAGE.getValue(), + e.getMessage()); + + return modelAndView; } } From 02f245b2320821679c3d2de36609e258a3512c95 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Fri, 5 Mar 2021 16:01:37 -0600 Subject: [PATCH 23/31] Sign out functionality is now totally complete (had a bug before). --- .../commands/activeUsers/ActiveUserDeleteCommand.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java index 8b5eba52..c4e84cf6 100644 --- a/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java +++ b/src/main/java/edu/uark/registerapp/commands/activeUsers/ActiveUserDeleteCommand.java @@ -50,11 +50,12 @@ public void execute() if (employeeRepository != null) { Optional employee = - employeeRepository.findById(activeUserEntity.get().getId()); + employeeRepository.findById(activeUserEntity.get().getEmployeeId()); if (employee.isPresent()) // Found corresponding entry in 'employee' table { employee.get().setIsActive(false); + employeeRepository.save(employee.get()); } } From 37fc5497f62abe8805fa12ad0ab6c7174e3a8e04 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Fri, 5 Mar 2021 16:59:47 -0600 Subject: [PATCH 24/31] I think the main menu route controller checks for user elevation now. --- .../controllers/MainMenuRouteController.java | 19 ++++++++++++++----- src/main/resources/templates/mainMenu.html | 1 - 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java b/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java index 0efc49c0..8e35629a 100644 --- a/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/MainMenuRouteController.java @@ -14,6 +14,7 @@ import edu.uark.registerapp.controllers.enums.ViewModelNames; import edu.uark.registerapp.controllers.enums.ViewNames; import edu.uark.registerapp.models.entities.ActiveUserEntity; +import edu.uark.registerapp.models.enums.EmployeeClassification; @Controller @RequestMapping(value = "/mainMenu") @@ -27,7 +28,7 @@ public ModelAndView start( final Optional activeUserEntity = this.getCurrentUser(request); - if (!activeUserEntity.isPresent()) { + if (activeUserEntity.isEmpty()) { return this.buildInvalidSessionResponse(); } @@ -36,10 +37,18 @@ public ModelAndView start( new ModelAndView(ViewNames.MAIN_MENU.getViewName()), queryParameters); - // TODO: Examine the ActiveUser classification if you want this information - modelAndView.addObject( - ViewModelNames.IS_ELEVATED_USER.getValue(), - true); + // Check if user is any kind of manager + if (EmployeeClassification.isElevatedUser( + activeUserEntity.get().getClassification())) + { + modelAndView.addObject( + ViewModelNames.IS_ELEVATED_USER.getValue(), true); + } + else + { + modelAndView.addObject( + ViewModelNames.IS_ELEVATED_USER.getValue(), false); + } return modelAndView; } diff --git a/src/main/resources/templates/mainMenu.html b/src/main/resources/templates/mainMenu.html index 9d12f7bb..28f88ee7 100644 --- a/src/main/resources/templates/mainMenu.html +++ b/src/main/resources/templates/mainMenu.html @@ -22,7 +22,6 @@

Main Menu

- diff --git a/src/main/resources/templates/signIn.html b/src/main/resources/templates/signIn.html index 1e8ce05b..c031a239 100644 --- a/src/main/resources/templates/signIn.html +++ b/src/main/resources/templates/signIn.html @@ -5,6 +5,7 @@ + From a6c8df2d664c7a7522cf7578a6866b2fbf660398 Mon Sep 17 00:00:00 2001 From: fxnggg <74802761+fxnggg@users.noreply.github.com> Date: Fri, 5 Mar 2021 21:29:23 -0600 Subject: [PATCH 28/31] Add signout button to remaining pages --- src/main/resources/templates/employeeDetail.html | 4 ++++ src/main/resources/templates/productDetail.html | 4 ++++ src/main/resources/templates/productListing.html | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/src/main/resources/templates/employeeDetail.html b/src/main/resources/templates/employeeDetail.html index 47f2f35d..d73f222b 100644 --- a/src/main/resources/templates/employeeDetail.html +++ b/src/main/resources/templates/employeeDetail.html @@ -50,6 +50,10 @@

+ + diff --git a/src/main/resources/templates/productDetail.html b/src/main/resources/templates/productDetail.html index ac183115..9539e0f4 100644 --- a/src/main/resources/templates/productDetail.html +++ b/src/main/resources/templates/productDetail.html @@ -68,6 +68,10 @@

+ + diff --git a/src/main/resources/templates/productListing.html b/src/main/resources/templates/productListing.html index c4b758ae..38141d1f 100644 --- a/src/main/resources/templates/productListing.html +++ b/src/main/resources/templates/productListing.html @@ -54,6 +54,10 @@

+ + From 4d767657eea06be0ead666dde7cf062acb555ed7 Mon Sep 17 00:00:00 2001 From: Jphrak <60335543+Jphrak@users.noreply.github.com> Date: Fri, 5 Mar 2021 21:42:48 -0600 Subject: [PATCH 29/31] Create Sign-Out.png Added image file for signing out. Signout image should be in employeeDetail, productListing, productDetail --- src/main/resources/static/images/Sign-Out.png | Bin 0 -> 417 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/static/images/Sign-Out.png diff --git a/src/main/resources/static/images/Sign-Out.png b/src/main/resources/static/images/Sign-Out.png new file mode 100644 index 0000000000000000000000000000000000000000..82fe8695ab00a4cdbd2b3f95f065fd7acbd108ec GIT binary patch literal 417 zcmV;S0bc%zP)7GIp>_a(3m+}_QaKE&z3o3q#8Dyh{QRup`m9ZI--K<7}2X0QOT_6(UfB~ zfFo0iTM!k^g5q{n0XmBNtqSl%ad9?U37>C(0R|XgKr-NscF2HNf}kBL;Dz{~wmv|? zI=>#2+PS61|;Y%W<1K>^~fyX^@&QOFD-2!R*p^-#O=;bI$z%Lh{J>>1jl;00000 LNkvXXu0mjf0)eri literal 0 HcmV?d00001 From a94c7bc7c0b02118746ccd8d61a0297a3aaa95c0 Mon Sep 17 00:00:00 2001 From: fxnggg <74802761+fxnggg@users.noreply.github.com> Date: Fri, 5 Mar 2021 23:18:57 -0600 Subject: [PATCH 30/31] CSS --- src/main/resources/static/styles/employeeDetail.css | 2 +- src/main/resources/static/styles/signIn.css | 1 + src/main/resources/templates/employeeDetail.html | 2 +- src/main/resources/templates/signIn.html | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/resources/static/styles/employeeDetail.css b/src/main/resources/static/styles/employeeDetail.css index aabfa842..51251dec 100644 --- a/src/main/resources/static/styles/employeeDetail.css +++ b/src/main/resources/static/styles/employeeDetail.css @@ -12,6 +12,7 @@ input, select { display: inline-block; border: 1px solid #ccc; box-sizing: border-box; + font-family: 'Times New Roman', Times, serif; } input[type=submit] { @@ -30,6 +31,5 @@ input[type=submit] { input[type=submit]:hover { color: white; background-color: black; - box-shadow: 2px 2px 5px gray; } \ No newline at end of file diff --git a/src/main/resources/static/styles/signIn.css b/src/main/resources/static/styles/signIn.css index 096f8ad5..eff8223c 100644 --- a/src/main/resources/static/styles/signIn.css +++ b/src/main/resources/static/styles/signIn.css @@ -12,6 +12,7 @@ input[type=number], input[type=password] { display: inline-block; border: 1px solid #ccc; box-sizing: border-box; + font-family: 'Times New Roman', Times, serif; } input[type=submit] { diff --git a/src/main/resources/templates/employeeDetail.html b/src/main/resources/templates/employeeDetail.html index d73f222b..79aa5f0a 100644 --- a/src/main/resources/templates/employeeDetail.html +++ b/src/main/resources/templates/employeeDetail.html @@ -47,7 +47,7 @@

- + diff --git a/src/main/resources/templates/signIn.html b/src/main/resources/templates/signIn.html index c031a239..ee30d70f 100644 --- a/src/main/resources/templates/signIn.html +++ b/src/main/resources/templates/signIn.html @@ -28,7 +28,7 @@



- + From 8efea165981ac6c9ba7aab9535942d42748dc2f5 Mon Sep 17 00:00:00 2001 From: Jackson Bullard Date: Fri, 5 Mar 2021 23:27:25 -0600 Subject: [PATCH 31/31] New employee functionality. --- .../EmployeeDetailRouteController.java | 42 ++++++++++++++++++- src/main/resources/static/scripts/signIn.js | 1 - .../resources/templates/employeeDetail.html | 13 +++--- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/main/java/edu/uark/registerapp/controllers/EmployeeDetailRouteController.java b/src/main/java/edu/uark/registerapp/controllers/EmployeeDetailRouteController.java index 6f467bea..153e7303 100644 --- a/src/main/java/edu/uark/registerapp/controllers/EmployeeDetailRouteController.java +++ b/src/main/java/edu/uark/registerapp/controllers/EmployeeDetailRouteController.java @@ -1,18 +1,58 @@ package edu.uark.registerapp.controllers; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import edu.uark.registerapp.controllers.enums.ViewNames; +import edu.uark.registerapp.models.entities.EmployeeEntity; +import edu.uark.registerapp.models.repositories.EmployeeRepository; @Controller @RequestMapping(value = "/employeeDetail") -public class EmployeeDetailRouteController { +public class EmployeeDetailRouteController extends BaseRouteController { @RequestMapping(method = RequestMethod.GET) public ModelAndView showEmployeeDetail() { return new ModelAndView(ViewNames.EMPLOYEE_DETAIL.getViewName()); } + + @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + public ModelAndView makeNewEmployee( + EmployeeEntity employee, + HttpServletRequest request + ) + { + employee = new EmployeeEntity(); + + employee.setFirstName(request.getParameter("firstname")); + employee.setLastName(request.getParameter("lastname")); + employee.setPassword(request.getParameter("password").getBytes()); + employee.setClassification(Integer.parseInt( + request.getParameter("classification"))); + + employeeRepository.save(employee); + + if (this.employeeRepository.count() == 1) + { + ModelAndView modelAndView = new ModelAndView( + REDIRECT_PREPEND.concat(ViewNames.SIGN_IN.getRoute())); + + modelAndView.addObject("Method", "GET"); + + return modelAndView; + } + else + return new ModelAndView(ViewNames.EMPLOYEE_DETAIL.getViewName()); + + //return new ModelAndView(ViewNames.EMPLOYEE_DETAIL.getViewName()); + } + + @Autowired + EmployeeRepository employeeRepository; } diff --git a/src/main/resources/static/scripts/signIn.js b/src/main/resources/static/scripts/signIn.js index 5ccc507c..0c420b16 100644 --- a/src/main/resources/static/scripts/signIn.js +++ b/src/main/resources/static/scripts/signIn.js @@ -1,6 +1,5 @@ document.addEventListener("DOMContentLoaded", function(event) { - // TODO: Anything you want to do when the page is loaded? }); function validateForm() diff --git a/src/main/resources/templates/employeeDetail.html b/src/main/resources/templates/employeeDetail.html index d73f222b..a6a60777 100644 --- a/src/main/resources/templates/employeeDetail.html +++ b/src/main/resources/templates/employeeDetail.html @@ -20,11 +20,7 @@

Employee Detail

-
- - -

- +

@@ -43,9 +39,10 @@

+ + + +