From 1a037fa2da73166a2080da892ca01369859d1a4c Mon Sep 17 00:00:00 2001 From: gunjan Date: Thu, 14 Jan 2021 16:57:25 -0500 Subject: [PATCH 1/7] few things --- .../security/config/WebSecurityConfig$1.class | Bin 0 -> 1615 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 target/classes/runner/security/config/WebSecurityConfig$1.class diff --git a/target/classes/runner/security/config/WebSecurityConfig$1.class b/target/classes/runner/security/config/WebSecurityConfig$1.class new file mode 100644 index 0000000000000000000000000000000000000000..fc0abf0b7d153e16c5414b57ac5a6319060d86d4 GIT binary patch literal 1615 zcmcIkZBG+H5Pp`v+)+8&e}F&AINKJi_@!WM(w*74nb~J%p4}fmzkUZWgB4a zV=Bf~=rQClp<+_Xdn%@+ysuzd!2<;k8KObm_R~3rY)Ld-mkZtJR#Vu)o^E;Wrd`uF zc*W?L3N1^XqGoN^4(1rfGQEcluQP-TUX?S%OSa2jHn%HWteF*uEXk5*na;W?Y`O0k z!x9{W_Cf+HIHvD&+K%>oWO{TY1!ahv)oQ^L{<7I<*lvw1g-pp4 zHQjFr+HXqFT~EB%cX@^SA$A-d9JIr9T`w>L+jDi9;uWviejxVpvN~0Cb`10XnvWr7 zcuisPC0q6<_1752x6B=rYAL#w9e-77$lEJY{&3DIFbN{v>d_j%ZPt;GUrIN3&2jO~>(ed9_VN zx>x1Q+y936;IQZ1thTQ8fni11HQV)ZogT*o7|wzv67o9Go7qSI0SuB%kv2zCT4LFe z&qVMq==;?2IZtbpB7t|fKx?Y)g^RdMJMwR3W4JjE?mi@@p literal 0 HcmV?d00001 From 08958e42e2ac3687dd22aecf20bd56ee9e57772f Mon Sep 17 00:00:00 2001 From: gunjan Date: Tue, 19 Jan 2021 10:57:59 -0500 Subject: [PATCH 2/7] read me --- README.md | 68 ++---------------- .../runner/controllers/AccountController.java | 2 +- .../controllers/CustomerController.java | 2 +- .../controllers/AccountController.class | Bin 5685 -> 5792 bytes .../controllers/CustomerController.class | Bin 5058 -> 5165 bytes 5 files changed, 9 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 7b72c6e34..eb3ce70a9 100644 --- a/README.md +++ b/README.md @@ -3,74 +3,20 @@ * **Purpose** - to demonstrate the construction of a full-stacked web-application ## Developmental Notes -### Minimum Tech Stack +### Technical Stack * **Wireframe** - Mockflow -* **Frontend** - Angular / React +* **Frontend** - Angular * **Business Logic** - Java * **Data Layer** - MySQL -* **Cloud** - Heroku/AWS/Google - -### Installation - -Use Spring Initializr to create an starting point for you application - - - - - - - - -## Project Topics - -### TCP Application - -#### User Stories to Fulfill -* As a client, (not logged in) I - * can send messages to a _peer_. - * can view default channels - * can view all accessible channels - * can view messages live as they are received - -
- - - - - -### Blog Application - -#### User Stories to Fulfill -* As a client, (not logged in) I - * can create new blog posts - * A blog post can consist of images and text - * can view list of all blog posts - * can view blog posts filtered by blog-tag - * can view new blog posts upon refreshing the DOM - -
- - - - - -### Video Library Application - -#### User Stories to Fulfill -* As a client, (not logged in) I - * can upload new videos - * can view list of all videos - * can post simple text-comments on a video - - - - +* **Cloud** - Heroku / AWS RDS ### Money Management Application #### User Stories to Fulfill -* As a client, (not logged in) I - * can create new accounts +* As a client, + * can create new user account (Customer) + * can create new account for a customer * deposit money to each account * withdraw money from each account * transfer money to and from any 2 accounts + diff --git a/src/main/java/runner/controllers/AccountController.java b/src/main/java/runner/controllers/AccountController.java index acde9e2de..01bbf6ec7 100644 --- a/src/main/java/runner/controllers/AccountController.java +++ b/src/main/java/runner/controllers/AccountController.java @@ -13,7 +13,7 @@ import java.util.Optional; import java.util.Set; - +@CrossOrigin(origins = "*", allowedHeaders = "*") @RequestMapping("/myaccount") @RestController public class AccountController { diff --git a/src/main/java/runner/controllers/CustomerController.java b/src/main/java/runner/controllers/CustomerController.java index c08a2e46a..203aa3953 100644 --- a/src/main/java/runner/controllers/CustomerController.java +++ b/src/main/java/runner/controllers/CustomerController.java @@ -11,7 +11,7 @@ import runner.services.CustomerServices; import runner.views.Views; - +@CrossOrigin(origins = "*", allowedHeaders = "*") @RestController public class CustomerController { diff --git a/target/classes/runner/controllers/AccountController.class b/target/classes/runner/controllers/AccountController.class index c2fccb63b30a8bd2a209353ace791c1c41a43ab5..5dd857a6fc1af91c9eda4f8b82c103a433d51c3a 100644 GIT binary patch delta 369 zcmXYtOD_Xq6o#L##hB?AlIq4%Bo;2+xI{u?VIv~3u#}+ML8%TiZQa%VejoR1{{oGT zg&$yPV`brYNW^?%ah~@*Z_c|p&$YR_?Ay=FE6_mBAcR@Wkijq`0pg4X7$c!Eu2V+R zz+ysY65F5%N3AJ^w8}EdO({$(%qYw%%xTPPEC@;?(WsS9rg}^}6OWpXprXr8Cm*w& zK9SA8`GP_$6JWk<5hp2oi9fI~?+N0MVsBrd0tGnJilA-UvA za?Oq8R^g6&_uFU{5BcW6yU|vKpFVu__aYnyi2Umyg33Q1CFXrI>`l(NK&CO;{l9LX$Em5BuK~waSL(32HTy&BQR$) z3J;J{qw*?7cCmizTVJ_eV;|8<{qOS&=;OtvlSC_1HZIc+Nm33o%u3Q09b|0gn73FU zYtur`oQsAf)8$Pn7>b6HVcD=ES(TIpZ3)-Sm9oXrWPUmACJTb_NWPSPuMGRdx>xrF zh1l?Z{c#~SJ=Ofvq^ovRr|e8x6?fb#9t@8>2_kw>M0DBd63<@E`L=t5_!vjfJ%%VS V!DQn@@y3`w${H~&`Wt%y>mM;KMq~g0 diff --git a/target/classes/runner/controllers/CustomerController.class b/target/classes/runner/controllers/CustomerController.class index cdbe2b9f16fbe5b91b4819618ce5599267c73d96..1518feeb1a76d7bd3489ddde582d881278bee448 100644 GIT binary patch delta 471 zcmXYu%TH556oagmYlP;&T1u!4poc2#qvHuRsLBdNSm-JUn*6G3O!wgd{3b| z`=iDDj-|{mwPmN#%(I}lt+~Tp#XZe^9%#0)U9qTn$Ri-aGwqL&l@S+qCG*=i+DJJ;;J0uESqB?G!G4_Y3vJemwP0EI1b_W%F@ delta 395 zcmWlVOHWf#6otQY`#ASrP9i3x#zNAh0}3NTlsI-^aH0bfoHO82h03cw5UomiSPR%5 z-n96jpaR7-IAUN@hYU#=IQIt_et_|u!Cv3W+B-WtyV~|EkvaW$@)Nkucb_QzJ_8Ik zkmNxF4;k{f%CJw0N0JejQI9dkeIygsrETZ2bx&NLT0XPMq?PAZrhH!T(z=YxE0@=H z=8em=BrBN_G}baD5uBCG>6nuiZ}p1vN92wt1It3Z)0aX;l^29=4fiI81W{dcnshyM zAr|zHa88;Pi-H@vF57iV-Yc9%^xr^}zUf9ikC(QSA;>~Y8Nu3?Yi{jm2Rv6fud From 342b4b87afde99fd4db77edcd99f26050a2a2e2e Mon Sep 17 00:00:00 2001 From: gunjan Date: Wed, 20 Jan 2021 11:25:54 -0500 Subject: [PATCH 3/7] cleaned --- .../runner/controllers/AccountController.java | 13 ++- .../runner/controllers/LoginController.java | 29 ++++--- .../security/config/WebSecurityConfig.java | 3 +- .../java/runner/services/AccountServices.java | 74 +++++------------- .../runner/services/CustomerServices.java | 45 ----------- .../java/runner/services/LoginServices.java | 32 -------- .../runner/services/TransactionServices.java | 28 +------ .../controllers/AccountController.class | Bin 5792 -> 5261 bytes .../runner/controllers/LoginController.class | Bin 2306 -> 536 bytes .../security/config/WebSecurityConfig$1.class | Bin 1615 -> 1655 bytes .../runner/services/AccountServices.class | Bin 11214 -> 9908 bytes .../runner/services/CustomerServices.class | Bin 8835 -> 8835 bytes .../runner/services/LoginServices.class | Bin 3701 -> 1427 bytes .../runner/services/TransactionServices.class | Bin 3365 -> 2786 bytes 14 files changed, 41 insertions(+), 183 deletions(-) diff --git a/src/main/java/runner/controllers/AccountController.java b/src/main/java/runner/controllers/AccountController.java index 01bbf6ec7..a746dce61 100644 --- a/src/main/java/runner/controllers/AccountController.java +++ b/src/main/java/runner/controllers/AccountController.java @@ -9,7 +9,6 @@ import runner.entities.Transaction; import runner.services.AccountServices; import runner.views.Views; - import java.util.Optional; import java.util.Set; @@ -49,12 +48,12 @@ public ResponseEntity create(@RequestBody Account account) throws Excep String currentPrincipalName = SecurityContextHolder.getContext().getAuthentication().getName(); return new ResponseEntity<>(accountServices.createAccount(account, currentPrincipalName), HttpStatus.CREATED); } - - //REMOVE if not needed - @PutMapping(value = "/update/{id}") - public ResponseEntity> update(@RequestBody Account account, @PathVariable Long id) throws Exception { - return new ResponseEntity<>(accountServices.updateAccount(id,account), HttpStatus.OK); - } +// +// //REMOVE if not needed +// @PutMapping(value = "/update/{id}") +// public ResponseEntity> update(@RequestBody Account account, @PathVariable Long id) throws Exception { +// return new ResponseEntity<>(accountServices.updateAccount(id,account), HttpStatus.OK); +// } //This needs to be rewritten with "encryptedUrl/delete", need to doublecheck if deleting account deletes User due to cascade.ALL @DeleteMapping(value = "/{encryptedUrl}/delete") diff --git a/src/main/java/runner/controllers/LoginController.java b/src/main/java/runner/controllers/LoginController.java index e4f905a4e..6bd70352c 100644 --- a/src/main/java/runner/controllers/LoginController.java +++ b/src/main/java/runner/controllers/LoginController.java @@ -14,23 +14,22 @@ public class LoginController { private LoginServices loginServices; //Remove if not needed - @GetMapping(value = "/read/{id}") - public ResponseEntity readById(@PathVariable Long id) throws Exception { - if(new ResponseEntity<>(loginServices.readLogin(id), HttpStatus.OK) == null) throw new Exception("Error , the user id is null") ; - else - return new ResponseEntity<>(loginServices.readLogin(id), HttpStatus.OK); - } +// @GetMapping(value = "/read/{id}") +// public ResponseEntity readById(@PathVariable Long id) throws Exception { +// if(new ResponseEntity<>(loginServices.readLogin(id), HttpStatus.OK) == null) throw new Exception("Error , the user id is null") ; +// else +// return new ResponseEntity<>(loginServices.readLogin(id), HttpStatus.OK); +// } //Remove if not needed - @PostMapping(value = "/create") - public ResponseEntity create(@RequestBody Login login) { - Login loginResult =loginServices.createLogin(login); - if( loginResult == null) - return new ResponseEntity<>(null, HttpStatus.FORBIDDEN); - else - return new ResponseEntity<>(loginResult, HttpStatus.OK); - } +// @PostMapping(value = "/create") +// public ResponseEntity create(@RequestBody Login login) { +// Login loginResult =loginServices.createLogin(login); +// if( loginResult == null) +// return new ResponseEntity<>(null, HttpStatus.FORBIDDEN); +// else +// return new ResponseEntity<>(loginResult, HttpStatus.OK); +// } - // } \ No newline at end of file diff --git a/src/main/java/runner/security/config/WebSecurityConfig.java b/src/main/java/runner/security/config/WebSecurityConfig.java index 0e3ecd9d4..2bb726a43 100644 --- a/src/main/java/runner/security/config/WebSecurityConfig.java +++ b/src/main/java/runner/security/config/WebSecurityConfig.java @@ -98,7 +98,8 @@ public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("GET","POST","PUT","DELETE") .allowedHeaders("*") - .allowedOrigins("http://localhost:4200"); //angular default port + .allowedOrigins("http://zip-bank.herokuapp.com" ,"http://localhost:8080"); + } }; } diff --git a/src/main/java/runner/services/AccountServices.java b/src/main/java/runner/services/AccountServices.java index a35bb9818..e8bf5dcce 100644 --- a/src/main/java/runner/services/AccountServices.java +++ b/src/main/java/runner/services/AccountServices.java @@ -5,7 +5,6 @@ import org.springframework.stereotype.Service; import runner.entities.Transaction; import runner.repositories.AccountRepo; - import java.time.LocalDate; import java.util.*; import java.util.logging.Level; @@ -83,31 +82,6 @@ public Account getAccountByAccountNumber(String accountNumber){ return accountRepo.findAccountByAccountNumber(accountNumber); } - //Remove if not needed -/* public Account readAccount(Long id) throws Exception{ - loggerService.log(Level.INFO, "Attempting to read customer's account # " + id); - if (accountRepo.existsById(id) == true) { - loggerService.log(Level.INFO, "The customer's account #" + id + "is being read'"); - return accountRepo.findAccountById(id); - } - loggerService.log(Level.WARNING, "The customer is trying to read account # " + id + "that doe not exist"); - throw new Exception("Account does not exist"); - }*/ - - //Remove if not needed -/* public Boolean removeAccount(Long id) throws Exception{ - loggerService.log(Level.INFO, "Attempting to remove customer's account # " + id); - if (accountRepo.findAccountById(id).getBalance() == 0) { - loggerService.log(Level.INFO, "The customer is removing the account # " + id); - Account accountFromDB = accountRepo.findAccountById(id); - accountRepo.delete(accountFromDB); - return accountRepo.existsById(id); - } else { - - loggerService.log(Level.WARNING, "The customer had a balance greater than 0 and could not remove the account # " + id); - throw new Exception("Balance not 0 cannot be closed"); - } - }*/ public Boolean removeAccount(String encryptedUrl){ if(accountRepo.findAccountByEncryptedUrl(encryptedUrl).getBalance()==0) { @@ -117,23 +91,23 @@ public Boolean removeAccount(String encryptedUrl){ return false; } - //REMOVE if not used - public Optional updateAccount(Long id, Account account) throws Exception{ - loggerService.log(Level.INFO, "Attempting to update customer's account # " + id); - if (accountRepo.existsById(id) == true) { - loggerService.log(Level.INFO, "The customer is updating their account # " + id); - Account accountFromDB = accountRepo.findAccountById(id); - accountFromDB.setAccountType(account.getAccountType()); - accountFromDB.setAccountNumber(account.getAccountNumber()); - accountFromDB.setInterestRate(account.getInterestRate()); - accountFromDB.setDateOfOpening(account.getDateOfOpening()); - accountFromDB.setRoutingNumber(account.getRoutingNumber()); - accountFromDB.setBalance(account.getBalance()); - return Optional.of(accountFromDB); - } - loggerService.log(Level.WARNING, "The account # " + id + "does not exist to be updated"); - throw new Exception("Account does not exist"); - } +// //REMOVE if not used +// public Optional updateAccount(Long id, Account account) throws Exception{ +// loggerService.log(Level.INFO, "Attempting to update customer's account # " + id); +// if (accountRepo.existsById(id) == true) { +// loggerService.log(Level.INFO, "The customer is updating their account # " + id); +// Account accountFromDB = accountRepo.findAccountById(id); +// accountFromDB.setAccountType(account.getAccountType()); +// accountFromDB.setAccountNumber(account.getAccountNumber()); +// accountFromDB.setInterestRate(account.getInterestRate()); +// accountFromDB.setDateOfOpening(account.getDateOfOpening()); +// accountFromDB.setRoutingNumber(account.getRoutingNumber()); +// accountFromDB.setBalance(account.getBalance()); +// return Optional.of(accountFromDB); +// } +// loggerService.log(Level.WARNING, "The account # " + id + "does not exist to be updated"); +// throw new Exception("Account does not exist"); +// } //iterate through set to get accounts but should only be one at any time public Account iteratorReturn(Iterator iterator){ @@ -211,18 +185,6 @@ public String generateRandomUrl() { return randomString; } - // Not needed, transfer and withdraw have same JSON payload; so use withdraw method -/* public Account transfer(Double amount, Long fromId, Long toId) throws Exception { - if (accountRepo.findAccountById(fromId).getBalance() > amount) { - loggerService.log(Level.INFO, "The customer is making a transfer"); - accountRepo.findAccountById(fromId).setBalance(accountRepo.findAccountById(fromId).getBalance() - amount); - accountRepo.findAccountById(toId).setBalance(accountRepo.findAccountById(toId).getBalance() + amount); - accountRepo.save(readAccount(toId)); - return accountRepo.save(readAccount(fromId)); - } else { - loggerService.log(Level.WARNING, "The customer did not have sufficient funds to make the transfer"); - throw new Exception("Insufficient funds"); - } - }*/ + } \ No newline at end of file diff --git a/src/main/java/runner/services/CustomerServices.java b/src/main/java/runner/services/CustomerServices.java index 5099ce7ad..3673ea68c 100644 --- a/src/main/java/runner/services/CustomerServices.java +++ b/src/main/java/runner/services/CustomerServices.java @@ -23,12 +23,6 @@ public class CustomerServices { @Autowired private CustomerRepo customerRepo; -// public CustomerServices(CustomerRepo customerRepo) { -// loggerService.log(Level.INFO, "The repository for customer has been autowired to services"); -// this.customerRepo = customerRepo; -// } - -//Can we try removing this below Autowired ?? @Autowired private AccountServices accountServices; @@ -62,19 +56,6 @@ public Boolean checkLogin(Login login) { return count!=0 ? true:false; } - //Find the customer from DB using id -/* public Customer readCustomer(Long id) { - loggerService.log(Level.INFO, "The customer information is being read"); - Customer customer = customerRepo.findCustomerById(id); - if (customer != null) { - loggerService.log(Level.INFO, "The customer is found and being returned"); - return customer; - } else { - loggerService.log(Level.WARNING, "The customer could not be found, returned null"); - return null; - } - }*/ - //Find Customer from DB using the logged in user name public Customer readCustomerByLogin(String name) { loggerService.log(Level.INFO, "The customer information is being read"); @@ -124,32 +105,6 @@ int checkAccountBalanceAndDelete(Long id, Customer customer) { return 4; } -/* //Update the Customer (all fields) in the DB ,based on body of request - public Customer updateCustomer(Long id, Customer customer) throws Exception { - loggerService.log(Level.INFO, "Finding the customer to be updated"); - Customer customerFromDB = customerRepo.findCustomerById(id); - Set accountSetFromDB ; - if (customerFromDB != null) { - loggerService.log(Level.INFO, "Customer with id to be updated found " + customerFromDB.getId()); - customer.getAddress().setId(customerFromDB.getAddress().getId()); - customer.setId(customerFromDB.getId()); - accountSetFromDB = customerFromDB.getAccounts(); - //Once the existing accounts are added , we will add more accounts from the request body - for (Account account : customer.getAccounts()) { - account.setCustomer(customerFromDB); - account.setEncryptedUrl(accountServices.generateRandomUrl()); // test-case fails as need to autowire this too. - accountSetFromDB.add(account); - } - customer.setAccounts(accountSetFromDB); - customerRepo.save(customer); - loggerService.log(Level.INFO, "Customer with Id " + customerFromDB.getId() + "has been updated"); - return customerFromDB; - } else { - loggerService.log(Level.WARNING, "Customer with Id " + id + "not found in db"); - throw new Exception("id not found to be udapted"); - } - }*/ - //Update phone number ,check syntax based on the REGEX //Returns 0 = Updated , 1 : Customer not found , 2 : Phone number format not correct public Customer updateCustomerPhoneNumber(String username, Customer tempCustomer) throws ParseException { diff --git a/src/main/java/runner/services/LoginServices.java b/src/main/java/runner/services/LoginServices.java index e4d44b9bd..b08c39c49 100644 --- a/src/main/java/runner/services/LoginServices.java +++ b/src/main/java/runner/services/LoginServices.java @@ -26,19 +26,6 @@ public class LoginServices{ //} implements UserDetailsService { <--Moved to User private BCryptPasswordEncoder bCryptPasswordEncoder; - //REMOVE if not needed - public Login createLogin(Login login1) { - Login encryptedLogin = new Login(); - List allLogins= loginRepo.findAll(); - List result = allLogins.stream().filter((login) -> login.getUsername().equals(login1.getUsername())).collect(Collectors.toList()); - if(result.size()==0) { - encryptedLogin.setUser(login1.getUser()); - encryptedLogin.setPassword(bCryptPasswordEncoder.encode(login1.getPassword())); - return loginRepo.save(encryptedLogin); - } - return null; - } - //need another password authentication done before allowing user to update their password public Login updatePassword(Long userId, Login login) { Login updatedLogin = loginRepo.findLoginById(userId); @@ -46,25 +33,6 @@ public Login updatePassword(Long userId, Login login) { return loginRepo.save(updatedLogin); } -/* @Override <--Moved to UserDetailServices - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - Login login = loginRepo.findLoginByUsername(username); - return new User(login.getUsername(), login.getPassword(),new ArrayList<>()); //ArrayList is typically for the authority but not using this feature - }*/ - - public Login readLogin(Long id){ - return loginRepo.findLoginById(id); - } - - public Login findLoginByUsername(String username){ - return loginRepo.findLoginByUsername(username); - } - - public Boolean logOut() { - // Login for logOut - return true; - } - //Lock after 3 attempts //Security questions diff --git a/src/main/java/runner/services/TransactionServices.java b/src/main/java/runner/services/TransactionServices.java index 29bdb5c51..dd5dedc6d 100644 --- a/src/main/java/runner/services/TransactionServices.java +++ b/src/main/java/runner/services/TransactionServices.java @@ -12,33 +12,7 @@ @Service public class TransactionServices { - @Autowired - private TransactionRepo transactionRepo; - //CRUD methods - public Optional createTransaction() - { - //Used in POST for Transaction controller - return null; - } - - public Optional readTransaction() - { - //Used in GET in Transaction controller - return null; - } - public Boolean removeTransaction() - { - //Used in DELETE in Transaction controller - return true; - } - - public Optional updateTransaction() - { - //Used in PUT in Transaction controller - return null; - } - - public ArrayList setAllTransactions(Transaction transaction, Account fromAccount, Account toAccount){ + public ArrayList setAllTransactions(Transaction transaction, Account fromAccount, Account toAccount){ //{0 = withdraw, 1 = deposit} money always leaves from 'fromAccount' to 'toAccount' ArrayList myList = new ArrayList(); diff --git a/target/classes/runner/controllers/AccountController.class b/target/classes/runner/controllers/AccountController.class index 5dd857a6fc1af91c9eda4f8b82c103a433d51c3a..baf0e9ee3a7087b5de803e4cda0b9248244e6579 100644 GIT binary patch delta 1598 zcmcgtSyK~15dJ1HEZM99LO?*!a7(!H7ElxwP*FSp@kRoOMs85NqT;QHy6Uq(0gNS< zR$2PWi@!i$eDgP0mf!5gBvMe8FFb7b^h{6p*WdKazABz5XrKM{{v&`jc&Q>0Ct`6@ z#VNEqa2g#B_|U1K%MKU1Rh&VO9cOV)MGXAXJTFDBoa>XLeklf|7?fg2!LWjn>8=io zxDcGRxP-VE{Aw)`VocX;--2bz7om>}ui7*++}PgV-_zS2{2BXM6r~_lz)|1n_xE{P z`v(0!1(!5j#uWuuHC#hL!F3Hc;1S5zg)>#3vN~%txRIpbriO9cQgBa6{+JO>gkjP3=1{)*SCFBGm$h=We6GKtKsO3h~3huNC8VDs=Z6rwhE5W*`64qk_ zeHBUDMkDJcRFW@ArjOaJ)LHMK|47I+FqqYqvAS{thsX2?d3gJx5XR4suwii!HZ6c~|GyD7Ee^s13nKh;p>qQX zb2&8oznT5r64hY~-R^_owu-zNhj?R}jc#o*R`Y1LvLg-~FG?GZgftbh%{y@n$GM@H TpL{3^F^VGC`KuVkTG)RB80?{P literal 5792 zcmcgw3wPYa8NIW9C|+-z;Fu6-1F`dR>?A5_fPj-wzY@o6Vq+VdKwBzn$7?0Bv`AVz zZraip(08E^=)3(1EvE-cdrp5qe^gKJNLsDdt2JvVoE*=rMl;`c=YCJ+KmYybzX4pt zU-B4$+=sP1%2@A(g*&~t3tPiR4-Ub}!$qYBufoft8@_rB)KFDxo9fq=8t$oKTMb`V z!+j0k(C|%x1BPk3RVP@K-lkju$(Fb&Kjx)!>`16L_v| zOV6*}U@}>vGA)pPFuSrOFfe?kc*oc@blY&s`eLAvbHl~Vi)_hNebsVG={sDP!A+x5 ziH>z`8g`W+yL6>MpwE*=Y23DB76nGBE{me|AgJgI(yx$4IZb|pZK4=3tDYyFV4kQ< zt76!T$zL`&uqXvZ{e)>x(kDTw{=0t-z8AePdVokNAtGyFpX> zf%NWe*!msAyz9G8nvhvOFI#eJOv7sez4hDEK!qF1yC!YJ_m#UHt7+TheqUFo{1d4I zRCq9CFml3)?H4>-;L33G{rAFZK{}?lT?u3<6nF5Z4A$M!yrKM+*CMVLKZ%CjDAe$6 z`gAR(D$=ypEK}e_CJ%As#ko!S# zK!2JVt^sUvi@gx9#rcLgq@_H8{PaCjR>Fj$;X4Aa{2!F>W)p!Y+9$~MQ_-&JHGPmQm(C<}q5TYdH{Mk` zX+O=*S5w3n^oTe8zExrrxAptEL>sQd#Y^@nF^uQE5hL& zF{?*dncJf)#JONfR$Sj=#dxXNGD{xICyOUb>{!Z_ajn{mJM;#1Q36Msf-tQ~p!%sn z+088k9%`m6Cg;Hh&Q`2oz2q5N0!Mb9*h*eC9tkhFCcTU!AvNKv^LwbCBg%{Oy6u+B zvgB52!2F_H^-OuqQq9WY*u3@TJ)bL0Ai6u5}Ytlt8M z>avp(C-7_*3BF|K#~x5OT~Bgw0(mcBe-^DOzWF@k+O#@7t}H_na7i^s*$JU7iFB~1 zKQN?m2;znH6KlUW$AstvGVIv9^w?kEA2&8nxbd zx}mE*mzJB9ikO(DE>2*7)XK!t1gI4Qee|n_QS4Uz(nxiiYe>&rd@PTbrhW zR8tv$qlKoZ^%f*=zb7}`O__i`otBtfx*m45l1^tS)e7!x^F`BTFstCUzU;nw;pt{g z2n)igj{uc?bN0t_Q&|Rs{LCNV{{_&iR1)O;5TCj^AK~1~nfaFE=lG;^7M#0AK7jZe zf8_9aj%qU~<|xNPv;mLeF+K?#qk>#`_#B_qzK;IfUpb|Z9!(wXh>t21eLOJ4zvC}M z_&C8|CvgfLp}5=Vqzqv2AL#fHodO@COQ85Kbl)ENJG9aFvF|oJT&DaE}z6-NY(rj#Cv zl`7gUgi60i!Mwl)PLckLq5el2^gorN;}V|cUQLnuObBWWmuU)RrxL++a2{&l=4Jx% z?E5IZhy5AkJWg^hggB2y5)zz4xPq(H)kkkpH0AItHFR?2ONg;w;X;IcJjAZdH^INi ze3Ny&Q`{&pjcYO9g&6NZ4dGduuP>X$ODS{%3A%w89f{3S7RT@hIw^w#=e=rxs||~s}mLhnaA_32pgqI4`w5oYC+fn7O6@R zrW|mmIZ4<8U)J4mDbpS6$&-5W{WS=Uvl_L_*Q}WDxY2nGxyhE#Pe$6-6pdXaGrlE R#h%5ta1K3qg7cH;`5zv19m)Uz diff --git a/target/classes/runner/controllers/LoginController.class b/target/classes/runner/controllers/LoginController.class index 7d774d15bfd69497f9aa75da3c8a7b5766909bca..6eb211c355f0caa33e23adfac9640a1fb9e63c30 100644 GIT binary patch delta 157 zcmZn?n!zG^>ff$?3=9k=45C~N%nU;848rUTA`{)dO*UqUXXaqwoUF)dQOuyozyy?K zU|JV25M VqJV*yfe$Rt4<-fRh6*w;007Y~3|IgF literal 2306 zcmbtVYi}Dx6g^|d+1PO&q)kgGC8lj?l7?=9w3Ipo@@zw$2T2vF>Zi3mwWr30xWGFCM2qMpufgQ$2 zcA;G$FEFtid0HLFeHE&rE0;Xa*N#@cNA0@>Kd9JYEl^(NY2X~lBR_a<7p3Ec_EV>% z{ovSknhN$(r2Qim$TH3LFDOsxMS%)UV1ieHujBL(Hjt>~aAgGUb01jY(}$#M6c zK$-9OuuoSN;jf*NFZrGheAksh*x|Ghw=%!qw|N5AQ5{f29|89Xn-P2C#`KD8g>1EcwFUeXQqtQ*NtA2UMG4au4 zD3IP$70=O8K>r^7cSZ}R?n^^Z$=LV&BB{=Ibn8eK?V|F^?Mb;WHJR6#L8_$=9XBGY zjBR3O|Deh*1g@N|fTkyBO5sk=fIE(^p5~K~{Ut(aVlGd2@#o*9C{?d-fs0*i2@KXH znA^zJ7S;rw{BPX1CE|APaq+{pOj!15Tza>#E5D0msF(e+sn*P%9|a}3u1p)9ueWup zEpD1N=+?lU%7g*aE%kgB=Wt%&dZ+&H&^%d;VAR5T7WeVM!bTR~;GwZm5IEQB$Y$RN zTv`hPKgiAHbXDdePN$qI=Tw;UBG)yFn^|mOJByu$oo`vD@g#f8Fktt#z_yFeWJwE* z$9iYGNZ@jO-gz>zi%pBv!zwV-p^H13WnQj!joAZE9gY$maYiJz9|}x$ES`FNTe38H zuN}VOSH34zGkV9{mG`un<#}^H*eJl*!&}|Eq?@DZ_3ho|jn&n)ErFfsj(j4mTziw9 zsP@g^;UMajH$LS5ZQ>H<0)e<;~oKV zhY6R2OVTCflJ>|j>GIa#l*>DpX+vimvJUSZa>pP4s-e7QmN`uq-I^%#icl&D92PVM z7F)Ac=JS$fnH7Z!G#?BZtTvmCTq^Z*yOG!|?bVXi%C~y$N2$?Bmg~EU=pCoSvBUM6$_1>{IM$5zAv{|L{PqO^5tEY%qTsA&xFkjnjJ5QpGx`})^S_Y zEA^2$;S0~D8oj9KV?fX_(@pLv+*WiQ__7#c__pmKcH5u|ts^_}%f7(g2t^(jH^Pz5 z;%}a;->3A56gI_NmLL8~o(c@~ delta 406 zcmYk1%Sr-K7{`AzIynueG*i2n+C7`HQ8O#8>%wYNK&kaGYAbd{V2{uNsA1Hl0>%yF>f_F8T1OSM-=)UZ&B576`cZ@@8Fjh_GO! zd0|9%`=sv>4jj`jXQa)r7$7PgSZ$rgkkp1o@YXeq5qAyb>IS1NC^p}W)V22+axBvhE diff --git a/target/classes/runner/services/AccountServices.class b/target/classes/runner/services/AccountServices.class index 0b0b92b54d62825ee33a9329a4ebe68c91c7f725..636c10e597a43561b3fd0faa9d7b9688d6835d84 100644 GIT binary patch delta 3724 zcmb7GX<$^<75>g_Z!)IH0$~-%!cGFBkN^@OY+(^a9Yuuzis)k# z5D^4KPzZrQpjE4FZE3Z3wfkaQ+uB9DYAf1)=glyQN&om`?z?l|x!?KDch9-+zFB_0 zG;;OR%P#>KBrgUq8(&PoEWDJ6m+^`YUkV@zud3~}1bi7^@#CujypFFW;_JAYh;QJV z0la}XEqqHI-_qgR0eXK&hwtj}J+*y55rc8n!VdyS!`o{4p}zYOhX{TgV)$Pw*ss*> zodAA~-{|n$0N%y#e53JN-CK0gf4}!~g2Me*`R@;SPbvOU;rtiv@8_(=efPw`()1(pbX#ifIrAmZUF@g|B-EFJvhE(w+d z{E`^Ja5283*-FMCCP~yt+65$8f&od95HpcfzqF@NlEyS8-7g*Vc|!;;>7)@mhv1g1 zK7Przq^n=L1u#X74&BwShlcBENw0wPmK=&Mxt4?*K9P_|@*0A^QPPm(pWu@GhSh<0 zrFRt;7|g|Omh>@lBbFNJEB%c0mjMQIaH}N)jSP~(_I;+f>kuPDWtb&587YuLOKvtY zTt-+j(nyi?6Lher`a5(nGD=1p86#s2BDmk+Zmc#qgR@4)$#^>}DLZtFOfWK$7CeSJ zgD0`yo|=>%nG}@bWS^7-amh%jlo^>UQ;bZNVoUOjOq1zGX2?uSW*I4$3L~>+jwQG1 zo4H1ABb3}O11yB&Mi$8(Mixu8ktI4?in^dIOZG}lP?j56AuFwA zvdYM6sWq}j)*4wS>n*v{$OgH~$lbD0&~9nv`pUlR)-I{(Te4&gUG9;4johc05v6lK z>MVJ{$R?R-@&$Z*-NlAC_5?B<3Z{wPl#<~m+VfqWRL#a zYk!zLBdJ`qU8V2$Nwr-O?2-7Sk^Q;_2jpPGmSB@B`zbjjNXsc{CO5fi>7oT|3v=ga z89m)FKefyyha1kMCAb<&Git>>OP;Y`&78yM5j(46W9CsK&&qQK7j?T%%JT+|y3^;e z+J3*|U^(5;vy)Hc1v|fUNn{p}2*8a@Eh^4jT665H+d22~InS|Cg;uuq{Ld2QxR4%w z`4m3A;fs)ZXUQUt3IGIg2S*ciz+zPMpMY{PtSq!Y>fC8;vva27oK7AgdF5RXn zNIQ}Py1|R?OrVDYlrf|fn4sW}Mz=?28y%6-QG$DLFLN8n_4m={ZbgCn zvC#?7Gesrj{B79pWLG*IZe*%J0d*{72@FRkj9{uGF^DM_Vid+;G>SP+!8lCE_&AqN z^mqW99K~nGSyG6mm@m#{OTvRW%UC+xBwfMq*`W~^G4kd7nAvez+#W^CE@AXGK385sxDk1M z`b3vG?-#UvA3l#UdHHl2Ti_*BYJrdQ)B-ERm*I6cVq6o(yHK8CWq8TK`Dc53^>Fr} zfTso66+U)KI(sFXm0QHxozFaLu$d}t;W1Fh*;eYjjmd4tVXE>Xb~w7tjiwmatsV!6 zqDN;v4mx$Gv!|Ti^WhW@;c2Q@!;U!|!825-mJM};W$9y>n{bpfi{NfNi(~LR^6Sy% zEWq)&|Bkr-4*Khs_#xMjZQ(?#7Ef}M5y%B(q2>J?PDVE+PaUd(f4okdJ+2yq^caK};pMmeI5*UR;i-$N43*x>waUU*F<@lB3LJ+}#-lJlW{rJ=l^@XJ|0&i=~ zvkqqT&J#t_qt&^*M3Hzmiy@6Bjv^)Tl$!ZEEYAse+^1=9xA;N~X@QsI^aGrZ^}>}{ z6p6Du5Y#4air>q6ILQ1$hGsRQ{1Pe};8Uv70y>4gaG5q2uEcMBU!cng+5!+cCa2^$ lGVl}r*IU9*N$h9%Iey{H{)G>b_K{8{Lo%gfY}Q3O{tpA|PjvtQ delta 4969 zcmbVQ2Y6If7XHs9GjB3^fnSG$_g;2a*X_Hy?*8Y!VMu`e_S^kJ?!E84bN_qJf6BXL`-B5C z0Xh2%$y$ek2>q%Hbr8B zk^L*rs$N!IvbZ`@S5g^`)LGfy{7D6luqhT^TrzP(Ts+=Tw)>Y#y8OmGo=EG80iOG30bpX5j);X3HE?=E@l+ z>Jc&IOjG8`d}~_f_#V}!)W`xuYE22rLPP3IStMaY&NAg}nPctA?ACL!)SD8KsEO-f znOKX9O+1fZo3ccf3c6aE?yhlD8l=&b7{#~?>r8AzGu^6)Mq`b!hUz5~La{~B+Q#-C zY08#moR(+fRa4H96{egk=b3W8EHh+=DHq7EOo_`%Lspq`pyw{&A7UriBZ`3&NpDEU>UCQp<#RO7@v(M9h$BXX)-@`1J4*SqbwE*Fu$rm8uGP2apltX1;J9TJ)9eC8T05cStmZT+i_e@jS|kn*&W;g z*=lb&hob@jIatBbbQEwd&f}AS3CCk)xmBLuZS*1KuC{V6?Eo^9%DVa$;@q^7Qn&B{ zSjAr#E~JnN$<=aeLw@%%1@hUOdva5t6_}X(NpaYY#rv_Kq+~xB8t8ooo z*8SH~mUftB4AWHv5dCy1vs}LotFU{uZNqV7fHx)5JDiy@0^KmuW?>M@DXqXL{*1?H zOu`sU#n_ZB-Dv0axWNv@^psW8lPtNZex)jLF2*xu8u>=IZJ;I~g;{)$R1$MQsCj;7(e#-ac27 zk`0usq=e_*#!2)8o#bL9XFJD(R#m>o`o2fTaLo^=Vy4>X9$5q%TNlAb8}V-3qlnhP zp2KWM{C2>W@*>;7WNKvQHnjo^rkn^Solv4!hJD-Gc`r5*hcS~uoHdiSZi8nVjNK@m zwFATa!xK1}xiunzkqKl3x5HJ~5=WT}>FY7Ct!nvER8iqVRdG=QqY@acbLRy5>CAt{ zI-in2fzD$R7_0M;1PY6H;?ylR_PB#)oR-A)kLM!p7_%Fdv-}fwplYw}nzA~WS9;L( zZtOilcAhcpJ(F2av&d&PJrA>+EM+fQ!Ctb8MYM)Lo7fT#R={Ll{O_}KoJ6E3+=~10 z0E4PB?I>|4?c9)`_;f^_-cLns46FF-!h_t%Z!fvm%Bbg)W<#gK7EBb}f-Ej337$aK z7TLlV=}T`rmK=IlxVEed5-^Jus2iS zn6s6yd2w{i5sTHJJz^_EJh?PIFFk>wP7sFPbO*9*hNmdQMM6dek z?nF>yR&2*^sI9Qz$oI^g8HGhunpx^5R)=%r)>Y%LyEd@gG~z|tyXQqN}{E~fJh*g($iVk9=QW8BS(zlYLIq~boCx4Djo zt)jV|{mhBxquiz8*op*KX*}aW?7&Wvw-~2@iN1>jHLzvv=3yQla}plo${=_e_TX`N zZT7X9+Z(VqrN1Gizk&K15ijIt1PsQyZOUY&VLM+x%HITk1yABBCq5_8%5?5ye|JjF zKRa23MJ+gvmBp~-wqTB+G(D)y&$UMMF0)zdZEt&+eQq;Z+k#&7v51jBiD!-CIg{z9 zX4Mo2KE+NA-#hHo*p0)*-IYmpda-9~%B2%&F!r&g+{7!O%rB>U?6k^f4tjfpvuFGlXW30k-P)4!+$}iPg;GzjusF|So!_UR6$g)zgFWmtMH(agy#(s2+;{^uh#a4}@C>7$OBkx$E|J!8dsRc9XrCy10 zc4NUTf9(#0Drw5X2}Oq=^C~Z3uc19&w@+z%XNvon^!sT9@9MPeMdpet+ocy&KIti? zoYhZ;EP=YiZ;~&xGTf6g+=ByTIdwTakd17gUVM{~$8*-Q_5>xt)I1z>zm4fMN(TuC z+oOZT%XAW{f;ftl#m=_qIT-2uNTxkRL7L67^X(qe3NOp98rWs-hAXoyp0aX#wpRXY zsT=e$HZnW5Kb*i>J8^b1JZh@6g4S>Q>y)|hM(Te4CRIMC%*Q_;eJWqeXUM~!_^cPV eKhv&_34gE$EaXj6%&M*lqRG;og|4fWxVP? zZ<-R)+8{$r6I0CU&9O|DJo9X_z%7g1lY5Vc0+yXu(-k#b)f#IWysqGe$<&6;bIq&0 zCEb?pNOz?L>7Ml4IglJmj#d8=Z4!%H4vMHWzNv JikM&b=^w32J>&oY delta 306 zcmWO1yDx)r6vpvy7l}%kDtSxsMue9jbx8+`NZwehm9n4&QHhAUix_le`b8vet;MYd zRNI9h{tJW2-yxoy@pH~|&Plsz_px9(EmYuO(MktxglQ*6Cldsjp_?Q<9Ma1vA@gIM zmG|RSkIjHN@RzKJW=E+eieFPrjL}S-F2+r?rf5$}r>J6D9SH)=N#~^t%1jbr$vCxt z&MIZ3Xk-nSb?x0?mQ9w~VufvXRLAUc!d^ZS@Opgb3cXO^B_T2ll2!DTNz?~Twl3$p zk={!0r1#RC^g;S(l_b59{He;Plot1mG-_TWsdB) JCv1N0%s-}rM7IC{ diff --git a/target/classes/runner/services/LoginServices.class b/target/classes/runner/services/LoginServices.class index 35b2a8b06a452b8c48a1c124b0ee49bb4aad61b2..335b7023bc003bac69190d33e3fe208b0ac0f7ac 100644 GIT binary patch delta 483 zcmZXPNlpS$5Qe|k3=Q2+#1Ur%Cq!_br-eI>8aM7G0Tqoy025ug@dWk>yn!YLqYLBO z8@Tiix;0ie?o20Df7Sbk>hCVcUV8s|c?G6fwXhioV=-tmM9M|O7GcsBBV=5Zbst7e z#!SXdCLV4!l=ER+s+hAEj3pKN;yji3z|iiG|Q|wpZ+%IF0dP^+b^EhY}c;V^UjfP^fvT$ zO+s$8<$6Otu|yG(DJZ?(+luqQokA{64G==BR9zzwqfI77 zI~@|{iZ8G6;TMofKVpnL<1^UK3ifBJ1gZq9nC?sVnUKL7;d|j4xB(GSLR@a|6}yBN tl&*RG1&J%2ba~+^y6F+6Ej=#CCn^XVNns#6*EQkQr1$@p%zZNV!!H#iI!*up literal 3701 zcmb7HS#uOs6#nioq{&PZLJT0FA{cZMA{`VJ2?9ynA_D;esJLKf<|Z`hbPv4*;=b?u zF7C^t4_IXdf>oB!mVd`r%kOsg%=CmAN~<#6cR9;e#B`mz*yRxoFjl#**qL~mobnGG6m z+hsXcuv=hBq4$_Tc7(PCRunBq9tdY9q<6$*C<0wYw`AJKOwUsDWHB3@v>02B8DDy{ zR;kL$crv4xe94n$AS1E_1`1UwCHV?!G!FK*SSQRV5!(dTv=r%(P86yvCvMtJ+m42W z*jYSf&YDITShi8L{6IzSNk6m$fz^$n%~h)5^)6D{)x!5~T3bFIn5F6cW+kGA<;pUo z+x;>)>6QN|lu1Q3n*w_au^ZcTrdUqS)L;uYS70Y3^P}Zjm~~SEOC#n4 z^w@8W944eX?!62_YgZYIZmycNoLG5y?kHV5j80%n+RS*MD*Xx>U8XR{id`uJ61_O% zV@S1VSJ3*^S#&@0J%t)$X<=BvfK zRn?6^q4`;3N~IgHVvIzdxHd-7oHYWEXPYOR=ifL|ADi}|j*ZyFz>%vR7Lr z9&A>?nmXqV&{))ymd%J;^iATVs@#revV{fWS3$y11-ILO*b4q^Df^Rl#d7XSXJ& zE}}e5)_Y`kHI}HFm}u2o*gBitssHB!Bwf5UqARaIT`waiO>bPD4!J2C;;*^RGm<*K zhGI)(qU+Q*XUWoyY1`FWY{u&HRAW{Bd}W>ar16o%SX*d#Bm!tr!&>a9_cSMSTI za~MNYQJ)S?+t=`=j<4{Yj(c#gz^1x4%b9hjrBRGpESrv*e4{WiyvV9E4L{IU(RHW8 z3U8QE^?5X6^E*Yd5dTUCo!E=p*Zrnbwx!<_D-NcJNT^G#G$eBP@5*xQ{%iS73w~{8RI>;BB4=%UUl*;iCofvlIOm6$6EPxwv6KA}?&`W1Z`EM-2QohaKka_q5mhA8Q z71;$W6*zG70@`?uUxEfKU|9wi(Y}CO27e&GGrN{jy1+RU`nSwu`8+!Msk(yW&Uvhy zN0&0xzksWheCE73PbXO@V4JXv&kcNDk1obBz?Gc@GtAvXgnNP@73l3Tumm(Aq7PdL zei^^*`#H)`dki;YD?=E-HuA8Q9tNnX!j1Q~aqkwcbU^%r6B=&Su$_Onjcbgtk1v7S zaYw?&S&C=5R#4!#ETB6>8dO;Q4PlX)BrM8iqM$mc3Bt+~&^iK90rbVTY5^3m19#FN z?K5B%K%S`{6%(TOEtl{N=Gb@|Og= zJF?3QoMI~Vi|ww;V6oj@E$j|4S)xkfP-J%mcXO$s9VLXX&L80K bTmEuX_!{5i8=k>KoGW05nT~NB!O?#KaN)`^ diff --git a/target/classes/runner/services/TransactionServices.class b/target/classes/runner/services/TransactionServices.class index 14e1d57e13bc60d8c2e09025fc14baa61bb9ab82..bbf5933b6add608041abf010c7aca7a42638db3a 100644 GIT binary patch delta 831 zcmYk3%TE(g6vlru)6UTG0zpK>OAtkomLl>}R21<63JRhEzN-Qj5wx@*DpWyYTp2q{ z6L+pPAweUF?p&~UsSE!C6W1EgZ4Ggfd+t5o-1B|sJNHe|kAmdtpO2q_1{Pfu?G8s= zOxj(Ja?GWa<2vnd=yY*3e1enuUso304ySZ}+NFnH9nR>`r!St>;hf8P`t8p@g@#g)(@Mg*k@<$_6k=jH&I#$~ji$!L-qLXol>xvuPRMgX;7-HC<*!yl2 zXFH52ZV^?Ca@(`)`noah2(4nA3B_IRDPl}2;v^JPOgr3H%9QM$&%tqLevOVSWw+;2B{Tfmmt}e6eDFw0o2Jd*)7*( z*m5ctORZ$dt3ql8XVCky&P&grMf^jd&=rwOF`Fn6p;8)U-zO966%WHQp$XX&((0Vd z<(X)`5G_5ojtu9TiPV~jlyGEBq-aW;5N(>-BP|Db&facu>le`lT13ibztAbn-}E{h gaA*yso#pw`&Kl)sldNW0CI{2;5N)#SS3C@V0SxeO_W%F@ delta 1359 zcma)5TW=Fr5dL<(&L-9gX+Qy$2nd%@h@C7HC?SSGQd(}|5|To>cS$zJ;Ov_9I^i0Z zUI-LOg!hFf-gu`%0t8YkUikyO^9w5V4T-AXYyvod5SDgk&Ybza`R1JCmksykm!ALk zV6s-Q4W$CcpSh%6R$MZ8*A@671%#d#nJENX|#yaVc(HbJB=byK1 z*YyHh=&i0|;EiT|XE1$x!rfOt;5&BUR1j;JyJBU}X?w)Bia|DK?ad3!&ZRZf^kp-y z9Ta^>!@7?aZ4C4Jg8oj{){%E`25r6X40|IpTQ$64$=Pnk>h`=GWfNUr%n#0#_2;Wo z+5=a=s~LSJ&V*kWE#UzpIco`)n#d^(!__b+e5TK-Rp`WK1rK=*jp13nvDU;{1s?^4 z0LAcyv1auMM#-XZ4(Amv;G)7MTvixEN#SQ)G4YGSulP-Pe^-ZgO3lSjJa4b(vZxs`(UvaIEG|^aeV3{~)Y}UF!&)$4)82 zrFWX$dTEEq?$H-XHij)2M;9jXZKQvDL|1;Rzx-BznUz!e%d8juKpEY{8SHi)TX#pp w*YS0Khwpj5+gPBWzecZ#?Iw1lqM_=IXs9jR?BdtWPsh&4?m`p2yzn02e~@6=nE(I) From 6b3d5ccbb13085c258b2c62b66cd45e02b2d428d Mon Sep 17 00:00:00 2001 From: gunjan Date: Wed, 20 Jan 2021 16:27:32 -0500 Subject: [PATCH 4/7] cleaed the code --- .../controllers/CustomerControllerTest.java | 115 +++++------------- .../runner/entities/AccountEntityTest.java | 56 ++++++++- .../runner/services/CustomerServiceTest.java | 3 +- target/classes/application.properties | 2 +- target/classes/db/import.sql | 12 +- .../runner/repositories/CustomerRepo.class | Bin 848 -> 1111 bytes .../security/config/WebSecurityConfig$1.class | Bin 1655 -> 1623 bytes .../runner/services/CustomerServices.class | Bin 8835 -> 9251 bytes .../controllers/CustomerControllerTest.class | Bin 8240 -> 8954 bytes .../runner/entities/AccountEntityTest.class | Bin 806 -> 3919 bytes 10 files changed, 92 insertions(+), 96 deletions(-) diff --git a/src/test/java/runner/controllers/CustomerControllerTest.java b/src/test/java/runner/controllers/CustomerControllerTest.java index 7cab94ea6..0d199a474 100644 --- a/src/test/java/runner/controllers/CustomerControllerTest.java +++ b/src/test/java/runner/controllers/CustomerControllerTest.java @@ -24,6 +24,8 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Set; +import java.util.logging.Level; + import static org.hamcrest.CoreMatchers.is; import static org.mockito.ArgumentMatchers.any; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; @@ -60,7 +62,7 @@ public void setup(){ testAccounts.add(account1); testAccounts.add(account2); login = new Login(1L,"user","password",customer); //customer would be null here due to order of code; - customer = new Customer(1L,"John","Doe",login,testAccounts); + customer = new Customer(1L,"John","Doe",address,login,testAccounts); address = new Address(1L,"Address Line 1", "Address Line 2", "Bear","DE","19701"); addressUpdate = new Address(1L,"Address Line Updated", "Address Line Updated", "Bear","DE","19701"); } @@ -94,7 +96,7 @@ public void readCustomer() { try { mockMvc.perform(get("/myaccount/profile")) .andExpect(status().isOk()) - .andExpect(jsonPath("$.firstName",is("John"))) + .andExpect(jsonPath("$.address",is(address))) .andReturn(); } catch (Exception e) { e.printStackTrace(); @@ -114,88 +116,33 @@ public void readCustomerNullTest() { } } -// @WithMockUser -// @Test -// public void updateCustomerPhone() throws Exception { -// String jsonRequest = objectMapper.writeValueAsString("548-458-4584"); -// Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); -// Mockito.when(customerServices.updateCustomerPhoneNumber(any(),any())).thenReturn(0); -// mockMvc.perform(put("/myaccount/profile/phone") -// .content(jsonRequest) -// .contentType(MediaType.APPLICATION_JSON) -// .accept(MediaType.APPLICATION_JSON)) -// .andExpect(status().isOk()); -// } - -// @WithMockUser -// @Test -// public void updateCustomerPhoneCustomerNotfound() throws Exception { -// String jsonRequest = objectMapper.writeValueAsString("548-584-8999"); -// Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(null); -// Mockito.when(customerServices.updateCustomerPhoneNumber(any(),any())).thenReturn(1); -// -// mockMvc.perform(put("/myaccount/profile/phone") -// .content(jsonRequest) -// .contentType(MediaType.APPLICATION_JSON) -// .accept(MediaType.APPLICATION_JSON)) -// .andExpect(status().isNotFound()); -// } - -// @WithMockUser -// @Test -// public void updateCustomerPhoneFormat() throws Exception { -// String jsonRequest = objectMapper.writeValueAsString("54845"); -// Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); -// Mockito.when(customerServices.updateCustomerPhoneNumber(any(),any())).thenReturn(2); -// mockMvc.perform(put("/myaccount/profile/phone") -// .content(jsonRequest) -// .contentType(MediaType.APPLICATION_JSON) -// .accept(MediaType.APPLICATION_JSON)) -// .andExpect(status().isBadRequest()); -// } - - -// -// @WithMockUser -// @Test -// public void updateCustomerEmail() throws Exception { -// String jsonRequest = objectMapper.writeValueAsString("test@gmail.com"); -// Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); -// Mockito.when(customerServices.updateCustomerEmail(any(),any())).thenReturn(0); -// mockMvc.perform(put("/myaccount/profile/email") -// .content(jsonRequest) -// .contentType(MediaType.APPLICATION_JSON) -// .accept(MediaType.APPLICATION_JSON)) -// .andExpect(status().isOk()); -// } - -// @WithMockUser -// @Test -// public void updateCustomerEmailCustomerNotFound() throws Exception { -// String jsonRequest = objectMapper.writeValueAsString("test@gmail.com"); -// Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(null); -// Mockito.when(customerServices.updateCustomerEmail(any(),any())).thenReturn(1); -// -// mockMvc.perform(put("/myaccount/profile/email") -// .content(jsonRequest) -// .contentType(MediaType.APPLICATION_JSON) -// .accept(MediaType.APPLICATION_JSON)) -// .andExpect(status().isNotFound()); -// } - - -// @WithMockUser -// @Test -// public void updateCustomerEmailFormat() throws Exception { -// String jsonRequest = objectMapper.writeValueAsString("test"); -// Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); -// Mockito.when(customerServices.updateCustomerEmail(any(),any())).thenReturn(2); -// mockMvc.perform(put("/myaccount/profile/email") -// .content(jsonRequest) -// .contentType(MediaType.APPLICATION_JSON) -// .accept(MediaType.APPLICATION_JSON)) -// .andExpect(status().isBadRequest()); -// } + @WithMockUser + @Test + public void updateCustomerPhone() throws Exception { + String jsonRequest = objectMapper.writeValueAsString("548-458-4584"); + Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); + // Mockito.when(customer.get(any()).thenReturn("512-444-4587"); + mockMvc.perform(put("/myaccount/profile/phone") + .content(jsonRequest) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @WithMockUser + @Test + public void updateCustomerEmail() throws Exception { + String jsonRequest = objectMapper.writeValueAsString("test@gmail.com"); + Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); + Mockito.when(customerServices.updateCustomerEmail(any(),any())).thenReturn(customer); + mockMvc.perform(put("/myaccount/profile/email") + .content(jsonRequest) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @WithMockUser @Test diff --git a/src/test/java/runner/entities/AccountEntityTest.java b/src/test/java/runner/entities/AccountEntityTest.java index e11269120..e08d69913 100644 --- a/src/test/java/runner/entities/AccountEntityTest.java +++ b/src/test/java/runner/entities/AccountEntityTest.java @@ -1,18 +1,68 @@ package runner.entities; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import runner.AppRunner; +import runner.enums.AccountType; + +import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; @ActiveProfiles("test") @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = AppRunner.class) -@TestPropertySource(properties = { - "DB_USER=newuser", "DB_PASS=password", "DB_URL=jdbc:mysql://localhost:3306/moneymanagement" -}) +@TestPropertySource(properties = {"DB_USER=newuser", + "DB_PASS=password", + "DB_URL=jdbc:mysql://localhost:3306/moneymanagement"}) public class AccountEntityTest { + Account account1; + Account account2; + Account account3; + Set testAccounts; + Login login; + Customer customer; + Transaction transaction; + Set transactionAccount; + Transaction withdrawalTransaction; + Transaction depositTransaction; + ArrayList myTransactionList; + Address address; + @Before + public void setup(){ + account1 = new Account(1L,"12345", AccountType.CHECKING,100.00,"abcdefg", new ArrayList()); + account2 = new Account(2L,"54321", AccountType.SAVINGS,0.00,"gfedcba", new ArrayList()); + account3 = new Account(2L,"56789", AccountType.SAVINGS,100.00,"qwerty", new ArrayList()); + testAccounts = new HashSet(); + testAccounts.add(account1); + testAccounts.add(account2); + login = new Login(1L,"user","password",customer); //customer would be null here due to order of code; + address = new Address(1L,"Address Line 1", "Address Line 2", "Bear","DE","19701"); + customer = new Customer(1L,"John","Doe",address,login,testAccounts); + } + + @Test + public void testClassSignatureAnnotations() { + Assert.assertTrue(Customer.class.isAnnotationPresent(Entity.class)); + } + @Test + public void testCreateJson() throws JsonProcessingException { + ObjectMapper objectMapper= new ObjectMapper(); + // Customer expectedCustomer = new Customer( 1L, "Radha" , "Ramnik","Patel","234324"); + String json = objectMapper.writeValueAsString(account1); + Account actualAccount=objectMapper.readValue(json, Account.class); + Assert.assertEquals(account1.getId(), actualAccount.getId()); + + } + } diff --git a/src/test/java/runner/services/CustomerServiceTest.java b/src/test/java/runner/services/CustomerServiceTest.java index b764f713c..e76575a59 100644 --- a/src/test/java/runner/services/CustomerServiceTest.java +++ b/src/test/java/runner/services/CustomerServiceTest.java @@ -160,11 +160,10 @@ public void updateUserAddressTest() throws Exception { @Test public void checkLoginTest() throws Exception { - Boolean expected =true; + Boolean expected =false; Mockito.when(customerRepo.findAllLoginsNative()).thenReturn(logins); Boolean actual= customerServices.checkLogin(login); - Assert.assertEquals(expected, actual); } diff --git a/target/classes/application.properties b/target/classes/application.properties index eb7841923..df6e3d65c 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -22,7 +22,7 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.use-new-id-generator-mappings= false #set to 'none' to .ddl-auto if you want to create mysql tables from "schema.sql" files instead of from entities -spring.jpa.hibernate.ddl-auto = create-drop +spring.jpa.hibernate.ddl-auto = none spring.jpa.generate-ddl=true spring.jpa.show-sql=true #tells hibernate where to find initial data to import into mysql if .ddl-auto method is used diff --git a/target/classes/db/import.sql b/target/classes/db/import.sql index 00079b8ef..fd31d71a9 100644 --- a/target/classes/db/import.sql +++ b/target/classes/db/import.sql @@ -8,14 +8,14 @@ -- Dumping data for table `account` -- -INSERT INTO `account` VALUES (1,'1234567890','CHECKING',10000,'2004-01-22',NULL,.2,'091000022',1),(2,'3333333333','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',1); -INSERT INTO `account` VALUES (3,'1111111111','CHECKING',10000,'2004-01-22',NULL,.2,'091000022',2),(4,'4444444444','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',2); -INSERT INTO `account` VALUES (5,'2222222222','CHECKING',0,'2004-01-22',NULL,.2,'091000022',3); +INSERT INTO `account` VALUES (1,'1234567890','CHECKING',999999999999,'2004-01-22',NULL,.2,'091000022',1); +# INSERT INTO `account` VALUES (3,'1111111111','CHECKING',10000,'2004-01-22',NULL,.2,'091000022',2),(4,'4444444444','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',2); +# INSERT INTO `account` VALUES (5,'2222222222','CHECKING',0,'2004-01-22',NULL,.2,'091000022',3); -- -- Dumping data for table `login` -- -INSERT INTO `login` VALUES (1,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT9DBAW6Jd1W2','user1'),(2,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT9DBAW6Jd1W2','user2'); +INSERT INTO `login` VALUES (1,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT9DBAW6Jd1W2','user1'); INSERT INTO `login` VALUES (3,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT9DBAW6Jd1W2','user3'); -- -- Dumping data for table `transaction_history` @@ -27,7 +27,7 @@ INSERT INTO `login` VALUES (3,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT -- Dumping data for table `customer` -- -INSERT INTO `customer` VALUES (1,'2012-05-05','tom@gmail.com','Peggy','Patel','G','5122264785','435435345',1),(2,'2012-05-05','john@gmail.com','John','Doe','G','5122264785','435435345',2); +INSERT INTO `customer` VALUES (1,'2012-05-05','tom@gmail.com','Peggy','Patel','G','5122264785','435435345',1); INSERT INTO `customer` VALUES (3,'2012-05-05','tom@gmail.com','Tom','Walter','G','5122264785','435435345',3); -- /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -36,5 +36,5 @@ INSERT INTO `customer` VALUES (3,'2012-05-05','tom@gmail.com','Tom','Walter','G' -- Dumping data for table `address` -- -INSERT INTO `address` VALUES (1,'Bear','123 A st','Second Line','DE','19801'),(2,'Philadelphia','200 B st','Second Line','Pennsylvania','19148'); +INSERT INTO `address` VALUES (1,'Bear','123 A st','Second Line','DE','19801'); INSERT INTO `address` VALUES (3,'Austin','123 A st','Second Line','Texas','19147'); \ No newline at end of file diff --git a/target/classes/runner/repositories/CustomerRepo.class b/target/classes/runner/repositories/CustomerRepo.class index b7f0c982a6427492a3e03010fcab4b866338da8e..056cc5528ed69b1ca06c1cfff47d7f1afb7036df 100644 GIT binary patch delta 369 zcmYL^zfQtX6vn@EX(>vP3W_MGh<~CEHYRQ)Cd4?HG)~09?IKmLxfDZ-s}Iq|S8&r& z2PY>dH=n~7FrF5S%Q^Xd=R4oI_cQyItA6~vz5zJERvrRP3+om(ENniPAE<6!s-V}_ zny|OM5d|$T~CEk{7tpaVT(}t8)+F_xhIi7lwIxfz&IN8d_vJvfqy#ccl}`} znGj0e;6my%IaCQxL?gOZA))ETx1vF<_>taC8x<7dz6kCGGT=mhsc8^QWSOjl2swbI zDNO%M`Bbt|;4jUvOP~mcyTg`Qrc#J9=FTzCi+q9Av1`F;Ggp}x*}c!5xLdm~#~{K} hnzY0yAi@L5CvC~Et$W;e9R|s5oB(F89E@K35H6P&;}_10U;3?-7vfn0nyFw?cKY0 z`Re((-GMEez%sB3tgrRO#G`#ULlaxu#GTup4Hkn_>M}z{F7l$>5J0M+^H<%Zdh~TQ fP-Pi1(kzvfqVb6d)q$x#{`NEGsavGZtE=G)%%KhD diff --git a/target/classes/runner/security/config/WebSecurityConfig$1.class b/target/classes/runner/security/config/WebSecurityConfig$1.class index c2a002ce8f8b3918b186237f2d6ce093a58003e6..467ebb3e0ea52a1526dffe260ace95edb09c6cf1 100644 GIT binary patch delta 387 zcmYk1+b#n^7{`CJ?b@*!T2*zZ9-M0_O4VUeiiE_S3vneuB_6?5Jp$P$X(TQrJb<_r zkKhs9iElR|CYkwv-^~B;&6oKwhp*pHFF=+3P7+MIB$?8bT&D3HW;C;!vSv;*@3KHe zvl!x%rW)e1L(O5uVYPkquJUV!b$mmLUPGDu1$zTS#854{%&IChJxk5__%K8C8J|?9A delta 413 zcmYk2%PvDv7=^!m>Nv;Arbnypt-4c}wiH#RMcooH=|DOXN_5bKM28{<9zfD3@Cc2> zK*9r0POTk#41VM8fPnaVzS5VeBH9;-H diff --git a/target/classes/runner/services/CustomerServices.class b/target/classes/runner/services/CustomerServices.class index 3d37f6bbb0bc328f2d1ccdd1fe6b013eb83ae7b5..426b0612dcfe17bd01362c76bff86da691eb63f5 100644 GIT binary patch delta 3590 zcmb7G33yc175>l6WZui03k;Jm2}@uigoJEtVGAHhSONk8!X7{fA!H$$2}y{u4vTE! z%43VIv~CsK*dnnbfmTZw+S*oYwRX|2)>gaP)wUq^ocCS^qP5@GFJJDQd+xdSp8qWW zefwrUGCTVGwF}PzD4rXn~k@=qm(qDX07XPZ_Z#w=iihl&)#=ms@TW-4|&Ri8V zS9H9m25b%IXBFv%r@TPKfB2|9Uo(sa^AmnegwlTUt?LA|KA41Hwk*Qu{g0iBX` zO6I6gsGmVWO5re4szLo}fJOri8boOvdm60Kkj_ICc2UTD*Zms3VZQ9CrdK*ACG;gq zH|Kiy(M_E%di%QkwWw3L6>Bvbs%RKxnD6NMtA{Jfq%1`vC|hAGwrP~3D3|gSHljwO zd_^N^lt!Z!jiIrM3TT|7@ia=&1d%4vB#qJ)71CslrYM?9H)}LaQ4tjrQjU64QWTZY zbcGG5)@X*JnKVmLDa|&|B+g2kL$@fJLvt0);}fwCl^V@gR3@8KO-e|uA%y0HDjP#} z;n2pq=9bn_LtVH!6xkT6s;#ctG%r$97gn@@783j=kw|MxYjb7O{OZ=)$cC0aURva* z;ywxR`l(#eVp^hTDJ^5g3O_B^XoaGcRH0}Utu{CNk`|7(ZmO+ps}40)wzO1l2vu!q zX^k{iHgIJwOenM$rhfB>NTWa8{MYS?TWV2HbvWMhoYUd z%iPfGcxse(YqUqvUfQSV4oT^LMF(iD*|&Fw@1UYXa?D}6v$MGOR*$YZXw4S_Dc&P= z7h$Zq(4E)ULO+?1P}$Vfu$3^xT$>zBnzbcd)mj$`^MbpvvWYM;%dAXJPK@i#C;Wq4 zIa%f+Pl`D$N%J*ShHFMHZf&j$*Oym=x;GYpGAt zCbOge*r-^AShpCZ*o3(8i*NRkz`GQ4(9o$=s8?x1QxU zc{zc9>(9Y;4(>pD3<=p!V{jL4B6MLWG1m?QOBpU)h+?=So=0XEvRuqiBj!6hvw3H( zwIk;Oa>Opz#X}yUBt7w1J2cPZ@VL(-|14kUfq)NMSC5Ae6ETVZW}pzOFxd)5HrudU zad7q6j_3~deG*1vCw8&_tI!8g?B;mvVN;2oy|$OvBnCdX-eZcuK2H&Kgi&=X7C|3-fa?!|$w&jv<mxXGBq6P_V|G1@nPHvSJX<`a~v6Q zxm@zZeiqn%X644v=Q51!92UlP$Rej>ybF&16WC*Shwc7Fq^^7h{R0zY7?=~opcvA4 z)zcBjGaQL5&u2Vk9OMP;<3gk%x`Y8OWkAaq#!6OI+yJaR4y+tUa2EsfF>t9!8(1P- zSCPiRg5AiD@D&i^vU5SjPA#@)vrm)C^19%c@+)*|={%zGqAT>+sJeknW+44NU6?|M zVX6(snLmJ`eA3N?b`1DXP^MWyaV$?Gy=QoedW0vTBdSS+?Apy|cwj2>o*lRFR`Pi2rTGwI% zdpwPytz$}(kl1Y=j)x@7!IGu`bKohfc7hyM3648XX6@Y=PqNu5{wHR-6H-Kiv2^zT z!Z@ef^;_bu3&y!I%AkWic#>Vc`cn{qK+#eS}qc9Qa4%%;vI#jQ3EK0Ut&> zb598uR4I3LE%)p7ytT#i))voO8y>`I#uVfL*?GGG^n+Hm`13?6lI4dPvT#|61A6iG z+zG8knSV$0#IeLiJ1DR;jzfs=>2oe$tKZVWiDwaZ@=f1@7rgU{zr5=8CNn93K)Q=gc_H>`+ZrJQRwn0;=cb*_*E z8}UQAgMUS`9~dY8+x>nV@B=!|*dHNmGR$&|T?$mhu&fa~?`mr~nejcr zN*6vI|L*w=+nB5~Ky*JHr=#ePAMjlI`G<`8NBA*bbEKc*XO{FPevRKa(!2QQe*jQq BqGtdA delta 3316 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 delta 2519 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 delta 218 zcmX>vw~S5n)W2Q(7#J8#805GZm>Hzm8D!WQWG5eH%9*Urq9!F7RGL?knVTAxS)7@a zlj@k4mtT@tl9``ZyxE&&E+aDw1MB4T?B?|hiVRFZ?I6Gigg{{+$p+-AfBBpXnefq|ca14#0K*{lql3|wG&ZZOHizzd{JfkyEG<@uu-7>gMM7z9D= kWCkGyVIV^UD45J3${@zT&&VJi&A?pDAW_U9S08gME5&!@I From 47d6de27060ce25b1bfa7574c4a6e138b316f832 Mon Sep 17 00:00:00 2001 From: zekai Date: Wed, 20 Jan 2021 16:31:53 -0500 Subject: [PATCH 5/7] some stuff --- src/main/java/runner/entities/Login.java | 1 + .../security/config/WebSecurityConfig.java | 3 ++- target/classes/db/import.sql | 12 ++++++------ .../runner/repositories/CustomerRepo.class | Bin 848 -> 1111 bytes .../security/config/WebSecurityConfig$1.class | Bin 1615 -> 1655 bytes .../runner/services/CustomerServices.class | Bin 8835 -> 9251 bytes 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/runner/entities/Login.java b/src/main/java/runner/entities/Login.java index 914b55db3..ed551156d 100644 --- a/src/main/java/runner/entities/Login.java +++ b/src/main/java/runner/entities/Login.java @@ -108,4 +108,5 @@ public boolean isEnabled() { public Collection getAuthorities() { return null; } + } diff --git a/src/main/java/runner/security/config/WebSecurityConfig.java b/src/main/java/runner/security/config/WebSecurityConfig.java index f629dea39..b8c0bbd62 100644 --- a/src/main/java/runner/security/config/WebSecurityConfig.java +++ b/src/main/java/runner/security/config/WebSecurityConfig.java @@ -98,7 +98,8 @@ public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("GET","POST","PUT","DELETE") .allowedHeaders("*") - .allowedOrigins("http://zip-bank.herokuapp.com"); //angular default port + .allowedOrigins("http://localhost:4200", "http://zip-bank.herokuapp.com"); //angular default port + //.allowedOrigins("http://zip-bank.herokuapp.com"); //angular default port } }; } diff --git a/target/classes/db/import.sql b/target/classes/db/import.sql index 00079b8ef..fd31d71a9 100644 --- a/target/classes/db/import.sql +++ b/target/classes/db/import.sql @@ -8,14 +8,14 @@ -- Dumping data for table `account` -- -INSERT INTO `account` VALUES (1,'1234567890','CHECKING',10000,'2004-01-22',NULL,.2,'091000022',1),(2,'3333333333','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',1); -INSERT INTO `account` VALUES (3,'1111111111','CHECKING',10000,'2004-01-22',NULL,.2,'091000022',2),(4,'4444444444','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',2); -INSERT INTO `account` VALUES (5,'2222222222','CHECKING',0,'2004-01-22',NULL,.2,'091000022',3); +INSERT INTO `account` VALUES (1,'1234567890','CHECKING',999999999999,'2004-01-22',NULL,.2,'091000022',1); +# INSERT INTO `account` VALUES (3,'1111111111','CHECKING',10000,'2004-01-22',NULL,.2,'091000022',2),(4,'4444444444','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',2); +# INSERT INTO `account` VALUES (5,'2222222222','CHECKING',0,'2004-01-22',NULL,.2,'091000022',3); -- -- Dumping data for table `login` -- -INSERT INTO `login` VALUES (1,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT9DBAW6Jd1W2','user1'),(2,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT9DBAW6Jd1W2','user2'); +INSERT INTO `login` VALUES (1,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT9DBAW6Jd1W2','user1'); INSERT INTO `login` VALUES (3,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT9DBAW6Jd1W2','user3'); -- -- Dumping data for table `transaction_history` @@ -27,7 +27,7 @@ INSERT INTO `login` VALUES (3,'$2a$10$DM98Ynu/prVcywurljSHSOko73BKJb29RFW3vCGFYT -- Dumping data for table `customer` -- -INSERT INTO `customer` VALUES (1,'2012-05-05','tom@gmail.com','Peggy','Patel','G','5122264785','435435345',1),(2,'2012-05-05','john@gmail.com','John','Doe','G','5122264785','435435345',2); +INSERT INTO `customer` VALUES (1,'2012-05-05','tom@gmail.com','Peggy','Patel','G','5122264785','435435345',1); INSERT INTO `customer` VALUES (3,'2012-05-05','tom@gmail.com','Tom','Walter','G','5122264785','435435345',3); -- /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -36,5 +36,5 @@ INSERT INTO `customer` VALUES (3,'2012-05-05','tom@gmail.com','Tom','Walter','G' -- Dumping data for table `address` -- -INSERT INTO `address` VALUES (1,'Bear','123 A st','Second Line','DE','19801'),(2,'Philadelphia','200 B st','Second Line','Pennsylvania','19148'); +INSERT INTO `address` VALUES (1,'Bear','123 A st','Second Line','DE','19801'); INSERT INTO `address` VALUES (3,'Austin','123 A st','Second Line','Texas','19147'); \ No newline at end of file diff --git a/target/classes/runner/repositories/CustomerRepo.class b/target/classes/runner/repositories/CustomerRepo.class index b7f0c982a6427492a3e03010fcab4b866338da8e..056cc5528ed69b1ca06c1cfff47d7f1afb7036df 100644 GIT binary patch delta 369 zcmYL^zfQtX6vn@EX(>vP3W_MGh<~CEHYRQ)Cd4?HG)~09?IKmLxfDZ-s}Iq|S8&r& z2PY>dH=n~7FrF5S%Q^Xd=R4oI_cQyItA6~vz5zJERvrRP3+om(ENniPAE<6!s-V}_ zny|OM5d|$T~CEk{7tpaVT(}t8)+F_xhIi7lwIxfz&IN8d_vJvfqy#ccl}`} znGj0e;6my%IaCQxL?gOZA))ETx1vF<_>taC8x<7dz6kCGGT=mhsc8^QWSOjl2swbI zDNO%M`Bbt|;4jUvOP~mcyTg`Qrc#J9=FTzCi+q9Av1`F;Ggp}x*}c!5xLdm~#~{K} hnzY0yAi@L5CvC~Et$W;e9R|s5oB(F89E@K35H6P&;}_10U;3?-7vfn0nyFw?cKY0 z`Re((-GMEez%sB3tgrRO#G`#ULlaxu#GTup4Hkn_>M}z{F7l$>5J0M+^H<%Zdh~TQ fP-Pi1(kzvfqVb6d)q$x#{`NEGsavGZtE=G)%%KhD diff --git a/target/classes/runner/security/config/WebSecurityConfig$1.class b/target/classes/runner/security/config/WebSecurityConfig$1.class index 2243953205af922d00173123f0ab99cccd94e36a..42df2f998ff42dae4f3ca03268764bdc5966fb21 100644 GIT binary patch delta 451 zcmYk2OD{uF6otQY+v{F82Un}!k9yaww%+eYy(2L*5F?=)M9@f0L@@9V`YQ}YkVqIA znHc#kW@29voaF4a&dFMP?Q`DrhhBO8e0&B5SSrS))1jQ0O_zg5+@jkiVUx5;+4MN{ z(r44}qql5UGsnC_ zd71_03ui`kOwq8L&*#Qcsnfk&Vr%noKe?MdKH5Lo%;l1qqXW&NZ}AGvf!OVfku@${ z8C4NNxvn23k1%9Ms1&RcHYMoaI9~itq8>1AzBScSi^K^V)JXO9qN0|1L7(~EWFFzB zB7Et}p^>JawpWwXsT3(}i8&+Rxy?9PrrG(I in*L2q6Q%htH7dpcEm93yX%h_6P6u_u9Fe(#vc3Rt(KLAg delta 387 zcmYk1+b#n^7{`CJ?b@*!T2)o5t+QIHO4VTDPuuCIo zSy^q^3$MKUyVAp_)wJ>n8AH*7N+v@u8PJlQrcW>vT-&*We(5`e17~FA%tQ>A0dmrT z8|f57Qrn8uZD^RM5E{r;3p*0{!JA#ai9chX#!_9!k9423<=Gi5WZui02Mm)i2}@uigoJEtL3T+Z5RgR(djMfbhGarA6Os^RkwFne zapkeaR%ElH21SAcfmTFY+S*oYwRX|2)>gaP)wUq^ocCS^qP4$Y|Hz$l&pr3v^PTgZ zb6>VjIWjHw%9XP(04SpU8kVCi85KC5jA!tyiW3^1!$}PRv}>$BrQvzR#o)AtGw9H8 z7Ux9zvY32Dh8JWw@4<_>;K56HS;JTHH3b(nq~Pna^BWqziC1L!mV$30#sQ9Dc`jd(eW&US@^cPQz#lNcfn~J}S;vYUZ@h=tsmfJ3gGnWO; zB^4j5xT4|{m7o$aOmfKJRLP}Ml1grs6qQubCCi|x;K>H4gI4EFz2>NJS5j1SeqWrKCfrW~DyP_B;k*q~6JPWe=zV>PN3 zD%5Ex4O3{iP9tcfPDM0Ir|W5$PNPK{Lt_=n)M*@zS7?Gx6X^zpCh1g6C4{tH?zA+W zO6f)&RR}3GS*Iy9Ri`qVW*keNnlYVj(rG%)&}k;0h?NK`G)t%1vN_$Lr1WY+V0s`} z9|%VRtHX^=&4IdbBov6Q4pi2JD%Z@6R)-@x-Ar=`-qL8axv9A^*f1;9TobKo>fxrj zUMlI41h<#Ub(%->by`3RS+UqlixgU{(-NxCX(=r;)_PLr3^#A83ATg+4Z)_SP*tFE zT~l+kKGawqYKRuD4o9j=>gvopn`Q@_!!02%E$3Tq@zM&NR#H%>RaB`XMpZh6Xtl9i z%X3y^o3T?XaMp0R&uJsOg{fA@{dhp9HB@I@(kcoc!$Cfz-ixDhNQB@ksjQ5yiwIT* z+!Wpr3g{H21_{+#L-)3qbYJgM6&tPbsxQsG zlkOvoH0C%9dYb6R6Ow`r4Rz}Y1B?}^{*^}zeURnwp%@8&7)s zIr4Ihxvn&0Qi|fK3r4Dk&TDQAN2-m@sXL64)LvQzmloYm=#^tcRe$?{lyT&&pa+a) zsafsrUhk9lL7g6=-8#O6Cv+UaQR9k#6zw&N(mtSlM*sAgiz>J`0WS0rlC$IxMsWvN z#j=}!D@`3U@iRK6`loc=c+U00W36!^-JiY2J_GQfj%A%!fF#r-!oP$l8n`Lc8duVf z(;B0#_sE!71z0x^Wmt%abzJrGXLTP65?p7$SC*X3PLE#C$&IJMQH?N)m4{pF%Ou}RoV<}3^VC1q5 zyOjV}i;akFV&BJNIBv&g_J1jQAcid*k2}~@qGzq$$!ih=4;&wJi@;V_F?HhK$a=zE z*k}INGo54+X@X4@?eGm5XmRjTWjFeajL7FI&OGzE#KL-wbHThbwGgrnSgt0z;0vE=ysQbPH_G>5Y z!g?U&TLE0H5m!6s2AOWLOTLOYmY%_~b~v76J(<<( zUS=+*GQKBS>A+Ko@1CdG#$cTWqK9b@?Lu$-fak)CA2Q}2;m3H}mVSz#nbLdsHGX4D IAK{<>0ltB$1ONa4 delta 3316 zcmb7Gd3;pW89m?3B=60en=lM8gg`J0Av=i>L@H-3V@uoKLdjl8D82+GbzopOpqXzz#i9eb6vx&D&{Kdpy zHKV`j;_oKjG4T%*|1|M06aUs@@9N^BiT8B>@8^zYg&Z9a+ED)72ou+Ilt<^ z%~+~15AzKfq$DbX1qJqN!R#f?%UhaPwk$OyP00{RS29$FDYRp~AsI@B%M}WXvBZ!} zC0UYfNRE;blB;B-NtKKdq}gYZ(vp-+mMM0V70tdj zEZ6l*mZ@QxrleYGlw2=2C~T7HN^0ds!AQ+1xVB~SQYCfRVwZ(V{5Q#9yD2m#rCw$z z+>Zy8G{{VQUub^qE_{a8W`(g=TWd6AwvstASIIn?FGyXnxMOkY`u5gUrM0c=+69rx z&CP4px3y=kVmEVL>!ubu!(U+Ms}IbD+8>J~&n`{bVm9f{Vs?(ETrp^gG#f%t zEwW6>t+HH6tE{juq&zxwrK~b!wURbjqvSU2;@g$1m1%-ZyUd@NV#qor?b_CQ>F9bX zbz^{meZ?A(PC)quwS7TWSh7Lxuv4Rhljl>rve7;h9^7?dV5RsQWs_YL&9%!1-rH3l zJul%qmE0v;6rRA73VX2Eu1Om!+w9G0Zw9sta_zU%2HV?)jE*((f&&4hYx%I{(=pxIr3WBVUt6wYO1DeO~;EL*s%l(n!MT#WC?C8?nbtt=s0qKZjA7;$Q4Y<3O*9s2_vu{0sk?K zJjhJ}Xb!0a1We$)u0$3lI$R1lN23X7W$3^L9&BMG?!ZPKo`rtcggd$SF0NFGxw|>1 z354K#4@Cwx2dbn8e5`{Lf*7`V=y!0tKD_)ee23wWc}T!gmoFF%paRFuRXOKqncOnN0SSw6l4isPmw9Ep;}vh|9%S`( zPemX1By}3vL9S#+ksf$Cl6f(5NN6f=#9ZEqC6wuE3U!Sm(v5hO5`ByU)s8AhQjFEk zgr|0Tp3-Bkr;=ggqxcvDoI^toQs)6j-BG&8o%?uV?h~BTI#*ifYYcpnQqOaI8}!jI zyqo$dJj5;frk+D!0rzmi)5HX_za;j$zCNvV$q$W8WW#l738ghDj;g*3C-*FzVjs#J z7Sk6xonUn~31K&-vj^j_7n87$B6_0NF-H$@^fs8 z$0=5KDM(%xE9eXJCO1&SBK3(t=`?q+SL$`8c7pg%62&P>?=&iK232^`!S1A8GIF0p z9`4<_D2ihazNec>woA~6~8J>3@u58!`=cR(d;{VE5Gc*4v$W@)=V=b3TsRyuZd zM&Kf5i4ClE%Y98e|96DL*ct{*zRx{>5F;EYOc;^IIA$NioH Date: Wed, 20 Jan 2021 17:53:41 -0500 Subject: [PATCH 6/7] Update README.md --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a6ac5cf47..59f2abf6f 100644 --- a/README.md +++ b/README.md @@ -18,19 +18,21 @@ Use Spring Initializr to create an starting point for you application ### Money Management Application #### User Stories to Fulfill -* As a client, - * can create new user account (Customer) - * can create new account for a customer +* As a logged in client, + * can create new client + * can create new account for a client * deposit money to each account * withdraw money from each account * transfer money to and from any 2 accounts + * delete the client if accounts with Balance = 0 + * display all account belonging to client + * display account details and transaction details of loaded account ### Money Management Application #### User Stories to Fulfill * As a client, (not logged in) I - * can create new accounts - * deposit money to each account - * withdraw money from each account - * transfer money to and from any 2 accounts + * can create new customer profile + * login + From c264e78dcce385fa91b6f495903673bbf16594e2 Mon Sep 17 00:00:00 2001 From: zekai Date: Thu, 21 Jan 2021 13:30:42 -0500 Subject: [PATCH 7/7] Corrected delete account feature --- .../runner/controllers/AccountController.java | 10 +- .../controllers/CustomerController.java | 14 +-- src/main/java/runner/entities/Customer.java | 3 +- .../java/runner/repositories/AccountRepo.java | 3 +- .../security/config/WebSecurityConfig.java | 6 +- .../runner/security/utilities/JwtUtil.java | 2 +- .../java/runner/services/AccountServices.java | 26 +++-- .../runner/services/CustomerServices.java | 18 ++++ src/main/resources/db/import.sql | 2 +- .../controllers/AccountControllerTest.java | 16 +-- .../controllers/CustomerControllerTest.java | 98 ++++++++++-------- .../runner/services/AccountServiceTest.java | 21 ---- .../runner/services/CustomerServiceTest.java | 22 ++++ target/classes/application.properties | 2 +- target/classes/db/import.sql | 2 +- .../controllers/AccountController.class | Bin 5261 -> 4875 bytes .../controllers/CustomerController.class | Bin 5165 -> 5704 bytes target/classes/runner/entities/Customer.class | Bin 5309 -> 5335 bytes .../runner/repositories/AccountRepo.class | Bin 910 -> 994 bytes .../security/config/WebSecurityConfig$1.class | Bin 1623 -> 1615 bytes .../runner/services/AccountServices.class | Bin 9908 -> 9710 bytes .../runner/services/CustomerServices.class | Bin 9251 -> 10390 bytes .../controllers/AccountControllerTest.class | Bin 7660 -> 7303 bytes .../controllers/CustomerControllerTest.class | Bin 8954 -> 9232 bytes .../runner/services/AccountServiceTest.class | Bin 8342 -> 7697 bytes .../runner/services/CustomerServiceTest.class | Bin 8303 -> 9019 bytes 26 files changed, 146 insertions(+), 99 deletions(-) diff --git a/src/main/java/runner/controllers/AccountController.java b/src/main/java/runner/controllers/AccountController.java index a746dce61..5609d40c1 100644 --- a/src/main/java/runner/controllers/AccountController.java +++ b/src/main/java/runner/controllers/AccountController.java @@ -9,6 +9,8 @@ import runner.entities.Transaction; import runner.services.AccountServices; import runner.views.Views; + +import javax.transaction.Transactional; import java.util.Optional; import java.util.Set; @@ -56,10 +58,10 @@ public ResponseEntity create(@RequestBody Account account) throws Excep // } //This needs to be rewritten with "encryptedUrl/delete", need to doublecheck if deleting account deletes User due to cascade.ALL - @DeleteMapping(value = "/{encryptedUrl}/delete") - public ResponseEntity deleteById(@PathVariable String encryptedUrl){ - return new ResponseEntity<>(accountServices.removeAccount(encryptedUrl), HttpStatus.OK); - } +// @DeleteMapping(value = "/{encryptedUrl}/delete") +// public ResponseEntity deleteAccount(@PathVariable String encryptedUrl){ +// return new ResponseEntity<>(accountServices.removeAccount(encryptedUrl), HttpStatus.OK); +// } @JsonView(Views.AccountSpecific.class) @PutMapping(value = "/{encryptedUrl}/deposit") diff --git a/src/main/java/runner/controllers/CustomerController.java b/src/main/java/runner/controllers/CustomerController.java index 203aa3953..08d28f91a 100644 --- a/src/main/java/runner/controllers/CustomerController.java +++ b/src/main/java/runner/controllers/CustomerController.java @@ -20,13 +20,9 @@ public class CustomerController { @JsonView(Views.Profile.class) @GetMapping(value = "/myaccount/profile") - public ResponseEntity getCustomer() { + public ResponseEntity getCustomer() { String currentPrincipalName = SecurityContextHolder.getContext().getAuthentication().getName(); //needs JWT token in header - Customer customer =customerServices.readCustomerByLogin(currentPrincipalName); //<< for testing on angular, need to change back to currentPrincipalName - if( customer == null) - return new ResponseEntity<>("Customer not found", HttpStatus.NOT_FOUND); - else - return new ResponseEntity<>(customer, HttpStatus.OK); + return new ResponseEntity<>(customerServices.readCustomerByLogin(currentPrincipalName), HttpStatus.OK); } @PostMapping(value = "/openaccount",consumes = MediaType.APPLICATION_JSON_VALUE) @@ -83,4 +79,10 @@ else if(flag==2) return new ResponseEntity<>("No accounts/user found", HttpStatus.NOT_FOUND); } + @DeleteMapping(value = "myaccount/{encryptedUrl}/delete") + public ResponseEntity deleteAccount(@PathVariable String encryptedUrl) throws Exception{ + String currentPrincipalName = SecurityContextHolder.getContext().getAuthentication().getName(); + return new ResponseEntity<>(customerServices.removeAccount(currentPrincipalName,encryptedUrl), HttpStatus.OK); + } + } \ No newline at end of file diff --git a/src/main/java/runner/entities/Customer.java b/src/main/java/runner/entities/Customer.java index 115fb5857..550564301 100644 --- a/src/main/java/runner/entities/Customer.java +++ b/src/main/java/runner/entities/Customer.java @@ -9,7 +9,6 @@ import java.util.Set; import static javax.persistence.CascadeType.ALL; - @Entity public class Customer { @Id @@ -53,7 +52,7 @@ public class Customer { private Login login; @JsonView(Views.Profile.class) //delete in production - @OneToMany(mappedBy = "customer", cascade = ALL,fetch = FetchType.EAGER) + @OneToMany(mappedBy = "customer", cascade = ALL,fetch = FetchType.EAGER, orphanRemoval = true) @OrderBy @JsonBackReference private Set accounts; diff --git a/src/main/java/runner/repositories/AccountRepo.java b/src/main/java/runner/repositories/AccountRepo.java index 161876ccf..20782ecda 100644 --- a/src/main/java/runner/repositories/AccountRepo.java +++ b/src/main/java/runner/repositories/AccountRepo.java @@ -16,5 +16,6 @@ public interface AccountRepo extends CrudRepository { Account findAccountByEncryptedUrl(String encryptedUrl); Account findAccountByAccountNumber(String accountNumber); Set findAccountsByCustomer_LoginUsername (String login); - Account deleteAccountByEncryptedUrl(String encryptedUrl); + Integer deleteAccountByEncryptedUrl(String encryptedUrl); + Integer deleteByEncryptedUrl(String encryptedUrl); } diff --git a/src/main/java/runner/security/config/WebSecurityConfig.java b/src/main/java/runner/security/config/WebSecurityConfig.java index b8c0bbd62..cc602362d 100644 --- a/src/main/java/runner/security/config/WebSecurityConfig.java +++ b/src/main/java/runner/security/config/WebSecurityConfig.java @@ -98,8 +98,8 @@ public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("GET","POST","PUT","DELETE") .allowedHeaders("*") - .allowedOrigins("http://localhost:4200", "http://zip-bank.herokuapp.com"); //angular default port - //.allowedOrigins("http://zip-bank.herokuapp.com"); //angular default port + //.allowedOrigins("http://localhost:4200"); //angular default port + .allowedOrigins("http://zip-bank.herokuapp.com"); //angular default port } }; } @@ -107,8 +107,6 @@ public void addCorsMappings(CorsRegistry registry) { - - /* @Override //creating own form for login protected void configure(HttpSecurity http) throws Exception{ http diff --git a/src/main/java/runner/security/utilities/JwtUtil.java b/src/main/java/runner/security/utilities/JwtUtil.java index a1f93a568..05c74ec61 100644 --- a/src/main/java/runner/security/utilities/JwtUtil.java +++ b/src/main/java/runner/security/utilities/JwtUtil.java @@ -43,7 +43,7 @@ public String generateToken(UserDetails userDetails){ private String createToken(Map claims, String subject){ return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis())) - .setExpiration(new Date(System.currentTimeMillis()+1000*60*60*100)) + .setExpiration(new Date(System.currentTimeMillis()+1000*60*30)) .signWith(SignatureAlgorithm.HS256, SECRET_KEY).compact(); } diff --git a/src/main/java/runner/services/AccountServices.java b/src/main/java/runner/services/AccountServices.java index e8bf5dcce..957a00615 100644 --- a/src/main/java/runner/services/AccountServices.java +++ b/src/main/java/runner/services/AccountServices.java @@ -3,8 +3,11 @@ import runner.entities.Account; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import runner.entities.Customer; import runner.entities.Transaction; import runner.repositories.AccountRepo; + +import javax.transaction.Transactional; import java.time.LocalDate; import java.util.*; import java.util.logging.Level; @@ -12,6 +15,7 @@ import java.util.stream.Collector; import java.util.stream.Collectors; +@Transactional @Service public class AccountServices { private final static Logger loggerService = Logger.getLogger(AccountServices.class.getName()); @@ -82,14 +86,20 @@ public Account getAccountByAccountNumber(String accountNumber){ return accountRepo.findAccountByAccountNumber(accountNumber); } - - public Boolean removeAccount(String encryptedUrl){ - if(accountRepo.findAccountByEncryptedUrl(encryptedUrl).getBalance()==0) { - accountRepo.deleteAccountByEncryptedUrl(encryptedUrl); - return true; - } - return false; - } +// public Boolean removeAccount(String encryptedUrl){ +// Account testAcct= accountRepo.findAccountByEncryptedUrl(encryptedUrl); +// Double testBalance = testAcct.getBalance(); +// Customer customer = testAcct.getCustomer(); +// if(accountRepo.findAccountByEncryptedUrl(encryptedUrl).getBalance()==0) { +// Integer testRemoveInt = accountRepo.deleteAccountByEncryptedUrl(encryptedUrl); +// //Integer myAcct = accountRepo.deleteByEncryptedUrl(encryptedUrl); +// Set myAccts = customer.getAccounts(); +// myAccts.remove(testAcct); +// +// return true; +// } +// return false; +// } // //REMOVE if not used // public Optional updateAccount(Long id, Account account) throws Exception{ diff --git a/src/main/java/runner/services/CustomerServices.java b/src/main/java/runner/services/CustomerServices.java index e3589c98b..55724ff99 100644 --- a/src/main/java/runner/services/CustomerServices.java +++ b/src/main/java/runner/services/CustomerServices.java @@ -6,6 +6,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import runner.repositories.CustomerRepo; + +import javax.transaction.Transactional; import java.text.ParseException; import java.util.*; import java.util.logging.Level; @@ -153,4 +155,20 @@ public Set getAllAccounts(Long id) { return null; } + @Transactional + public Customer removeAccount(String username, String encryptedUrl) throws Exception{ + Customer customer = customerRepo.findCustomerByLoginUsername(username); + List testAcct= customer.getAccounts().stream() + .filter(account -> account.getEncryptedUrl().equals(encryptedUrl)).collect(Collectors.toList()); + if(testAcct.get(0).getBalance()==0) { + + Set myAccts = customer.getAccounts().stream() + .filter(account -> !account.getEncryptedUrl().equals(encryptedUrl)).collect(Collectors.toSet()); + customer.getAccounts().clear(); + customer.getAccounts().addAll(myAccts); + return customerRepo.save(customer); + } + throw new Exception("Balance is not 0"); + } + } diff --git a/src/main/resources/db/import.sql b/src/main/resources/db/import.sql index fd31d71a9..41ac5be6a 100644 --- a/src/main/resources/db/import.sql +++ b/src/main/resources/db/import.sql @@ -9,7 +9,7 @@ -- INSERT INTO `account` VALUES (1,'1234567890','CHECKING',999999999999,'2004-01-22',NULL,.2,'091000022',1); -# INSERT INTO `account` VALUES (3,'1111111111','CHECKING',10000,'2004-01-22',NULL,.2,'091000022',2),(4,'4444444444','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',2); +INSERT INTO `account` VALUES (2,'1111111111','CHECKING',0,'2004-01-22',NULL,.2,'091000022',1),(3,'4444444444','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',1); # INSERT INTO `account` VALUES (5,'2222222222','CHECKING',0,'2004-01-22',NULL,.2,'091000022',3); -- -- Dumping data for table `login` diff --git a/src/test/java/runner/controllers/AccountControllerTest.java b/src/test/java/runner/controllers/AccountControllerTest.java index 58b9a8426..ff980157d 100644 --- a/src/test/java/runner/controllers/AccountControllerTest.java +++ b/src/test/java/runner/controllers/AccountControllerTest.java @@ -108,14 +108,14 @@ public void readAccountByUrlTest() throws Exception { public void createAccountTest(){ } - @WithMockUser - @Test - public void deleteAccountTest() throws Exception { - Mockito.when(accountServices.removeAccount(any())).thenReturn(true); - - mockMvc.perform(delete("/myaccount/{encryptedUrl}/delete","12345")) - .andExpect(status().isOk()); - } +// @WithMockUser +// @Test +// public void deleteAccountTest() throws Exception { +// Mockito.when(accountServices.removeAccount(any())).thenReturn(true); +// +// mockMvc.perform(delete("/myaccount/{encryptedUrl}/delete","12345")) +// .andExpect(status().isOk()); +// } @WithMockUser @Test diff --git a/src/test/java/runner/controllers/CustomerControllerTest.java b/src/test/java/runner/controllers/CustomerControllerTest.java index 0d199a474..1a15878c2 100644 --- a/src/test/java/runner/controllers/CustomerControllerTest.java +++ b/src/test/java/runner/controllers/CustomerControllerTest.java @@ -2,6 +2,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; +import org.hamcrest.Matchers; +import org.json.JSONException; +import org.json.JSONObject; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -27,6 +30,7 @@ import java.util.logging.Level; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.hasSize; import static org.mockito.ArgumentMatchers.any; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -53,8 +57,9 @@ public class CustomerControllerTest { Login login; Customer customer; Address address,addressUpdate; + String jsonString; @Before - public void setup(){ + public void setup() throws JSONException { account1 = new Account(1L,"12345", AccountType.CHECKING,100.00,"abcdefg", new ArrayList()); account2 = new Account(2L,"54321", AccountType.SAVINGS,0.00,"gfedcba", new ArrayList()); account3 = new Account(2L,"56789", AccountType.SAVINGS,100.00,"qwerty", new ArrayList()); @@ -65,6 +70,11 @@ public void setup(){ customer = new Customer(1L,"John","Doe",address,login,testAccounts); address = new Address(1L,"Address Line 1", "Address Line 2", "Bear","DE","19701"); addressUpdate = new Address(1L,"Address Line Updated", "Address Line Updated", "Bear","DE","19701"); + + //payload + JSONObject payload = new JSONObject(); + payload.put("key","value"); + jsonString = payload.toString(); } @WithMockUser @@ -92,58 +102,55 @@ public void createCustomerTest() { @WithMockUser @Test public void readCustomer() { - Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); + Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); try { mockMvc.perform(get("/myaccount/profile")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.address",is(address))) - .andReturn(); + .andExpect(jsonPath("$.phoneNumber",is(customer.getPhoneNumber()))) + .andExpect(jsonPath("$.email",is(customer.getEmail()))) + .andExpect(jsonPath("$.address.firstLine",is(customer.getAddress().getFirstLine()))) + .andExpect(status().isOk()); } catch (Exception e) { e.printStackTrace(); } } - @WithMockUser - @Test - public void readCustomerNullTest() { - Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(null); - try { - mockMvc.perform(get("/myaccount/profile")) - .andExpect(status().isNotFound()) - .andReturn(); - } catch (Exception e) { - e.printStackTrace(); - } - } +// @WithMockUser +// @Test +// public void readCustomerNullTest() { +// Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(null); +// try { +// mockMvc.perform(get("/myaccount/profile")) +// .andExpect(status().isNotFound()) +// .andReturn(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } @WithMockUser @Test public void updateCustomerPhone() throws Exception { - String jsonRequest = objectMapper.writeValueAsString("548-458-4584"); - Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); + //String jsonRequest = objectMapper.writeValueAsString("548-458-4584"); + Mockito.when(customerServices.updateCustomerPhoneNumber(any(),any())).thenReturn(customer); // Mockito.when(customer.get(any()).thenReturn("512-444-4587"); mockMvc.perform(put("/myaccount/profile/phone") - .content(jsonRequest) .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON)) + .content(jsonString)) + .andExpect(jsonPath("$.phoneNumber",is(customer.getPhoneNumber()))) .andExpect(status().isOk()); } @WithMockUser @Test public void updateCustomerEmail() throws Exception { - String jsonRequest = objectMapper.writeValueAsString("test@gmail.com"); - Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); Mockito.when(customerServices.updateCustomerEmail(any(),any())).thenReturn(customer); mockMvc.perform(put("/myaccount/profile/email") - .content(jsonRequest) .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON)) + .content(jsonString)) + .andExpect(jsonPath("$.email",is(customer.getEmail()))) .andExpect(status().isOk()); } - - @WithMockUser @Test public void updateCustomerAddress() throws Exception { @@ -156,25 +163,26 @@ public void updateCustomerAddress() throws Exception { .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } - @WithMockUser - @Test - public void updateCustomerAddressCustomerNotFound() throws Exception { - String jsonRequest = objectMapper.writeValueAsString(addressUpdate); - Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(null); - Mockito.when(customerServices.updateCustomerAddress(any(),any())).thenReturn(null); - mockMvc.perform(put("/myaccount/profile/address") - .content(jsonRequest) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isNotFound()); - } + +// @WithMockUser +// @Test +// public void updateCustomerAddressCustomerNotFound() throws Exception { +// String jsonRequest = objectMapper.writeValueAsString(addressUpdate); +// Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(null); +// Mockito.when(customerServices.updateCustomerAddress(any(),any())).thenReturn(null); +// mockMvc.perform(put("/myaccount/profile/address") +// .content(jsonRequest) +// .contentType(MediaType.APPLICATION_JSON) +// .accept(MediaType.APPLICATION_JSON)) +// .andExpect(status().isNotFound()); +// } @WithMockUser @Test public void updateCustomerDeleteTest() throws Exception { Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); Mockito.when(customerServices.deleteCustomer(any())).thenReturn(0); - mockMvc.perform(delete("/myaccount/profile/delete")) + mockMvc.perform(delete("/myaccount/profile/delete")) .andExpect(status().isOk()); } @@ -189,10 +197,18 @@ public void updateCustomerDeleteTestAccountWithBalanceFound() throws Exception { @WithMockUser @Test - public void updateCustomerDeleteCustomerNotfound() throws Exception { + public void updateCustomerDeleteCustomerGood() throws Exception { Mockito.when(customerServices.readCustomerByLogin(any())).thenReturn(customer); Mockito.when(customerServices.deleteCustomer(any())).thenReturn(1); mockMvc.perform(delete("/myaccount/profile/delete")) .andExpect(status().isNotFound()); } + + @WithMockUser + @Test + public void DeleteAccountTestBad() throws Exception { + Mockito.when(customerServices.removeAccount(any(),any())).thenReturn(customer); + mockMvc.perform(delete("/myaccount/{encryptedUrl}/delete","12345")) + .andExpect(status().isOk()); + } } diff --git a/src/test/java/runner/services/AccountServiceTest.java b/src/test/java/runner/services/AccountServiceTest.java index 4a764fdf3..730a9678c 100644 --- a/src/test/java/runner/services/AccountServiceTest.java +++ b/src/test/java/runner/services/AccountServiceTest.java @@ -117,27 +117,6 @@ public void findAccountByEncryptedUrlTest(){ // Assert.assertTrue(expectedAccount.getAccountNumber().length()==10); // } - @Test - public void removeAccountTestFalse() { - String encryptedUrl = account1.getEncryptedUrl(); - Mockito.when(accountRepo.deleteAccountByEncryptedUrl(any())).thenReturn(account1); - Mockito.when(accountRepo.findAccountByEncryptedUrl(any())).thenReturn(account1); - - Boolean deleted = accountServices.removeAccount(encryptedUrl); - - Assert.assertFalse(deleted); - } - - @Test - public void removeAccountTestTrue() { - String encryptedUrl = account2.getEncryptedUrl(); - Mockito.when(accountRepo.deleteAccountByEncryptedUrl(any())).thenReturn(account2); - Mockito.when(accountRepo.findAccountByEncryptedUrl(any())).thenReturn(account2); - - Boolean deleted = accountServices.removeAccount(encryptedUrl); - - Assert.assertTrue(deleted); - } @Test public void transferMoneyTestTrue() throws Exception { diff --git a/src/test/java/runner/services/CustomerServiceTest.java b/src/test/java/runner/services/CustomerServiceTest.java index e76575a59..0dab1c4ed 100644 --- a/src/test/java/runner/services/CustomerServiceTest.java +++ b/src/test/java/runner/services/CustomerServiceTest.java @@ -174,5 +174,27 @@ public void getAllAccountsTest() throws Exception { Assert.assertEquals(testAccounts.size(), actualAccounts.size()); } + @Test + public void removeAccountTestTrue()throws Exception { + String username = customer.getLogin().getUsername(); + String encryptedUrl = account2.getEncryptedUrl(); + Mockito.when(customerRepo.findCustomerByLoginUsername(any())).thenReturn(customer); + Mockito.when(customerRepo.save(any())).thenReturn(customer); + + customerServices.removeAccount(username,encryptedUrl); + + Assert.assertTrue(customer.getAccounts().size()==1); + } + + + @Test(expected = Exception.class) + public void removeAccountTest() throws Exception { + String username = customer.getLogin().getUsername(); + String encryptedUrl = account1.getEncryptedUrl(); + Mockito.when(customerRepo.findCustomerByLoginUsername(any())).thenReturn(customer); + Mockito.when(customerRepo.save(any())).thenReturn(customer); + + customerServices.removeAccount(username,encryptedUrl); + } } \ No newline at end of file diff --git a/target/classes/application.properties b/target/classes/application.properties index df6e3d65c..eb7841923 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -22,7 +22,7 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.use-new-id-generator-mappings= false #set to 'none' to .ddl-auto if you want to create mysql tables from "schema.sql" files instead of from entities -spring.jpa.hibernate.ddl-auto = none +spring.jpa.hibernate.ddl-auto = create-drop spring.jpa.generate-ddl=true spring.jpa.show-sql=true #tells hibernate where to find initial data to import into mysql if .ddl-auto method is used diff --git a/target/classes/db/import.sql b/target/classes/db/import.sql index fd31d71a9..41ac5be6a 100644 --- a/target/classes/db/import.sql +++ b/target/classes/db/import.sql @@ -9,7 +9,7 @@ -- INSERT INTO `account` VALUES (1,'1234567890','CHECKING',999999999999,'2004-01-22',NULL,.2,'091000022',1); -# INSERT INTO `account` VALUES (3,'1111111111','CHECKING',10000,'2004-01-22',NULL,.2,'091000022',2),(4,'4444444444','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',2); +INSERT INTO `account` VALUES (2,'1111111111','CHECKING',0,'2004-01-22',NULL,.2,'091000022',1),(3,'4444444444','SAVINGS',25000,'2004-01-22',NULL,.85,'091000022',1); # INSERT INTO `account` VALUES (5,'2222222222','CHECKING',0,'2004-01-22',NULL,.2,'091000022',3); -- -- Dumping data for table `login` diff --git a/target/classes/runner/controllers/AccountController.class b/target/classes/runner/controllers/AccountController.class index baf0e9ee3a7087b5de803e4cda0b9248244e6579..9661df613d8b7c9e09a9d9b1c20e7705afe4c76a 100644 GIT binary patch delta 1456 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 delta 1552 zcmaKs`*TxO5XZmg=5cawZqpE(l$KUPi<#O6kb*&|RDqUPLjnz03-X9*sZ~j!Nd$aF z6w13T9Poh()Cc%NA#n=m3^V@XgJ1m7AN(u)$sZiWJvY}jLo-fh&hFjav*&a6?B?g- zwWi$Nf4;i|U@;0BYVo{=7x1DJdysS@g}o|juusDf(i|BFvMOG}ehnN4q;^nxUY6P` z4!kPmYtr(%Tyk=GL&G7wDYds8IPAa?88hs_QI2CA#~Iu=4)rmy&Jyx)oZvXgpvDFV zlJQJ-s9$X7i$t3eVyDHB@|#QRJdo($n;A?ciDjfPYB|T)sF-Uz%f<>fZ8I19~w>9kcO~j*q4G2|m?v1>>S#YnXjiT0X<)I=+z0m-vcqpyL|8 z*6|Iliyd0J?gqvge36tto=8yAOnN~!O@|ldsD@K)C(e2z<_`~T` zG&K_4ymNJQOQb{Gs~E5-(XK+DYmAAQyOnV<>|UP}u)-pr?iQ5WurS<)l_A{xEo?0l zux|+d1o!vgy&gv%>P=|Ztf z40g<+xD?$)AsH~)^>E9NsFb)Zc~ty|?s4T&ImMo%4IbJEx`s-K6$DvBfD+tSOlN{q zVl)#iGiWVfHE5$CD;XZga?)&!{4mkm4RjwlpP(!fJ&h-^!jLPmisCpUXNQ9{hE6OK zVXr^HdnJ323h$n(uwqnLGhjkgza=8>sg4&>T&Oatsr(M~_qhxK%Bk*lkO$G{0w zO>H9LeXs;*MtPv+1k^5pdhQ3BR+4fU(GrY}(=j$p!|;^H=pc+vi4p5Yj4n1+7Zam< z@?|!csYXu;#?$v>^opfbjX84~Ch$N+zR|o1RE4Zw>jiT?}?Z$1WzjyL6abRGj$a%Rfs=60}u8-(*$#>1(&qrvrG- kl!FxWs2tx0I%^S5(I35vH6+*CRpLH{2+1uZpR%j}0v-$a0{{R3 diff --git a/target/classes/runner/entities/Customer.class b/target/classes/runner/entities/Customer.class index 66450fe42de3dc898d3b0b791990385edb8cab27..7671f3f28d3637c2565e6d8f13cabd999ae3d8b3 100644 GIT binary patch literal 5335 zcmc(hTT>iG6vxlN-hhP!awX(KNP>i1R!!n1B$$OjLb3z|f|{7k6I;VRUZ5RekjZT>6sm7hhFqS%ZKfr?mm6`cP`y$|M>Iq??iN* zK5e8Hy4^s{^d>iNaq~7eceuIB%{$z@%gsG*-s9$dZazrT{UklmsLm*8v@y4!FX@@0 zZq8+LmO0m_QTs&Mbd8djHXLK7D6*z$xw>murlZkTDSj)nC~U`YTw&%#W~6{kU5bTs z!W6ddio&#BEDH#w9GAy)%j?SHq^adamXBpGPmO8RFl*S3dr2<|joL!Ildf$@;>MCu zC=`V!kt*sH;idvk8=D<4Y3~V zP%dwkGP6)8>|3Q`Wz1@_J$;&A*mM%ws3Gzdqr3v zkgg$|Ox9cKOVURW^hX-)tO$mQDzd!H$x$8cF;h%gX!yXq?&S3XqOwOJIOr|ESF4H zpy%@z?i3=kLGH?wU89(p6fPDUCXG2$cgr^Td#hJZt+6`mDeCLTMwJg`a7J}=8SBlK zy*RI%6QX1xGwbngXc~1WsK@Mrum^Zc;*?<;ZofwLJqM?8{RS-#?uMLENz5r74+398 zzCP2sZSdHijJfkhILU)h4f;OA0oOdQg`OMFV)^{|*I6;+UzTmK!)dVyoirGMw>%0*q1CN=%@#s6^d-#H^bC)^QKqPCuc zq0sxaDDHTRo7RA{AJf=6yjmMJS7`{ULmE0lQd`2Rd?8lW3}vICI?{}7;c*kzbE~BV ztE;0HtZ_97YR$F^ilW*?M7R4q5lKdBh1$tTacafE(YX}l{F0Nxvj53Yp$fr;E;7*w ziJ%sA06BWmDjB9xBlZTOJ9}zMGB)GL6htLbDD|=vVo>Re?O3bOlVWx3c>m$UwQa3< zHuQ!bj?S%@b5O{(1W$6C@Bcs_pLrxQxt>CnZ=AHsc3uq2GSpmo@s4u&P=HS&vnqwH0|QA-P|0Y?HX;5#;bBL z{@1Pkts9$J5P3IApR8^OmwP{3b}RmyRAtW&g+P!Is>Przx2@etd+|@S1vROO>ezZh zU@>aNs15xlj5iC~LR&EbzhJ74-5`6oNcQlE?BNvI!!N#?7W8}Y>%2-@p7vue+@)OW z!5Vz*ukFKVb>9&>ig5-y1U*Sl(bIyC;lFnshsWP=f?}Z!&(ldh)PcZJs;54OPOaU3 zTCyUzP;^FqXQk;;RRd71)-ZU5&e9OJp2V*mCnAN=p2z4IdJTQN_czjh!ABj9plw7? zfQiv*x`3~=Cqx%1hY>3n1urZ30g?&yovfhu&ury%Ky!P1g%Yg0 zUh3XWNqnDy?kqLX0D?M*@SO$N5L`1X&+GSe`sYErA9DWU=rUa=r#^J@7dtp6zt~T4 zx`c0!xf9nSi7h+K>=YaVH07IQP}KpVzXZK&3cR(#_XnQDyI4<({(VtR)dMt zD`4VO(dep@DHUa!Q8K-%W=chwX2CR9gNYxqfT>+FT~ji}qD%`)rt4~^Sd_^GlU0L> zFJHjK*GYp*Uq>5_T|<<~Rx;@{ql#TalxYb}H)}BQ10OJTNT$5fPmNKg+e)T_+E0y9 zraNG|TZ4&(Mjxs$`GR>=* z(ov?*!1Q?yCa>W7Oa~;BK?{m}N=BK!R5IP5qAH(~QKqlJ^mPp;uh9EU{Dx{&B2&Q> zk1~CuWU^>c#T1V+eG8`VYA|{KC444+(=~d7Y+r5o9Zy7=zE?1vfr2`6pv0xJU;D-} z6TIi4!tMPj_z`SB)nMa_q=hO{LRO?8`&WzY5{|klkG>`U%W$Dt#&{ooT_~P==^=F` V8c^;Y(i7+pp+AiNS@h3Q!(aH8J+c4* literal 5309 zcmc(hTXPge6vxjb*-MfokU)SCE+Ie+;j$>;g+OEz5(sQACLyS(ILvmEf!&!nGaC|7 zK~X^QL8^SvDj&4Uvh+=>Oj*T)AHWY~`9D3gli5ix`k>{*^!4=V-#Mqd&;0S{li!Kx z1byB_EwtQ78)$`#ce%LD#d}=5&&3B^+~MLb7awx*5f}GT^l^$l(WuTWXtXJRLtoOf zMctau=51@fU!#txvgMg2F>AW!^`gjGmhI`DX3YI4M0T`*Mcs;t z^THC2?uo*zUMvd;rCpEv^D9r4$4)aVi!9%eyF4?YQRAHHxZb#45*oEdc&9zbl*COX zvrs4sUm{)9E5gkM>^3nsXgc14M(zGmHVvj4dhr})u}h0<8>U{I7Dm}IJ+LK2NjHlc z9m*SaDLV&s!dWgAvp00(rfXYSJ@iQSBKotYxCJ$dCAKm}56~R;6=X&&cwh)Xu7LA) zXDwAqFPb1~lqYt&K=PLrO0c9N}W4j*75A zAU#vK*_=PspQ2A881yvSSrLp9Rb+XZ4@Y&hCoC~zqu>n<-8J+AqOwOJIOIl&i93&n#xAg@?(;X>;Dvy|M%TzUtZ2>#WZCiuwnzP~}4zoH5;6!F;Cz zaKb4FXOL%;r%lWB1~jVgJvfV-He_=gH|EXC8Jy8^_xZl@O_|jlll#G7gSTKt&vO`+ zp};-Z;7#8_k(b3cPQEn3%~gy9Hzd^P$GO@s{Y<>I8VnCc0JmvOcnfx6Qg`rR;N}8! z`M+a%T8tQT>EGG9awpfFh?@R+{6B2`cg{%63vU!jr>*y3B=kYrNx1&x=5^rg#|)N^ ztfhf1RT{!Xkb#bfRC`oaAjHZxK-pL%Wo*E*Xulcr`L!&9*|lB^<~VVLX=PglMUhxy zqT2(Wm?R^$LhW=c54B?B_*fcpL3T-FI%qOfBpGl{iw!hEB7F8cfgHbRl@q2>6V`^J zJ9}$NGB)GLBZ#D z1^y59@t#LwgHKb)@=eor*)hb3%s3k=FWynkl$_$%XUt(v!Yln5I!D79+DMx+w2iiB zXa^T3>G=!|(90P*NPQXV;IU5HnW0_W+ReoQ+OE;|c)Thb;}>r24{qZ64PkgGdbGA6 zn%RTXvRm;RQgwQEC+lu^VI!7s(nPku{tmYxpHl(}H>rzOJjJ8MGg3;V$J|FXrImU~V6JYwM2CQS`IW zA?O%AOV0^9j^FG$4o|S)BsD}9yhNvXQx^h9sh;{>I=z1R8Oe&^LeW{-&Pmgc#Z(Q} z)G&lqr|@-PGn^ijBj_DRt)Wiz{YKg^Xw=bpluf9K&OrG9T|g`23(+WDM2{6*!bYs% z2S_GScd>%LL#tHRcX*ZR`;M$qLtjV3Dl~T_Rw>E4>!t49ltMcP-GkIfLx|@&L~a;h zBk;<3x!-`VGuRK>gJ^S$1Iu(>eCnZ-TkP8g*-9od2rSz_$`oq0NlQSC~VS zzz-uTjV{wH$~aSfoaw5P=?ZpIFxAJIu7T<88cck=LMA>c8oj1uO2?TDCDZF_rgWTX z9!v{0nD`9~nK~rXRV7nHoav^L=?yhgL!8M5(_#%KzI-7QUnl&h(_1Lxv1^Poxk{#M zh=?L~jd7-1U|O!h#BY1Z)G3*CrJtJOOt+Ox*VTS%iZk5-)7=_OoM%F&U6RRAGBwAU z?kSlHYNqBm(*rO)tij~xyx`vLmP|s)l!-GvQZmh{nKE&vFTnJ;29uv_1EvF#X&x71 z{dr2onZ8sqnRG*So>Fn9ufX(m4JJRw2Tc5iYIKu|3Z_Jy=^G_ei7XXUBF^+Jn7*sQ zFz!~gZdEa!>C_C{USB~ E1tKjq%K!iX diff --git a/target/classes/runner/repositories/AccountRepo.class b/target/classes/runner/repositories/AccountRepo.class index 076181a9cab318f652040726b53bdb4af9be67db..eec041cc2b7199a26cf9e52e23edab5181abec37 100644 GIT binary patch delta 132 zcmeBUf5a|)>ff$?3=9k=46^JDQtS-U>e0s!x_>loHEH%uCnz%qvMvPc5=$ zWDrS7%}Fgu-Mo}BnURrgGADDSy)XkK0~^o)Rz?Oc1_lff$?3=9k=4ASfj66_3;>ey{>B*0$jCa`i#bwbQKJh+J0b@PTBUc9MoZzbYwTuQ*F-1sy;7g+H($}VuX->7?;7};8>x6-TfVO6K425VH~b9$Jq`AK z?e+sVKEw}o^CLHYjGws5acRqYbkR>gb#j2x1DE;qGkl~e{#?WT!i`_zS9nDEAWVjO*eLu6$jzOsV7{9 z7zvW##%M`&mDOq<7AJ929`U$EiPtSXB#E04UxFl4Bk^;Gl9C`jb)V{oO#%!inSR(M zD?xf2GN@02^mSvVB(L zVu$4BR4fm!3$8C}T@!3-3D&nRYi=s4zCI2%mbQ5c2L@56a61+llBXme%ajyIp^_m| zq)?0bh7475v)p1Q+;?<$uya+ zq(WvWsgx;{L&;2;rDV2L88SynwbUq?EAtGwP0!RSnNMuFU5X4@pyUp@Q^`VEWJqYR zo)0RilX@kKr9sJEdb9+aeX=ykDa(AaT*(S)G-RccCTUi(N>(dbBQ1usDp@P*l-w=r z1wFK$MQdA^H5OGYYvI&AvcZshm28wMC7a|vB_WM}zvlLUGze0b2hB9^pxhwUln3P@ zg@quehm|}cj~YV4TjVh%TV;y5$lE`mO|~iQ#4dBYcTo0HklEwZW4n*C$`i6f$xhjo zWJsHSGR^nB)xK)2YO|i-t>g7ISEl#%8nQ>pUY&-0vOnC=qupkIQVy6o$(i;Vc`7_6 zxzZ+2nw(;Mm3fPRmAly4h0r%o=4|Pmdz@!rqy84szOBvY4#~0D7WM9>r!&%1rAs$KsPlCO{=8XCjv2J`pzw;q75eTI=4eqT6WW-g>^8FzjI@4G(^wh9!~Qm5~U+1 z71ecink86V;s`h*C@F}bl-<5V@OEHyt^X6}Fy@Vdm^Ea%Ea{1{E6!uwR`$*3krzRJ zVPSNcHD7<@eBN1<=NHgve2J4-DJ3qBQ%a10E8w(8Frgh2ZI~A@0#0&>Jrx985sWMh z7;K#v;jOh7wB;mODJY>tU=g`kBx%f7HWOP$B^F@^_q>w{-^EgIiY7m>99&&B<>$Njg{U#BSnauwMIp6_-ty>>DJxqvKmRla~1qe;7& zEFE0Oi{lJjXJGgzMUY5+Z3XQZVnZc!nbwZUf)YobPRA5;Om3N_TCTP1AP>+Xs&*JT zq+3A3#SA~5__J};Ql}~kA6KU?u1=kGtZZCe5mP6J7lW=t2a!f{{R(cj7=tYpT}17R zml(ka#mh9hU^f@sa7*ePN6+BPox8nZvs3@eW+O;1acVUJ&UOs2p~RJ!Ul?$i8~Y9J zqQP-$@CtWvk{X;M^V8%UCfir3LF9kXK-Y?$82?!VT|fW72FF-;(K~r5dtH$QdCcv! zcDMx>c=PgoQDMV%Tiyk}8lpyjrM^sTT`rRg=ovx>6Z6{j+k_kMyi5vie0huh9A)L{ zdutwdX=k6@ftj`bS?4gjf>f$z6m$>s7T@e|BMFzRDF6O44!NyEa*~)y2AzLzUxS9cO&-x%C%S400%YeXL!15(&ZC9rJ>P z8U5^uBBArnj3V(XErwK19F64Vbyxik498J8?8j-aTPjCi3MF0eyw<6KbLd>i^}BA9y~^TKdxs?r5Il_%yLZ8n^@KK%3-R6Cz9(Cs<)ZipO_ oqw*{Q_$HtASHZVP?%VhdzH5yFf5e~gXFZfONtcY+sF!5?3-(QCa{vGU delta 3909 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 OvV^4^l35MskpBXtI(w-A diff --git a/target/classes/runner/services/CustomerServices.class b/target/classes/runner/services/CustomerServices.class index 426b0612dcfe17bd01362c76bff86da691eb63f5..7196e8a1b7d3dbdae538eb4ab2a52f3a089c0ed2 100644 GIT binary patch delta 3862 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 delta 2733 zcmb7Fd3;pW75>gllK1A#4H<)(kU$_IV1x((Sp+O4K|-`HAOQ?v2}ukgF(e@g5r{A> z5TW#;Yklq z;WHkd#%I;~oNoEN4$tWDg)qK|XT$gszU<*E_^N}ic^HYW>&b6;_$E&4@GS@5_An}j zQ!bvPf#-Gjjt<||oiBv(J-q1PB^TdU^9Nx}!n2vA`ih4BX(j}(cz6x3>-6Ui&batR zCIWa<=WproYbE@)i{I$^-@5pn=Jk6Qf6)0KHKjj=V>JKl;x8`#s*b;9B8Y#w_?M!c zRWj!^o3k$7aq+H;f4c%#glS4ZhoCDduB5t>=8EHrtGKc1*~#y`htljc77hhZ;u;jZBbNdDqDMj9eqv8o7=Uu^zRK zTyNwCJv_?3o;J#E2u}{B%xE)%cPMKxbj@adP>0}EhZ;Tk1)h)L=ven2o*>0pqZZon&cG{c_n`=|N< za;_~9gc}>WR&+LWwAOBF5JWEERCaYVwKm!}b6O*J8#yBP8a#|g3?9IPwmo;2^x21V z-;#cNWb}2hYQ7pk3UXC&v;um&?9DpbY5dmvKC0q>e3adP`O-P3b~!flR0+SrZ|dYH zA&>iEZsDjwflRb;G|2LIU=vz76||w94cu(o$2=O-%~KKPIG$r6axj7OiI|TfRIY0g*%i7 z`zwWqo9)TG9-l~*2Y}fmG6!?{w+QpF8dv&&lNkX_Ii7@CJ-CfQ=9173>|~tP$UqFc zNNhKEn&jFZt|^%?0`IWzus5Yt&J*dOUvNA2#fh94Ti&7-84HJFDUXyPiiNzlt5}mo ztjS_r&aAbpS^@qfBniz#FZMH7l&7@4n+?&WP2`TRoxMn*z7 z$I!=k&30cw%x9jKW~Kerv{zfj11@zUWmd8!;+pRjw!cWhM2#5wFBhn?gQBZpn&u$vtA{NEh3OPKHl z9tL>7 zpDG`Fzrsr=R1T}~Q36^XJH~AL*q8lmkpUkp-V6(qU`j?c8O3Ej#IR;49o7tbr61yd z03VKc`f?`fTfyq;^<+*SLTu#_ZW_^l0#3>!NC}>zI|!|K{Ee&g@wMCay?cl%K;r2M zL`su={!j!2;QO2an9r|1TcKhiR1IO3h7Al0JI@cRB8_pE|JHB^t$33s3f2>epf>`z z_(<|ap5RlVhBK>&u=**i8AL!IW*HX!V&?ZzAMs1$l$USmQj`A)3A?L-a d-XAgNALA!@Ibr<_ulm*-_$7Xou>OvJ{0Ctg)QbQB diff --git a/target/test-classes/runner/controllers/AccountControllerTest.class b/target/test-classes/runner/controllers/AccountControllerTest.class index a8773133e80ad59e931876f039215229bb7ca74b..bffcf71cb0a013202ad550958ee41853148a002e 100644 GIT binary patch delta 1785 zcmb7F32>7|6#ibCb~k?(3N1ZCTP`cb#wM1wBH&;d#u*iADOC}HN}9GIZAoYns;C$b zu-+hly-^fTyrEbD1@YD*V!dxg#S_K*w)pmMusY6wWG1`czW2TFy?rk`*)_gxY`m*y z<7NP*RBB)x+6AsOU_-kD({Po*)e_gFl;<;nKL)PFbt&aD_MWcC3IoZwL33{uSZN@& zH}EDWZpJEsTMXQa+azvx;11j=vD!d7?$Y$TlY2!Fw@KWi-S)=xg1KDobaSG^Wk(P8m^BU$1A@8CF=Q5zO~H>k!oa@5j`2n3R@cV_B`HkD$%5>P zk|~8Sz~VIfLIH1eOm|3-P$bDA$WY`YC8(dG{-hMDae`?WBaTW{G=K&QN>h|hg9K$L z%A_no*@|2=SWu3lT*@O*zMvtBhSD%a!)b(~gD9WiGN(FSUVXta-xG`YLQ$VT77T}?iVmSd!f=imJhHBSemENB*7oS^ZbgSuksyyEFCC_+m_{oq zp+d95nb&c&bA{}v8nlPv)A*GElD}L&2q!X1;r%4*L2xVnVe5Tq+h+@;^Y}yv zacmNTW@=V9HJUrJCRJ)yA@hMP3DzP^LKyRzy#(XY!pMe|7>)>{92;Y%oqY@bzGJJU zd|E;|n%%<6JF^R_v~s3Z&zyv^?qV`J`tW;}o28LRe}u_DhMJCHltu-F>L5^M5f`M>7^9!c9w lP!t#9B8~mH7?&`(l#PB|hRZo%DW8|kL{b!2M6o;y^Dp79R9651 delta 2064 zcmb7FX?Rmr5IvJ7y*ICyLR*_I5d=gER2sSgT_}b6M?@;3ARtJZhT765kfaqC3<`+5 z*ymO^+yPghSX>T~QR=_Z1Zt#eEl@`x0!`?*qyA<=we6=bo84b6>K&WOrF~>)wr< z0TfY{fl{;yTx-CFHYcXyI)UpYZb+;g!~p&nxDhK8E2r<<-GrMBIB<)`-YRgLf!?u$ zwt*h+;c-7m3U9$eci$b zI`W~!N7}#Bz{mJR;!}gEc4^ON5})hM7f$TPmj=GV9{u=Q$G(yHR^mH>?+KzQ=xd)x zlt4e2P4-s$vDLA}ky7h#^tVSG3vCJW&}i-vBNFS;KyaIDY;Lns4$1sU;b;6J@T{a-aK*$I+2Lk?(#~+B)N9z4y&p4ki*c^xmBIY0)!I583 zSX3-1L6MytT#~oOSL>f!$E=j7FdL^ZrnsoEAYYNN0CjWywZ0m!!WQ&9r>mlu!c3ejC|OZ&>O<($;BE1G z8ohx!&y+~0K2RqpMNulH2|7ekI=KX8D9R+4!Ze&@?sN_uo24k5+=32O)R+1RI!sZ2 z8X#z(qQhyBpd%CwrW}@l?IDVW(lAB2bflu;lt;)iw;NgJY$JK7hejyMrvgIqpu9-P z8wh)Sk@{dDtf-KR1QlzUMiTn-iR?5znTTJ}C~_+rO(lc@+CR9~KR+0*k0@@JYbsS# zM&*LWD5{{biYjTGqVZJHzRl>8DZN7ereKRdJ_tgNNonb3FxgRM2{1kwZ1j5rWrUP& zRpL&9YsieD6aV99aAK^q_N8fLi%#YD7?AvBx%d|7_cf8%8P+Su()aMqvV1&dYvqwz zD_@Nn9zk$HcaEl=+tBE zn@~DEAvJwUCnk2Fyc1(OP|=044CpQ*)tXI+dyR0f&80k&mL3(A|Boimi_5n%tKaZr zxem^r)uWC{J?f}lkK;NpnGty%INn_A9>v2Pn4MePt-*r-k#TvCjNIM7GoEmuj1Kp~ zW;}oY8BaV=#$E2*$iehz!v#EQ8!oi2YYG1)U&OcN;+dc@F2SYR_Te(DVB>Oj`p^oK U4_v|fD`z4hjH|-9I*e=n0&-f5s{jB1 diff --git a/target/test-classes/runner/controllers/CustomerControllerTest.class b/target/test-classes/runner/controllers/CustomerControllerTest.class index eb791bb69479c51c25b5137a07df01497d32d2bf..3d2d77074c7a2ad0ce8af881caca43bb38e04385 100644 GIT binary patch literal 9232 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 literal 8954 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 OQoccV8FaTn_xul7bq31- diff --git a/target/test-classes/runner/services/AccountServiceTest.class b/target/test-classes/runner/services/AccountServiceTest.class index c419c932c39a69fa790d56bf6583ea8cda4919a1..40c518141ee365d5c0a11a570006fac087b27885 100644 GIT binary patch delta 2501 zcmcImd0bRg6#mW(%$s?0AyhU)Ma`5DWLH3CtIT3?!E(V=L>=~w( z<%*hC3XY(;m1Wt!YMW(yre&LLYMt{22BTm7Rq&g0&ppdM=R4nhZ>A=5aX;6gb369{ zNTgvpB2lYhgN}{ZWXGcpY{nK_#z^+^pN_}yxE)Vu*sAlUR)+=K92kK*UrzumcGOGG zc01hS*kMP59gU*y)UZoO2x?{Xq!YWbN5ft__Ss$7FSe(2gyCt?4rqABj%V#SsG|#> z6Vvk=4(aHQ7i9CI9WQBkS<1g6;#D1KcumCXBHoa|H>KIPYb4z7XG+(&JY;j^k@Va6-pPd?Rt+ zN`X`2_)cc{y=;Gwj30IUgwx{qS%QBN$FENOhTkRajEK;)a{f7q`GW;Cp*NrhE~G1Du{CdUjctSHSdu2h(a5{>*7T|fbZAS2xxWXy2{`c2053RTobVG^!0 z);J=aRn%7D29yxOj78QkUEJ*y$}z<_>qtlrq##AX6rw1U+AF${!W4C&j*2=_xT4O~ zMNwA@*XSZe-RNRT?yfMElS}n**ECE~r~tP!5~DQgp(uhbAq1HHPA)7jiOH{=R#wiP zMk?w_Q5r=n>P0ac#VU%U7=^JIrzoC6G)hpENKuNCsJBLa6eUxNqEzausGoG#U$is| zP?Sy?3fE$cMroOfvglGpm(k^l2GA9X2GW%pU8N{nB6B1sm-3|6AVq^|h@zn)@+pMS z)fi{#R9EdxvDIa^J#2A};Hv}p^M}EJP{5jv*U{!B=7N8-ar5Wd3e7mC*j$-Tb7ca} zmHFb>Qr0afW6AWGb|%bR%UzgaDooX10(sV^oo8*XJZ`UlIvlL?Rb)Any)nEJufCBx zKwDX{pqizi06%#*vQ(Y`+=N-YBizi%7D=uP4n9a!Z5$0L>fsHfhNi&gVazs@T%IJO zG&IL01%e^(paPbo`JFKau{@Ym6q*G)!^*zCP3QQcH*PTz#=?nPS+ih{d4h$r#aG5n zd3HSaZx4yMooSIe z4&1?7>pJtejukVFtgyH)*-?@8Xy-O0 z0uOZd&S1ZV*S_b0bax0JotM+nroTzTd~R<66TZ-FBiNJG)I}=Skc!l*qLVFi`LnPH zi+H)WY2tAm<0#vx?-UU@RA!XHwf!2AX~FR3E?l`DbE?4C2?6Vt@BdwB| z--uyWGc}915lqX~c|u3DhmsZ?kvt>7fE`QVhx-{%4Uc;%U*!jQ*voj#E3h38VINiw z_RQKG_5LQ1{4I;cxQ}u8q29b(77kbD-TLQI8(z#kwWj;@KO(>8-;l3n_l{@=t7WnR$y%f)>UBrpDgys8~^|S delta 3073 zcmcIm33Qaz75?r_GXI}HZ)j-DBuxShlyxA6Kv)tGLTV8-ge6GWbx0;*$%2^)R;nG_ zs%W)U{0rKuZPhLo7u4X8fCyMBYFBG(wfo-MP3^7~+wcC9WI{Ococ5f~Idk7~?|bk2 z?)~1I*)wn7!o;(09ex5pg=}#U#sLctJ9q?-+UU;0K|B_yUP~`O4w5)zqsKz8!@&Uu zJ{-=%1{}#u1;A(Hab0uN#uMr|X5+Yx6WV>!!j~Q7U@7VaRg%|Yr@2Ppw!F;@==KE@Xpn*SB zus;eMdo_hj!+z}GC-|v4f2OZ5UkZP;!}k&$8xE;HCAqYc{8;m*$r+q>l5261e6cVv}t zP-4)Dn0tHHjKmljYvesL&d7L~U}U09GBR1hMyAMABc*b#kusTT$uuM7GF`WwVbFz` zpz!?Yj*i&Ycu8|-M_bAGSjn2c&-j?ZPS9MA_Zw`)CQB-e%#>MzoOH75QxmRxLPwKN!6BWsPUll7)lHpoUxHW|4@H@H+c zh{$Gz&}gJdqDGq4w8%KYShqZ9boXheGGG;@1msT3%wx%eXUIh`(S0r_Z%LYKT3D$n z4py7MY)Z`D)3L5yiSlEiN#obPqN(=BVY0*Ht@~>Blu-XA-IIS0NYF1Lg}3~ z#|#ddi+XWXpVv}pUQ2CxEv3ZRR`z{pqos1Zd1}dPI}?a`9jfSzKx)C8XT`miMIZ2A zfo%49L1?d}w~Vc@%?uxcJi?9-SJ5g9@X7fgtw{wSfvY(Ze29yEy0|+#@07?@?(?C> zi35Ss(-+vEj1PN@K9XAGZp^Rciv9UT4Z5NPe%iTxD>5+)*LYl}5#_b)`EVWmA+{-B z8;?)<+BnyL!fx+`>-$b9F1RqE6hd4BL}{D(9B<*eZJ5J7)8|$WoLhk#m~`Dc3m;`~ z=-xN>Q^vjYDdrX7g9s+ExR&j_9-Ma^^LufT4?U<3AG8td#X=t%+_K`lL|>nQHB*wP zT{<<1r9G%iC%cg825VyTlyOXKH8Cz>vX?W}X|yZ)(AxCfgpU#J60Z0-Zaxd`EoY#e z+z&T*IJn3igto6g1nr`sXs_kj*AeY*qP>AgZY0{9{wK71h}N%ik}0f}d$J%b%iLEA ziVBwz!*VaR6Flon*(6rD<%I=_Al;<2vaZxWJ&6jYwxS31r5QS4ioJn)RxxgNFD};F zEb`nsQ`tY0CU!1G2i!ssd-$VzE7k9!274);+X(NIr1>fA!yUK}cj7P-cX@2X$l#(Q z14>GAp(;uLinyMVuEYXr`4i;0mysFt?Hi)p+xj!W=Q)Gb&w;@OHsh9J=wVK=|GHF|h>Uy4xR;C%lkpKUew>VtlJPN8I6=lw4#T+izh`{sfbjHJNu^St zwMk;V8yOYyUeT1QP7&AB{1^PpAXOC%WIG3UdGFDuxdHzZzKL85pQ#?IGW|)>m)eKV ydiHMb7R;pL@1f`3^^h1ohtF%j5nsR;Q6#vJvyIfie$L*%9{v~}h~dE)9{LZU16oo5 diff --git a/target/test-classes/runner/services/CustomerServiceTest.class b/target/test-classes/runner/services/CustomerServiceTest.class index 8ec2e7af5ce7e3579eddbdcb33732dacc212e9c5..8e0d5a0d442a06cf6ef7f28d4ebe9646e132944e 100644 GIT binary patch delta 2910 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 f^_FgI$K#?sAyzkbV5jI$7QyMqQ-197