diff --git a/src/main/java/com/example/clientproject/data/shops/Shops.java b/src/main/java/com/example/clientproject/data/shops/Shops.java index d889b4b75a3c89a9a6da99dd4fc6f722ce40591c..76ddf689601a853fbbfd790110ef5f239014e919 100644 --- a/src/main/java/com/example/clientproject/data/shops/Shops.java +++ b/src/main/java/com/example/clientproject/data/shops/Shops.java @@ -25,7 +25,7 @@ import java.util.List; public class Shops { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) - private int shopId; + private long shopId; private String shopName; private String shopDescription; private String shopWebsite; diff --git a/src/main/java/com/example/clientproject/services/BusinessRegisterSaver.java b/src/main/java/com/example/clientproject/services/BusinessRegisterSaver.java index 92425905ef6b944fc11c89f91ec43eec5eb11e1c..eeabfb9dca9d47edba040fc5a48880143f63cd34 100644 --- a/src/main/java/com/example/clientproject/services/BusinessRegisterSaver.java +++ b/src/main/java/com/example/clientproject/services/BusinessRegisterSaver.java @@ -35,7 +35,10 @@ public class BusinessRegisterSaver { @Autowired JdbcTemplate jdbc; - public void save(BusinessRegisterDTO business){ + @Autowired + LinkUserShop linkShop; + + public void save(BusinessRegisterDTO business, long userId){ StampBoards stampBoard = stampBoards.findById(1L).get(); Categories categories = categoriesRepo.findById(1L).get(); @@ -69,11 +72,14 @@ public class BusinessRegisterSaver { jdbc.execute(query); } + + linkShop.linkUserShop(shop.getShopId(), userId); + //System.out.println(shop.getShopId()); //System.out.println(tagsRepo.findAll()); - System.out.println(shopsRepo.findByShopName(business.getBusiness_register_name()).get().getShopName()); + //System.out.println(shopsRepo.findByShopName(business.getBusiness_register_name()).get().getShopName()); } } diff --git a/src/main/java/com/example/clientproject/services/LinkUserShop.java b/src/main/java/com/example/clientproject/services/LinkUserShop.java new file mode 100644 index 0000000000000000000000000000000000000000..8d979d519593f61479f0fed3b7629f7822959000 --- /dev/null +++ b/src/main/java/com/example/clientproject/services/LinkUserShop.java @@ -0,0 +1,45 @@ +package com.example.clientproject.services; + +import com.example.clientproject.data.adminTypes.AdminTypes; +import com.example.clientproject.data.adminTypes.AdminTypesRepo; +import com.example.clientproject.data.shops.Shops; +import com.example.clientproject.data.shops.ShopsRepo; +import com.example.clientproject.data.userPermissions.UserPermissions; +import com.example.clientproject.data.userPermissions.UserPermissionsRepo; +import com.example.clientproject.data.users.Users; +import com.example.clientproject.data.users.UsersRepo; +import org.springframework.stereotype.Service; + +@Service +public class LinkUserShop { + + UsersRepo userRepo; + ShopsRepo shopsRepo; + AdminTypesRepo adminTypesRepo; + UserPermissionsRepo userPermissionsRepo; + + public LinkUserShop(UsersRepo aUsersRepo, + ShopsRepo aShopsRepo, + AdminTypesRepo anAdminTypesRepo, + UserPermissionsRepo aUserPermissionsRepo){ + userRepo = aUsersRepo; + shopsRepo = aShopsRepo; + adminTypesRepo = anAdminTypesRepo; + userPermissionsRepo = aUserPermissionsRepo; + } + + public void linkUserShop(long shopId, long userID){ + try { + Users user = userRepo.findById(userID).get(); + Shops shop = shopsRepo.getById(shopId); + AdminTypes adminType = adminTypesRepo.getById(2L); + + UserPermissions link = new UserPermissions(user, shop, adminType); + + userPermissionsRepo.save(link); + }catch(Exception e){ + e.printStackTrace(); + } + + } +} diff --git a/src/main/java/com/example/clientproject/services/UserFavouriteDTO.java b/src/main/java/com/example/clientproject/services/UserFavouriteDTO.java index b0d1655cbdc8ef42a86dab9223caf3b8dddaa3c7..eea910f8c4b97ae7d83335066948b7398f794e5c 100644 --- a/src/main/java/com/example/clientproject/services/UserFavouriteDTO.java +++ b/src/main/java/com/example/clientproject/services/UserFavouriteDTO.java @@ -10,9 +10,9 @@ public class UserFavouriteDTO { long userId; long shopId; - public UserFavouriteDTO(UserFavouriteForm urf){ + public UserFavouriteDTO(UserFavouriteForm urf, long userId){ this( - urf.getUserId(), + userId, urf.getShopId() ); } diff --git a/src/main/java/com/example/clientproject/services/registerUserServiceStatic.java b/src/main/java/com/example/clientproject/services/registerUserServiceStatic.java index 562926def43b62dbc3da197712cb53ddf9b22a38..8576df51398437f55bab996298703239a90ae378 100644 --- a/src/main/java/com/example/clientproject/services/registerUserServiceStatic.java +++ b/src/main/java/com/example/clientproject/services/registerUserServiceStatic.java @@ -31,7 +31,7 @@ public class registerUserServiceStatic implements registerUserService{ LocalDateTime.now().format(formatter), twoFactorMethods); usersRepo.save(newUser); - System.out.println(usersRepo.findById(newUser.getUserId())); + //System.out.println(usersRepo.findById(newUser.getUserId())); } } diff --git a/src/main/java/com/example/clientproject/web/controllers/BusinessDetails.java b/src/main/java/com/example/clientproject/web/controllers/BusinessDetails.java new file mode 100644 index 0000000000000000000000000000000000000000..fcaa7cd93cf73c85c0f43123a7dbfa758bd41871 --- /dev/null +++ b/src/main/java/com/example/clientproject/web/controllers/BusinessDetails.java @@ -0,0 +1,42 @@ +package com.example.clientproject.web.controllers; + +import com.example.clientproject.data.shops.Shops; +import com.example.clientproject.data.shops.ShopsRepo; +import com.example.clientproject.data.stampBoards.StampBoards; +import com.example.clientproject.data.stampBoards.StampBoardsRepo; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@Controller +public class BusinessDetails { + + private ShopsRepo shopsRepo; + + private StampBoardsRepo stampRepo; + + public BusinessDetails(ShopsRepo aShopRepo, StampBoardsRepo aStampBoard){ + shopsRepo = aShopRepo; + stampRepo = aStampBoard; + } + + @GetMapping("/businessDetails") + public String getBusiness(@RequestParam(value = "shopId") int shopId, Model model){ + StampBoards stampBoard; + Shops shop; + try { + shop = shopsRepo.getById(Long.valueOf(shopId)); + //stampBoard = stampRepo.findById(Long.valueOf(shopId)).get(); + + }catch(Exception e){ + e.printStackTrace(); + return "redirect:/"; + } + //model.addAttribute("stampBoard", stampBoard); + model.addAttribute("shop", shop); + return "shopDetails.html"; + } +} diff --git a/src/main/java/com/example/clientproject/web/controllers/HomeController.java b/src/main/java/com/example/clientproject/web/controllers/HomeController.java index a33bcda2c24cf2877d527436ce2481bbee463664..85c839dc6a0d0c688118c0a16f1f45a9d3a06c5d 100644 --- a/src/main/java/com/example/clientproject/web/controllers/HomeController.java +++ b/src/main/java/com/example/clientproject/web/controllers/HomeController.java @@ -2,6 +2,7 @@ package com.example.clientproject.web.controllers; import com.example.clientproject.data.shops.Shops; import com.example.clientproject.data.shops.ShopsRepo; +import com.example.clientproject.service.Utils.JWTUtils; import com.example.clientproject.service.searches.UsersSearch; import com.example.clientproject.services.BusinessRegisterSaver; import com.example.clientproject.services.UserFavouriteDTO; @@ -12,6 +13,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.List; @@ -30,8 +32,7 @@ public class HomeController { } @GetMapping({"/", "dashboard"}) - public String index(Model model) throws Exception{ - loggedIn=true; + public String index(Model model, HttpSession session) throws Exception{ if (!loggedIn) { model.addAttribute("loggedIn", loggedIn); return "redirect:/login"; @@ -43,8 +44,8 @@ public class HomeController { List<Shops> normalShops = new ArrayList(); for(Shops s : allShops){ - UserFavouriteForm uff = new UserFavouriteForm(2,s.getShopId()); - if(toggleFavourite.alreadyInDb(new UserFavouriteDTO(uff))){ + UserFavouriteForm uff = new UserFavouriteForm(s.getShopId()); + if(toggleFavourite.alreadyInDb(new UserFavouriteDTO(uff, JWTUtils.getLoggedInUserId(session).get()))){ favouriteShops.add(s); }else{ normalShops.add(s); diff --git a/src/main/java/com/example/clientproject/web/controllers/Redirect.java b/src/main/java/com/example/clientproject/web/controllers/Redirect.java index d7366847ad971f0d4ea456a3f2f6882ace8130b0..56f02faaf20072cd2f9246d4872208360d7f9623 100644 --- a/src/main/java/com/example/clientproject/web/controllers/Redirect.java +++ b/src/main/java/com/example/clientproject/web/controllers/Redirect.java @@ -7,11 +7,19 @@ import org.springframework.web.bind.annotation.RequestParam; @Controller public class Redirect { + /** + * Redirects user to new url, workaround for models not loading properly on redirect to same + * controller. + * @param url, the page to redirect to (e.g. /businessRegister), submitted like: + * /redirect?url=<page> + * @return Redirection. + */ @GetMapping("/redirect") public String redirect(@RequestParam(name="url") String url){ try{ return "redirect:/"+url; }catch(Exception e){ + e.printStackTrace(); return "redirect:/"; } } diff --git a/src/main/java/com/example/clientproject/web/controllers/SignInController.java b/src/main/java/com/example/clientproject/web/controllers/SignInController.java index 184369920f211f3e1dfdcb55af77ba4d836dd91d..a89d175344106998a11827834642242eeda76e7c 100644 --- a/src/main/java/com/example/clientproject/web/controllers/SignInController.java +++ b/src/main/java/com/example/clientproject/web/controllers/SignInController.java @@ -40,12 +40,12 @@ public class SignInController { } @PostMapping("/businessRegister") - public String submitBusinessInfo(@Valid BusinessRegisterForm brf, BindingResult bindingResult){ + public String submitBusinessInfo(@Valid BusinessRegisterForm brf, BindingResult bindingResult, HttpSession session){ if (bindingResult.hasErrors()) { System.out.println(bindingResult.getAllErrors()); return "registerbusiness.html"; } - saveBusiness.save(new BusinessRegisterDTO(brf)); + saveBusiness.save(new BusinessRegisterDTO(brf), JWTUtils.getLoggedInUserId(session).get()); return "redirect:/redirect?url=businessRegister"; } @@ -86,7 +86,8 @@ public class SignInController { @PostMapping("login") public String signInChecks(@Valid LoginForm loginForm, BindingResult bindingResult, - Model model) { + Model model, + HttpSession session) { if (bindingResult.hasErrors()) { model.addAttribute("loggedIn", loggedIn); @@ -106,6 +107,9 @@ public class SignInController { // If they match, set the loggedIn flag to true if (passwordMatch) { + JWTUtils.makeUserJWT( + (int) usersDTOOptional.get().getUserId(), + session); loggedIn = true; // Otherwise, throw an exception with the correct error message } else { diff --git a/src/main/java/com/example/clientproject/web/controllers/selectCategories/selectCategoriesControllers.java b/src/main/java/com/example/clientproject/web/controllers/selectCategories/selectCategoriesControllers.java index b41af0d8d831e3264713d5fb602c44b5f7e4cddd..c99d537009b12870fdfdb8a35f764fc8f105a0df 100644 --- a/src/main/java/com/example/clientproject/web/controllers/selectCategories/selectCategoriesControllers.java +++ b/src/main/java/com/example/clientproject/web/controllers/selectCategories/selectCategoriesControllers.java @@ -30,10 +30,6 @@ public class selectCategoriesControllers { public String selectCategories(Model model){ List<Tags> allTags = getTagService.findAll(); model.addAttribute("allTags", allTags); - for (Tags allTag : allTags) { - System.out.println(allTag); - } - System.out.println("Test"); return("selectCategories"); } } diff --git a/src/main/java/com/example/clientproject/web/forms/BusinessRegisterForm.java b/src/main/java/com/example/clientproject/web/forms/BusinessRegisterForm.java index ee146c69de7e8d7ab0667a5f3334d42e3fac15ed..3af45edcc4271134c012dd93cf796db63bb3ec98 100644 --- a/src/main/java/com/example/clientproject/web/forms/BusinessRegisterForm.java +++ b/src/main/java/com/example/clientproject/web/forms/BusinessRegisterForm.java @@ -38,7 +38,6 @@ public class BusinessRegisterForm { int earnings; public void setBusinessTags(String tempTags){ - System.out.println(tempTags); this.businessTags = new ArrayList(Arrays.asList(tempTags.split(","))); } } diff --git a/src/main/java/com/example/clientproject/web/forms/UserFavouriteForm.java b/src/main/java/com/example/clientproject/web/forms/UserFavouriteForm.java index cf8c4f0492febca00feb6bde4b38df087843c990..023a37b879a1a7eeb370f570e06b25e61fd93e31 100644 --- a/src/main/java/com/example/clientproject/web/forms/UserFavouriteForm.java +++ b/src/main/java/com/example/clientproject/web/forms/UserFavouriteForm.java @@ -8,7 +8,6 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class UserFavouriteForm { - long userId; long shopId; diff --git a/src/main/java/com/example/clientproject/web/restControllers/BusinessFavouriter.java b/src/main/java/com/example/clientproject/web/restControllers/BusinessFavouriter.java index 2cb6588b4f0fa9c16ca66de4c687ec71ddb0aaa6..f6d47188298b8de4cb7169ff8d689b9a68657efa 100644 --- a/src/main/java/com/example/clientproject/web/restControllers/BusinessFavouriter.java +++ b/src/main/java/com/example/clientproject/web/restControllers/BusinessFavouriter.java @@ -1,11 +1,14 @@ package com.example.clientproject.web.restControllers; +import com.example.clientproject.service.Utils.JWTUtils; import com.example.clientproject.service.searches.UsersSearch; import com.example.clientproject.services.*; import com.example.clientproject.web.forms.UserFavouriteForm; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpSession; + @RestController public class BusinessFavouriter { @@ -26,8 +29,8 @@ public class BusinessFavouriter { * @return ERROR or OK depending on whether it any errors are thrown. */ @PostMapping("/favouriteBusiness") - public String favouriteBusiness(UserFavouriteForm uff){ - UserFavouriteDTO ufDTO = new UserFavouriteDTO(uff); + public String favouriteBusiness(UserFavouriteForm uff, HttpSession session){ + UserFavouriteDTO ufDTO = new UserFavouriteDTO(uff, JWTUtils.getLoggedInUserId(session).get()); try{ if(toggleFavourite.alreadyInDb(ufDTO)){ deleteFavourite.delete(ufDTO); diff --git a/src/main/resources/database/Data Script/tablePopulator.py b/src/main/resources/database/Data Script/tablePopulator.py index cf0e1834e7e17dbc57e468de08737fec4094e796..c210aed595d44fb8d1d7d5a3a0360598c2c3df36 100644 --- a/src/main/resources/database/Data Script/tablePopulator.py +++ b/src/main/resources/database/Data Script/tablePopulator.py @@ -57,6 +57,8 @@ def namePopulator(amount, userType): salt = "EXAMPLESALT" stdPassword = hashlib.sha256(salt.encode() + b'password123').hexdigest() + stdPassword = "$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK" + profilePic = "testImage.png" insertArray = [] @@ -113,8 +115,8 @@ def companyPopulator(amount): countryi = random.randint(0, len(countries)-1) - stringInsert = '"' + companyNames[i] + '","' + "" + '","' + websiteArray[i] + '","' + str(earnings) + '","' + countries[countryi] + '","' + "shopPic.png" + '",' + str(random.randint(0, 1)) - insertArray.append(createInsert(stringInsert, "Shops", "Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Active")) + stringInsert = '"' + companyNames[i] + '","' + "" + '","' + websiteArray[i] + '","' + str(earnings) + '","' + countries[countryi] + '","' + "shopPic.png" + '",' + str(random.randint(0, 1)) + ',' + str(1) + insertArray.append(createInsert(stringInsert, "Shops", "Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Active, Stamp_Board_Id")) return insertArray diff --git a/src/main/resources/static/js/favouriteBusiness.js b/src/main/resources/static/js/favouriteBusiness.js index faca4ac6608c65d5cbc6776c5c13d78452723cb6..05c21a0b531471b210ae85669fd92871d04535cb 100644 --- a/src/main/resources/static/js/favouriteBusiness.js +++ b/src/main/resources/static/js/favouriteBusiness.js @@ -7,7 +7,7 @@ function favouriteBusiness(e,shopId){ } var xhttp = new XMLHttpRequest(); - let params= 'userId=' + "2" + "&shopId=" + shopId + let params= "shopId=" + shopId xhttp.open("POST", '/favouriteBusiness', true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.onload = function() { @@ -23,4 +23,8 @@ function favouriteBusiness(e,shopId){ xhttp.send(params); +} + +function redirect(shopId){ + location.href = "businessDetails?shopId="+shopId; } \ No newline at end of file diff --git a/src/main/resources/templates/fragments/business_card.html b/src/main/resources/templates/fragments/business_card.html index 25a1cfa0e2d2a8e5d91d2562a9053c529733ee8a..c3cd23d9155b9a8b72570a727f514c6a41c8d7a0 100644 --- a/src/main/resources/templates/fragments/business_card.html +++ b/src/main/resources/templates/fragments/business_card.html @@ -27,7 +27,7 @@ <p th:text="${reward_amount}"></p> </div> <div class="level-right"> - <button class="button is-rounded gradient"> + <button class="button is-rounded gradient" th:onclick="'redirect('+ ${shopId} + ')'"> View Shop <span class="icon is-small is-left ml-1"> <i class="fas fa-arrow-right"></i> diff --git a/src/main/resources/templates/shopDetails.html b/src/main/resources/templates/shopDetails.html new file mode 100644 index 0000000000000000000000000000000000000000..a8af92deae80b2147d4255d85bbd19d7877982ab --- /dev/null +++ b/src/main/resources/templates/shopDetails.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <title>ShopHub | Dashboard</title> + <link th:replace="fragments/libs.html :: bulma"/> + <link th:replace="fragments/libs.html :: fa"/> + <link th:replace="fragments/nav.html :: nav-css"/> +</head> +<body> + <div th:replace="fragments/nav.html :: nav"></div> + + <div> + <h1 th:text="${shop.shopName}"></h1> + <p th:text="${shop.shopDescription}"></p> + <p th:text="${shop.shopWebsite}"></p> + <p th:text="${shop.shopEarnings}"></p> + <p th:text="${shop.shopCountries}"></p> + <img th:src="${shop.shopImage}" alt=""> + </div> + +</body> +</html> \ No newline at end of file