diff --git a/src/main/java/com/example/clientproject/data/events/Events.java b/src/main/java/com/example/clientproject/data/events/Events.java new file mode 100644 index 0000000000000000000000000000000000000000..7dc57c980837ba6c566c30467b425dc4551099f5 --- /dev/null +++ b/src/main/java/com/example/clientproject/data/events/Events.java @@ -0,0 +1,23 @@ +package com.example.clientproject.data.events; + +import com.example.clientproject.data.logs.Logs; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.Set; + +/** + * Entity object for events which trigger a log + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Entity +public class Events { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long eventId; + private String eventName; +} diff --git a/src/main/java/com/example/clientproject/data/events/EventsRepo.java b/src/main/java/com/example/clientproject/data/events/EventsRepo.java new file mode 100644 index 0000000000000000000000000000000000000000..69b5d3e7e6f63065aa47be3b3b4c22f9dc518445 --- /dev/null +++ b/src/main/java/com/example/clientproject/data/events/EventsRepo.java @@ -0,0 +1,19 @@ +package com.example.clientproject.data.events; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.Optional; + +/** + * Repository for the "Events" Entity + */ +public interface EventsRepo extends JpaRepository<Events, Long> { + /** + * Find an event by its name + * @param name - the name to search by + * @return - the event as an optional + */ + @Query("select e from Events e where e.eventName = ?1") + Optional<Events> findByEventName(String name); +} diff --git a/src/main/java/com/example/clientproject/data/logs/Logs.java b/src/main/java/com/example/clientproject/data/logs/Logs.java new file mode 100644 index 0000000000000000000000000000000000000000..190fee8fbbb18c4ad103465226f9b7d8ea95c39b --- /dev/null +++ b/src/main/java/com/example/clientproject/data/logs/Logs.java @@ -0,0 +1,43 @@ +package com.example.clientproject.data.logs; + +import com.example.clientproject.data.converters.TinyIntToBoolean; +import com.example.clientproject.data.events.Events; +import com.example.clientproject.data.users.Users; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +/** + * Entity object for logs + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Entity +public class Logs { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long logId; + private String logDetails; + private String logDateTime; + @Convert(converter = TinyIntToBoolean.class) + private boolean logSuperAdmin; + + @ManyToOne + @JoinColumn(name="User_Id", nullable=false) + private Users user; + + @ManyToOne + @JoinColumn(name="Event_Id", nullable=false) + private Events event; + + public Logs(String details, String dateTime, boolean superAdmin, Users aUser, Events aEvent) { + logDetails = details; + logDateTime = dateTime; + logSuperAdmin = superAdmin; + user = aUser; + event = aEvent; + } +} diff --git a/src/main/java/com/example/clientproject/data/logs/LogsRepo.java b/src/main/java/com/example/clientproject/data/logs/LogsRepo.java new file mode 100644 index 0000000000000000000000000000000000000000..7c5921939f46b8b1e27c720ec86bcebd05f78158 --- /dev/null +++ b/src/main/java/com/example/clientproject/data/logs/LogsRepo.java @@ -0,0 +1,43 @@ +package com.example.clientproject.data.logs; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +/** + * JPA Repo for the Logs entity + */ +public interface LogsRepo extends JpaRepository<Logs, Long> { + /** + * Find all the logs from a specific date time + * @param dateTime - the datetime to search by + * @return - list of logs from that date time + */ + @Query("select l from Logs l where l.logDateTime like ?1") + List<Logs> findByDateTime(String dateTime); + + /** + * Find all the logs for a specific event + * @param eventId - the id of the event to search by + * @return - a list of logs with that event + */ + @Query("select l from Logs l where l.event.eventId = ?1") + List<Logs> findByEventId(long eventId); + + /** + * Find all the logs for a specific user + * @param userId - the id of the user to search by + * @return - a list of all the logs for that user + */ + @Query("select l from Logs l where l.user.userId = ?1") + List<Logs> findByUserId(long userId); + + /** + * Find all the logs by a specific super admin status + * @param superAdminStatus - the status to search by + * @return - a list of the logs found + */ + @Query("select l from Logs l where l.logSuperAdmin = ?1") + List<Logs> findBySuperAdminStatus(boolean superAdminStatus); +} diff --git a/src/main/java/com/example/clientproject/data/rewards/Rewards.java b/src/main/java/com/example/clientproject/data/rewards/Rewards.java index e285c9d0cf3dffc600809af9c552c9b4c6abe58a..bb123c252868a48939da75d0899291b7d630b9f6 100644 --- a/src/main/java/com/example/clientproject/data/rewards/Rewards.java +++ b/src/main/java/com/example/clientproject/data/rewards/Rewards.java @@ -2,6 +2,7 @@ package com.example.clientproject.data.rewards; import com.example.clientproject.data.shops.Shops; import com.example.clientproject.data.stampBoards.StampBoards; +import com.example.clientproject.data.twoFactorMethods.TwoFactorMethods; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -29,4 +30,7 @@ public class Rewards { rewardStampLocation = rewardLocation; } + @ManyToOne + @JoinColumn(name="Stamp_Board_Id", nullable=false) + private StampBoards stampBoards; } diff --git a/src/main/java/com/example/clientproject/data/rewards/RewardsRepo.java b/src/main/java/com/example/clientproject/data/rewards/RewardsRepo.java index e2c27b286bef940fbbd961298a625d6e2656734b..c1ab9c191a5068e3377af33ae003e574d668cf06 100644 --- a/src/main/java/com/example/clientproject/data/rewards/RewardsRepo.java +++ b/src/main/java/com/example/clientproject/data/rewards/RewardsRepo.java @@ -22,10 +22,19 @@ public interface RewardsRepo extends JpaRepository<StampBoards, Long> { /** * Find a Reward by the name - * @param rewardName - name of the Reward to find + * @param rewardId Id of reward to find * @return - Optional object containing the Reward found, if it's present */ @Query("select r from Rewards r where r.rewardId = ?1") - Optional<Rewards> findByRewardName(String rewardName); + Optional<Rewards> findByRewardId(long rewardId); + + + /** + * Find a Reward by the name + * @param rewardId Id of reward to find + * @return - Optional Integer containing the reward, if it's present + */ + @Query("select r.rewardStampLocation from Rewards r where r.rewardId = ?1") + Optional<Integer> getRewardValueFromId(long rewardId); } diff --git a/src/main/java/com/example/clientproject/data/users/Users.java b/src/main/java/com/example/clientproject/data/users/Users.java index f5c48347b44bafc85413a54965026fa739ca0a3f..30316dab45ec4190ad2325474e00e9e909aabf4d 100644 --- a/src/main/java/com/example/clientproject/data/users/Users.java +++ b/src/main/java/com/example/clientproject/data/users/Users.java @@ -1,5 +1,6 @@ package com.example.clientproject.data.users; +import com.example.clientproject.data.logs.Logs; import com.example.clientproject.data.shops.Shops; import com.example.clientproject.data.userStampBoards.UserStampBoards; import com.example.clientproject.data.tags.Tags; diff --git a/src/main/java/com/example/clientproject/service/LoggingService.java b/src/main/java/com/example/clientproject/service/LoggingService.java new file mode 100644 index 0000000000000000000000000000000000000000..aa453854b260c560b6cfa466c2f51a590796ebf5 --- /dev/null +++ b/src/main/java/com/example/clientproject/service/LoggingService.java @@ -0,0 +1,65 @@ +package com.example.clientproject.service; + +import com.example.clientproject.data.events.Events; +import com.example.clientproject.data.logs.Logs; +import com.example.clientproject.data.logs.LogsRepo; +import com.example.clientproject.service.Utils.JWTUtils; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * Service for all logging based methods + */ +@Service +public class LoggingService { + LogsRepo logsRepo; + JWTUtils jwtUtils; + + /** + * Constructor + * @param aLogsRepo - object of type LogsRepo + * @param aJWTUtils - object of type JWTUtils + */ + public LoggingService(LogsRepo aLogsRepo, JWTUtils aJWTUtils) { + jwtUtils = aJWTUtils; + logsRepo = aLogsRepo; + } + + /** + * Method for logging an event + * @param event - the event + * @param session - the session + * @param details - details of the event + */ + public void logEvent(Events event, HttpSession session, String details) { + // Instantiate a flagging variable + boolean superAdminStatus; + // If the session attribute "superAdmin" doesn't exist (super admin not logged in) + if (session.getAttribute("superAdmin") == null) { + // Set the flag to false + superAdminStatus = false; + // Else + } else { + // Set the flag to the state of the session attribute + superAdminStatus = (boolean) session.getAttribute("superAdmin"); + } + + // Instantiate a DateTimeFormatter with the correct format + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + // Create a new Log object + Logs newLog = new Logs( + details, + LocalDateTime.now().format(formatter), + superAdminStatus, + jwtUtils.getLoggedInUserRow(session).get(), + event + ); + + // Save the new log + logsRepo.save(newLog); + } +} diff --git a/src/main/java/com/example/clientproject/service/Utils/JWTUtils.java b/src/main/java/com/example/clientproject/service/Utils/JWTUtils.java index d306113a8480c918eac69b7ef4174fd44fea8149..fbfe4c7b5129cad9e9d647de706badee3c9ade66 100644 --- a/src/main/java/com/example/clientproject/service/Utils/JWTUtils.java +++ b/src/main/java/com/example/clientproject/service/Utils/JWTUtils.java @@ -1,5 +1,7 @@ package com.example.clientproject.service.Utils; +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 io.jsonwebtoken.Claims; @@ -23,9 +25,11 @@ import java.util.Optional; public class JWTUtils { private UsersRepo usersRepo; + private UserPermissionsRepo userPermRepo; - public JWTUtils(UsersRepo ausersRepo){ - usersRepo = ausersRepo; + public JWTUtils(UsersRepo aUsersRepo, UserPermissionsRepo aUserPermsRepo){ + usersRepo = aUsersRepo; + userPermRepo = aUserPermsRepo; } private String SECRET_KEY; @@ -91,6 +95,14 @@ public class JWTUtils { jwtTimeToLive // used to calculate expiration (claim = exp) ); + List<UserPermissions> userPermList = userPermRepo.findByUserId(userId); + for (UserPermissions u: userPermList) { + if (u.getAdminType().getAdminTypeId() == 3) { + setSuperAdmin(session, true); + break; + } + } + session.setAttribute("loginCredJWT", jwt); return jwt.toString(); } @@ -131,6 +143,14 @@ public class JWTUtils { } public void logOutUser(HttpSession session){ + if ((boolean) session.getAttribute("superAdmin")) { + setSuperAdmin(session, false); + } + session.removeAttribute("loginCredJWT"); } + + public void setSuperAdmin(HttpSession session, boolean status) { + session.setAttribute("superAdmin", status); + } } diff --git a/src/main/java/com/example/clientproject/services/GetStampBoardIdFromRewardId.java b/src/main/java/com/example/clientproject/services/GetStampBoardIdFromRewardId.java new file mode 100644 index 0000000000000000000000000000000000000000..ec93834e30a2164233f9f6c89ad9e7f95c3ff08c --- /dev/null +++ b/src/main/java/com/example/clientproject/services/GetStampBoardIdFromRewardId.java @@ -0,0 +1,29 @@ +package com.example.clientproject.services; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +@Service +public class GetStampBoardIdFromRewardId { + @Autowired + JdbcTemplate jdbc; + + /** + * @param rewardId the rewardId of the stampBoardId you want to retrieve + */ + public int getStampBoardId(Integer rewardId){ + String query = "SELECT Stamp_Board_Id FROM rewards WHERE Reward_Id = " + rewardId + ";"; + try{ + List<Map<String, Object>> rs = jdbc.queryForList(query); + + System.out.println((int) rs.get(0).get("Stamp_Board_Id")); + return (int) rs.get(0).get("Stamp_Board_Id"); + }catch (Exception e){ + return 0; + } + } +} diff --git a/src/main/java/com/example/clientproject/services/UserStampBoardRetriever.java b/src/main/java/com/example/clientproject/services/UserStampBoardService.java similarity index 63% rename from src/main/java/com/example/clientproject/services/UserStampBoardRetriever.java rename to src/main/java/com/example/clientproject/services/UserStampBoardService.java index b2232bb0be5ab5642a1763ca9bc362b78d009758..b5391f7c6b490d671c8852b9554256065941b1e5 100644 --- a/src/main/java/com/example/clientproject/services/UserStampBoardRetriever.java +++ b/src/main/java/com/example/clientproject/services/UserStampBoardService.java @@ -10,9 +10,10 @@ import org.springframework.stereotype.Service; import java.sql.ResultSet; import java.util.List; import java.util.Map; +import java.util.Objects; @Service -public class UserStampBoardRetriever { +public class UserStampBoardService { @Autowired JdbcTemplate jdbc; @@ -29,7 +30,6 @@ public class UserStampBoardRetriever { public int getUserStampPos(int userID, int stampBoardID){ String query = "SELECT User_Stamp_Position FROM user_stamp_boards WHERE User_Id = " + userID + " AND Stamp_Board_Id = " + stampBoardID + ";"; try{ - System.out.println(query); List<Map<String, Object>> rs = jdbc.queryForList(query); System.out.println((int) rs.get(0).get("User_Stamp_Position")); @@ -39,4 +39,15 @@ public class UserStampBoardRetriever { } } + + public void changeUserStampPosition(int userID, int incrementValue, int currentUserStampPos, int stampBoardId){ + int newStampPos = currentUserStampPos + incrementValue; + String query = "UPDATE user_stamp_boards SET User_Stamp_Position = " + newStampPos + " WHERE User_Id = " + userID + " AND Stamp_Board_Id = " + stampBoardId + ";"; + jdbc.execute(query); + } + + public void createStampRecord(int userID, int stampPosition, int stampBoardId){ + String query = "INSERT INTO user_stamp_boards (User_Id, Stamp_Board_Id, User_Stamp_Position) VALUES ("+userID+", "+stampBoardId+", "+ stampPosition +");"; + jdbc.execute(query); + } } diff --git a/src/main/java/com/example/clientproject/web/controllers/BusinessDetails.java b/src/main/java/com/example/clientproject/web/controllers/BusinessDetails.java index dd560fe0c01ec38eee8c08d9d74847186395288f..57c894bd27d8a2fb0e0ca531bbea90f316a76a9b 100644 --- a/src/main/java/com/example/clientproject/web/controllers/BusinessDetails.java +++ b/src/main/java/com/example/clientproject/web/controllers/BusinessDetails.java @@ -7,13 +7,15 @@ import com.example.clientproject.data.socials.SocialsRepo; import com.example.clientproject.data.stampBoards.StampBoards; import com.example.clientproject.data.stampBoards.StampBoardsRepo; import com.example.clientproject.data.tags.Tags; +import com.example.clientproject.data.userPermissions.UserPermissions; +import com.example.clientproject.data.userPermissions.UserPermissionsRepo; import com.example.clientproject.data.userStampBoards.UserStampBoards; import com.example.clientproject.data.userStampBoards.UserStampBoardsRepo; import com.example.clientproject.data.users.Users; import com.example.clientproject.data.users.UsersRepo; import com.example.clientproject.service.Utils.JWTUtils; import com.example.clientproject.services.UserFavouriteTagSaver; -import com.example.clientproject.services.UserStampBoardRetriever; +import com.example.clientproject.services.UserStampBoardService; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -36,20 +38,24 @@ public class BusinessDetails { private JWTUtils jwtUtils; - private UserStampBoardRetriever userStampService; + private UserStampBoardService userStampService; private SocialsRepo socialsRepo; + UserPermissionsRepo userPermissionsRepo; + public BusinessDetails(ShopsRepo aShopRepo, StampBoardsRepo aStampBoard, - UsersRepo aUsersRepo, UserStampBoardRetriever aUserStampService, - JWTUtils ajwtUtils, SocialsRepo aSocialsRepo){ + UsersRepo aUsersRepo, UserStampBoardService aUserStampService, + JWTUtils ajwtUtils, SocialsRepo aSocialsRepo, + UserPermissionsRepo upr){ shopsRepo = aShopRepo; stampRepo = aStampBoard; usersRepo = aUsersRepo; jwtUtils = ajwtUtils; userStampService = aUserStampService; socialsRepo = aSocialsRepo; + userPermissionsRepo = upr; } @GetMapping("/businessDetails") @@ -81,6 +87,20 @@ public class BusinessDetails { List<Socials> socialMedia = socialsRepo.findByShopId(shop.getShopId()); + //gets users permission level for shop + long shopPermissionLevel = 0; + List<UserPermissions> userShops = userPermissionsRepo.findByUserId(jwtUtils.getLoggedInUserId(session).get()); + //loops through userPermissions and saves it to variable to be passed into model + for (UserPermissions u : userShops) { + if (u.getShop().getShopId() == shop.getShopId()) { + shopPermissionLevel = u.getAdminType().getAdminTypeId(); + } + } + //creates an object to pass into model + ArrayList <Integer> userShopPermissionOBJ = new ArrayList<>(); + userShopPermissionOBJ.add((int) shopPermissionLevel); + model.addAttribute("userPermission", userShopPermissionOBJ); + model.addAttribute("socials", socialMedia); diff --git a/src/main/java/com/example/clientproject/web/restControllers/UpdateUserStampPosition.java b/src/main/java/com/example/clientproject/web/restControllers/UpdateUserStampPosition.java new file mode 100644 index 0000000000000000000000000000000000000000..3b517f939a069bce3e0c169b5bf43e4f81b3ba64 --- /dev/null +++ b/src/main/java/com/example/clientproject/web/restControllers/UpdateUserStampPosition.java @@ -0,0 +1,124 @@ +package com.example.clientproject.web.restControllers; + +import com.example.clientproject.data.rewards.Rewards; +import com.example.clientproject.data.rewards.RewardsRepo; +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.userPermissions.UserPermissions; +import com.example.clientproject.data.userPermissions.UserPermissionsRepo; +import com.example.clientproject.data.userStampBoards.UserStampBoards; +import com.example.clientproject.data.users.Users; +import com.example.clientproject.data.users.UsersRepo; +import com.example.clientproject.service.Utils.JWTUtils; +import com.example.clientproject.services.GetStampBoardIdFromRewardId; +import com.example.clientproject.services.StampboardUpdater; +import com.example.clientproject.services.UserStampBoardService; +import com.example.clientproject.web.forms.UpdateStampboardForm; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpSession; +import java.nio.charset.Charset; +import java.util.*; + +@RestController +public class UpdateUserStampPosition { + JWTUtils jwtUtils; + UserStampBoardService userStampBoardService; + UserPermissionsRepo userPermissionsRepo; + RewardsRepo rewardsRepo; + UsersRepo usersRepo; + GetStampBoardIdFromRewardId getStampBoardIdFromRewardId; + ShopsRepo shopsRepo; + + public UpdateUserStampPosition(JWTUtils jwt, UserStampBoardService usbs, + UserPermissionsRepo upr, RewardsRepo rr, + UsersRepo ur, GetStampBoardIdFromRewardId gsbifri, + ShopsRepo sr){ //need to add service for changing stamp pos + jwtUtils = jwt; + userStampBoardService = usbs; + userPermissionsRepo = upr; + rewardsRepo = rr; + usersRepo = ur; + getStampBoardIdFromRewardId = gsbifri; + shopsRepo = sr; + } + + @PostMapping("/changeUserPos") + public void updateUserPos(@RequestParam(name="direction", required = true) String direction, + @RequestParam(name="shopId", required = true) String shopId, HttpSession session) { + //will firstly check that user has permission to do action + //Optional<Users> user = jwtUtils.getLoggedInUserRow(session); + long shopPermissionLevel = 0; + int currentUserStampPos = 0; + long shopStampBoardId = 0; + int shopStampBoardSize = 0; + int shopIdConverted = Integer.parseInt(shopId); + List<UserPermissions> userShops = userPermissionsRepo.findByUserId(jwtUtils.getLoggedInUserId(session).get()); + for (UserPermissions u : userShops) { //loops through userPermissions and saves it to variable to be checked + if (u.getShop().getShopId() == shopIdConverted) { + shopPermissionLevel = u.getAdminType().getAdminTypeId(); + shopStampBoardId = u.getShop().getStampBoard().getStampBoardId(); + shopStampBoardSize = u.getShop().getStampBoard().getStampBoardSize(); + } + } + if(shopPermissionLevel > 1){//user has the correct level to add/subtract their own stampBoard place + currentUserStampPos = userStampBoardService.getUserStampPos(jwtUtils.getLoggedInUserId(session).get(), (int) shopStampBoardId ); + Shops shop = shopsRepo.getById(Long.valueOf(shopId)); + StampBoards stampBoard = shop.getStampBoard(); + if(Objects.equals(direction, "subtract")){ + if(currentUserStampPos != 0){ + userStampBoardService.changeUserStampPosition(jwtUtils.getLoggedInUserId(session).get(), -1, currentUserStampPos, (int) stampBoard.getStampBoardId()); + } + } else if(Objects.equals(direction, "add")){ + if(currentUserStampPos != shopStampBoardSize){ + userStampBoardService.changeUserStampPosition(jwtUtils.getLoggedInUserId(session).get(), 1, currentUserStampPos, (int) stampBoard.getStampBoardId()); + currentUserStampPos = userStampBoardService.getUserStampPos(jwtUtils.getLoggedInUserId(session).get(), (int) shopStampBoardId ); + } + if(currentUserStampPos == 0){ + System.out.println("Attempting to create record for user"); + userStampBoardService.createStampRecord(jwtUtils.getLoggedInUserId(session).get(), 1, (int) shopStampBoardId); + } + } + } + } + + @PostMapping("/reedeemReward") + public String reedeemStamps(@RequestParam(name="rewardId", required = true) int rewardId, HttpSession session){ + Optional<Rewards> reward = rewardsRepo.findByRewardId(Long.valueOf(rewardId)); + int stampBoardId = getStampBoardIdFromRewardId.getStampBoardId(rewardId); + Optional<Users> user = usersRepo.findById(Long.valueOf(jwtUtils.getLoggedInUserId(session).get())); + Set<UserStampBoards> userStampBoards = user.get().getUserStampBoards(); + int userStampPos = 0; + + boolean userIsLinkedToStampBoard = false; + for(UserStampBoards u : userStampBoards){ + if(stampBoardId == u.getStampBoard().getStampBoardId()){ + userStampPos = u.getUserStampPosition(); + userIsLinkedToStampBoard = true; + } + } + if(userIsLinkedToStampBoard){ + if(userStampPos >= reward.get().getRewardStampLocation()){ + userStampBoardService.changeUserStampPosition(jwtUtils.getLoggedInUserId(session).get(), -reward.get().getRewardStampLocation(), userStampPos, stampBoardId); + //credit to www.programiz.com for code generator + String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//creates a string of all characters + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + for(int i = 0; i < 8; i++) { + int index = random.nextInt(alphabet.length()); + char randomChar = alphabet.charAt(index); + sb.append(randomChar); + } + String code = sb.toString().toUpperCase(); + return code; + } + } else { + System.out.println("User is not linked to stampboard they are trying to claim a reward from"); + } + + return "no"; + } +} diff --git a/src/main/resources/database/Data Script/script.sql b/src/main/resources/database/Data Script/script.sql index 513d9b5cd3c7017caa4a17ce23d0731f7023fef2..20f35b1c982ad09a23af68d69e90ad8d2a4239dd 100644 --- a/src/main/resources/database/Data Script/script.sql +++ b/src/main/resources/database/Data Script/script.sql @@ -1,13 +1,15 @@ -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("randeep","ccovery","randeepccovery@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",2); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("kaela","ra","kaelara@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",2); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("kerra","oneypenny","kerraoneypenny@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",1); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("morag","za","moragza@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",1); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("waqas","ediego","waqasediego@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",1); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("kobe","hamsi","kobehamsi@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",2); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("mhairi","engblom","mhairiengblom@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",2); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("deanne","aqib","deanneaqib@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",1); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("kian","chesler","kianchesler@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",2); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("freddie","lachy","freddielachy@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",2); +# noinspection LossyEncodingForFile + +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('randeep','ccovery','randeepccovery@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',2); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('kaela','ra','kaelara@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',2); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('kerra','oneypenny','kerraoneypenny@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',1); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('morag','za','moragza@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',1); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('waqas','ediego','waqasediego@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',1); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('kobe','hamsi','kobehamsi@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',2); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('mhairi','engblom','mhairiengblom@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',2); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('deanne','aqib','deanneaqib@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',1); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('kian','chesler','kianchesler@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',2); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('freddie','lachy','freddielachy@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',2); INSERT INTO User_Permissions (User_ID, Shop_ID, Admin_Type_Id) VALUES (1,1,1); INSERT INTO User_Permissions (User_ID, Shop_ID, Admin_Type_Id) VALUES (2,1,1); INSERT INTO User_Permissions (User_ID, Shop_ID, Admin_Type_Id) VALUES (3,1,1); @@ -19,76 +21,76 @@ INSERT INTO User_Permissions (User_ID, Shop_ID, Admin_Type_Id) VALUES (8,1,1); INSERT INTO User_Permissions (User_ID, Shop_ID, Admin_Type_Id) VALUES (9,1,1); INSERT INTO User_Permissions (User_ID, Shop_ID, Admin_Type_Id) VALUES (10,1,1); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("keeganjack","hieb","keeganjackhieb@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",2); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("faren","krosschell","farenkrosschell@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",1); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('keeganjack','hieb','keeganjackhieb@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',2); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('faren','krosschell','farenkrosschell@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',1); INSERT INTO User_Permissions (User_ID, Shop_ID, Admin_Type_Id) VALUES (11,1,2); INSERT INTO User_Permissions (User_ID, Shop_ID, Admin_Type_Id) VALUES (12,1,2); -INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ("aimen","enifer","aimenenifer@email.com","$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK","testImage.png",1); +INSERT INTO Users (User_First_Name, User_Last_Name, User_Email, User_Password, User_Profile_Picture, Two_Factor_Method_Id) VALUES ('aimen','enifer','aimenenifer@email.com','$2a$10$YnDtWkRyd3WfYb5CDHBNx.yfuWPW7dOg86NteaEAyaEmaRywfwueK','testImage.png',1); INSERT INTO User_Permissions (User_ID, Shop_ID, Admin_Type_Id) VALUES (13,1,3); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("10% off",3,2); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("2 for 1",8,3); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("10% off",7,4); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("£5 off",10,5); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("2 for 1",6,6); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("£5 off",9,7); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("2 for 1",8,8); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("10% off",5,9); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("2 for 1",6,10); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("2 for 1",8,11); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("£5 off",3,12); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("5% off",3,13); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("2 for 1",8,14); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("10% off",9,15); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("10% off",3,16); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("2 for 1",9,17); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("10% off",8,18); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("10% off",8,19); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("10% off",7,20); -INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,"#ff0000","stamp.png"); -INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ("5% off",3,21); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Hudson Group","","hudsongroup.com","21722","ge georgia","shopPic.png","shopBanner.png",1,2,2); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Wyman - Mertz","","wymanmertz.com","27121","ir iran islamic republic of","shopPic.png","shopBanner.png",0,3,4); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Sauer, Hoppe and Hartmann","","sauerhoppeandhartmann.com","12603","kp korea democratic peoples republic of","shopPic.png","shopBanner.png",1,4,2); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Flatley LLC","","flatleyllc.com","34968","tn tunisia","shopPic.png","shopBanner.png",1,5,6); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Johnson Inc","","johnsoninc.com","31198","gs south georgia and the south sandwich islands","shopPic.png","shopBanner.png",1,6,4); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Hills, Corkery and Maggio","","hillscorkeryandmaggio.com","16424","om oman","shopPic.png","shopBanner.png",0,7,7); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Dickinson Group","","dickinsongroup.com","26474","ga gabon","shopPic.png","shopBanner.png",1,8,6); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Balistreri LLC","","balistrerillc.com","38659","es spain","shopPic.png","shopBanner.png",1,9,2); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Gaylord, Ankunding and Stanton","","gaylordankundingandstanton.com","35281","ba bosnia and herzegovina","shopPic.png","shopBanner.png",1,10,7); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Hilpert Group","","hilpertgroup.com","3304","lv latvia","shopPic.png","shopBanner.png",0,11,7); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Kling - Bauch","","klingbauch.com","35570","re reunion","shopPic.png","shopBanner.png",1,12,4); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Larkin - King","","larkinking.com","7492","dk denmark","shopPic.png","shopBanner.png",1,13,4); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Muller, Ullrich and Kunze","","mullerullrichandkunze.com","6456","gw guineabissau","shopPic.png","shopBanner.png",0,14,6); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Friesen - Armstrong","","friesenarmstrong.com","29922","mw malawi","shopPic.png","shopBanner.png",0,15,3); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("McDermott Inc","","mcdermottinc.com","15319","gm gambia","shopPic.png","shopBanner.png",0,16,4); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Moen - Raynor","","moenraynor.com","9864","kg kyrgyzstan","shopPic.png","shopBanner.png",1,17,3); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Hilpert - Berge","","hilpertberge.com","11447","ar argentina","shopPic.png","shopBanner.png",0,18,3); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Padberg Inc","","padberginc.com","15997","kr korea republic of","shopPic.png","shopBanner.png",1,19,2); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Senger - Ryan","","sengerryan.com","25887","iq iraq","shopPic.png","shopBanner.png",0,20,3); -INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ("Fay - Koepp","","faykoepp.com","13482","gf french guiana","shopPic.png","shopBanner.png",1,21,2); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('10% off',3,2); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('2 for 1',8,3); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('10% off',7,4); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('£5 off',10,5); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('2 for 1',6,6); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('£5 off',9,7); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('2 for 1',8,8); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('10% off',5,9); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('2 for 1',6,10); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('2 for 1',8,11); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('£5 off',3,12); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('5% off',3,13); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('2 for 1',8,14); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('10% off',9,15); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('10% off',3,16); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('2 for 1',9,17); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('10% off',8,18); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('10% off',8,19); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('10% off',7,20); +INSERT INTO Stamp_Boards (Stamp_Board_Size, Stamp_Board_Colour, Stamp_Board_Icon) VALUES (10,'#ff0000','stamp.png'); +INSERT INTO Rewards (Reward_Name, Reward_Stamp_Location, Stamp_Board_Id) VALUES ('5% off',3,21); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Hudson Group','','hudsongroup.com','21722','ge georgia','shopPic.png','shopBanner.png',1,2,2); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Wyman - Mertz','','wymanmertz.com','27121','ir iran islamic republic of','shopPic.png','shopBanner.png',0,3,4); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Sauer, Hoppe and Hartmann','','sauerhoppeandhartmann.com','12603','kp korea democratic peoples republic of','shopPic.png','shopBanner.png',1,4,2); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Flatley LLC','','flatleyllc.com','34968','tn tunisia','shopPic.png','shopBanner.png',1,5,6); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Johnson Inc','','johnsoninc.com','31198','gs south georgia and the south sandwich islands','shopPic.png','shopBanner.png',1,6,4); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Hills, Corkery and Maggio','','hillscorkeryandmaggio.com','16424','om oman','shopPic.png','shopBanner.png',0,7,7); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Dickinson Group','','dickinsongroup.com','26474','ga gabon','shopPic.png','shopBanner.png',1,8,6); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Balistreri LLC','','balistrerillc.com','38659','es spain','shopPic.png','shopBanner.png',1,9,2); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Gaylord, Ankunding and Stanton','','gaylordankundingandstanton.com','35281','ba bosnia and herzegovina','shopPic.png','shopBanner.png',1,10,7); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Hilpert Group','','hilpertgroup.com','3304','lv latvia','shopPic.png','shopBanner.png',0,11,7); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Kling - Bauch','','klingbauch.com','35570','re reunion','shopPic.png','shopBanner.png',1,12,4); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Larkin - King','','larkinking.com','7492','dk denmark','shopPic.png','shopBanner.png',1,13,4); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Muller, Ullrich and Kunze','','mullerullrichandkunze.com','6456','gw guineabissau','shopPic.png','shopBanner.png',0,14,6); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Friesen - Armstrong','','friesenarmstrong.com','29922','mw malawi','shopPic.png','shopBanner.png',0,15,3); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('McDermott Inc','','mcdermottinc.com','15319','gm gambia','shopPic.png','shopBanner.png',0,16,4); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Moen - Raynor','','moenraynor.com','9864','kg kyrgyzstan','shopPic.png','shopBanner.png',1,17,3); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Hilpert - Berge','','hilpertberge.com','11447','ar argentina','shopPic.png','shopBanner.png',0,18,3); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Padberg Inc','','padberginc.com','15997','kr korea republic of','shopPic.png','shopBanner.png',1,19,2); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Senger - Ryan','','sengerryan.com','25887','iq iraq','shopPic.png','shopBanner.png',0,20,3); +INSERT INTO Shops (Shop_Name, Shop_Description, Shop_Website, Shop_Earnings, Shop_Countries, Shop_Image, Shop_Banner, Shop_Active, Stamp_Board_Id, Category_Id) VALUES ('Fay - Koepp','','faykoepp.com','13482','gf french guiana','shopPic.png','shopBanner.png',1,21,2); INSERT INTO Shop_Tag_Links (Shop_Id, Tag_Id) VALUES (1,7); INSERT INTO Shop_Tag_Links (Shop_Id, Tag_Id) VALUES (2,10); INSERT INTO Shop_Tag_Links (Shop_Id, Tag_Id) VALUES (2,2); diff --git a/src/main/resources/database/WeekFourERD.png b/src/main/resources/database/WeekFourERD.png new file mode 100644 index 0000000000000000000000000000000000000000..7247c10a046662acc5b072479ae00e84b30652e2 Binary files /dev/null and b/src/main/resources/database/WeekFourERD.png differ diff --git a/src/main/resources/database/schema.sql b/src/main/resources/database/schema.sql index c7736a3642b0816130bf6b9e4ac6353037abd22a..3d7f0735aed3f3845ab1764376e4d115af7d8b35 100644 --- a/src/main/resources/database/schema.sql +++ b/src/main/resources/database/schema.sql @@ -255,6 +255,41 @@ CREATE TABLE IF NOT EXISTS `mydb`.`Socials` ( ENGINE = InnoDB; + +-- ----------------------------------------------------- +-- Table `mydb`.`Events` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `mydb`.`Events` ( + `Event_Id` INT NOT NULL AUTO_INCREMENT, + `Event_Name` VARCHAR(45) NOT NULL, + PRIMARY KEY(`Event_Id`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `mydb`.`Logs` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `mydb`.`Logs` ( + `Log_Id` INT NOT NULL AUTO_INCREMENT, + `Event_Id` INT NOT NULL, + `User_Id` INT NOT NULL, + `Log_Details` VARCHAR(150) NOT NULL, + `Log_Date_Time` DATETIME NOT NULL, + `Log_Super_Admin` TINYINT NOT NULL, + PRIMARY KEY(`Log_Id`, `Event_Id`, `User_Id`), + CONSTRAINT `fk_Events1` + FOREIGN KEY (`Event_Id`) + REFERENCES `mydb`.`Events` (`Event_Id`) + ON UPDATE NO ACTION + ON DELETE NO ACTION, + CONSTRAINT `fk_Users1` + FOREIGN KEY (`User_Id`) + REFERENCES `mydb`.`Users` (`User_Id`) + ON UPDATE NO ACTION + ON DELETE NO ACTION + ) +ENGINE = InnoDB; + INSERT INTO two_factor_methods (`Two_Factor_Method_Id`, `Two_Factor_Method_Name`) VALUES (1, 'None'); @@ -295,3 +330,16 @@ INSERT INTO Tags (Tag_Name) VALUES ('beauty'); INSERT INTO Tags (Tag_Name) VALUES ('eco-friendly'); INSERT INTO Tags (Tag_Name) VALUES ('decorations'); INSERT INTO Tags (Tag_Name) VALUES ('photography'); + +INSERT INTO Events (Event_Name) VALUES ('New Account Created'); +INSERT INTO Events (Event_Name) VALUES ('Failed Login'); +INSERT INTO Events (Event_Name) VALUES ('Successful Login'); +INSERT INTO Events (Event_Name) VALUES ('User Details Changed'); +INSERT INTO Events (Event_Name) VALUES ('User Removed'); +INSERT INTO Events (Event_Name) VALUES ('New Shop'); +INSERT INTO Events (Event_Name) VALUES ('Deleted Shop'); +INSERT INTO Events (Event_Name) VALUES ('New Favourite Business'); +INSERT INTO Events (Event_Name) VALUES ('New Shop User'); +INSERT INTO Events (Event_Name) VALUES ('Shop Details Changed'); +INSERT INTO Events (Event_Name) VALUES ('Shop Activity Toggled'); +INSERT INTO Events (Event_Name) VALUES ('Image Inserted'); \ No newline at end of file diff --git a/src/main/resources/static/css/viewShop.css b/src/main/resources/static/css/viewShop.css index c7a22395bfae22da772326ab5d3ede32c8ac2498..a42ee8bb8ec07fa002f15ac0ed2a4942acc82f29 100644 --- a/src/main/resources/static/css/viewShop.css +++ b/src/main/resources/static/css/viewShop.css @@ -183,3 +183,49 @@ img.stamp{ align-items: center; position: relative; } + +.change-stamp-progress-container{ + position: absolute; + display: flex; + flex-direction: column; + top: 70%; + right: 3%; + width: 10px; +} + +.reward-box{ + width: inherit; + +} + +.text-align-center{ + text-align: center; +} + +.inherit-width{ + width: inherit; +} + +.reward-claim-title{ + font-weight: bold; + font-size: 40px; +} + +.big-margin-top{ + margin-top: 70px; +} + +.reward-claim-code{ + color: black; + font-weight: bold; + font-size: 60px; +} + +.custom-modal-card-body{ + background-color: #fff; + flex-grow: 1; + flex-shrink: 1; + padding: 20px; + height: 400px; + border-radius: 0px 0px 10px 10px; +} diff --git a/src/main/resources/static/js/selectCategories.js b/src/main/resources/static/js/selectCategories.js index 7c3a3ebad97dcbff9665c58ecb306781e6839090..285dbe05020044f8bc20386366806c70c1cdbec0 100644 --- a/src/main/resources/static/js/selectCategories.js +++ b/src/main/resources/static/js/selectCategories.js @@ -40,9 +40,9 @@ function submitCategories(listSize){ status.innerHTML = "There was an error try again later."; } }; - xhttp.onerror = function () { - status.innerHTML = "There was an error. Please try again later."; - } + xhttp.onerror = function () { + status.innerHTML = "There was an error. Please try again later."; + } xhttp.send(params); return false; } diff --git a/src/main/resources/static/js/viewShop.js b/src/main/resources/static/js/viewShop.js index 2f409ca8c5920d0905bc479634ff03c6a037347e..3d7fc0ecf7bc079d4003e3de184fcf3b2585a771 100644 --- a/src/main/resources/static/js/viewShop.js +++ b/src/main/resources/static/js/viewShop.js @@ -1,5 +1,6 @@ var currentPage = 1; + function pageNav(direction){ //this checks that current page will not go to 0 if "direction" = -1 / left if (direction === -1){ //"-1" = left @@ -26,6 +27,55 @@ function pageNav(direction){ } } -function toBusinessWebsite(URL){ - window.location.href = URL; + +function changeUserStampPos(increment, shopId){ + if (increment === "subtract"){ //take away a stamp position from user + params = 'direction=subtract'; + } else if(increment === "add"){ //add a stamp to user + params = 'direction=add'; + } else { + return null; + } + params = params + '&shopId=' + shopId; + var xhttp = new XMLHttpRequest(); + xhttp.open("POST", '/changeUserPos', true); // true is asynchronous + xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + xhttp.onload = function () { + if (xhttp.readyState === 4 && xhttp.status === 200) { + console.log(xhttp.responseText); + window.location.reload(true); + } + } + xhttp.onerror = function () { + alert("There was an error. Database has not been updated."); + } + xhttp.send(params); + return false; } + +function claimReward(rewardId){ + params = 'rewardId=' + rewardId; + var xhttp = new XMLHttpRequest(); + xhttp.open("POST", '/reedeemReward', true); // true is asynchronous + xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + xhttp.onload = function () { + if (xhttp.readyState === 4 && xhttp.status === 200) { + console.log(xhttp.responseText); + var modal = document.getElementById("rewardModal"); + var code = document.getElementById("reward-code"); + code.innerText = xhttp.responseText; + modal.classList.add("is-active"); + } + } + xhttp.onerror = function () { + alert("There was an error. Database has not been updated."); + } + xhttp.send(params); + return false; +} + + +function closeModal(){ + window.location.reload(true); +} + diff --git a/src/main/resources/templates/admin.html b/src/main/resources/templates/admin.html index 6aaaf60a8010fc1fe5378e0396e77ec33ad5c48a..cfc658cfbe0a3986cbf7a6114559e9eea3f1bd64 100644 --- a/src/main/resources/templates/admin.html +++ b/src/main/resources/templates/admin.html @@ -45,7 +45,7 @@ <p>Shop Rewards</p> </div> </div> - <div class="sidebar closed" id="side_shop_select"> + <div class="sidebar closed" id="side_shop_select" th:if="${highestPerm > 1 || linkedShop}"> <th:block th:each="category: ${adminOfByCategory.entrySet()}"> <div class="shop-tab-container"> <div class="shop-tab shop-category" onclick="this.parentElement.classList.toggle('open')"> diff --git a/src/main/resources/templates/fragments/reward_card.html b/src/main/resources/templates/fragments/reward_card.html index 27ef83f54948571b38a5e01e451811513ebc4623..a2f3babb3870c6b54886f70e289cf72e3083ab62 100644 --- a/src/main/resources/templates/fragments/reward_card.html +++ b/src/main/resources/templates/fragments/reward_card.html @@ -28,7 +28,7 @@ <p th:text="${reward_amount_obtained} + '/' + ${total_reward_amount}"></p> </div> <div class="level-right"> - <a th:href="'businessDetails?shopId=' + ${shop.getShopId()}"> + <a th:href="'businessDetails?shopId=' + ${shopId}"> <button class="button is-rounded"> Explore <span class="icon is-small is-left ml-1"> diff --git a/src/main/resources/templates/shopDetails.html b/src/main/resources/templates/shopDetails.html index bbf527a15eb0928dc20d4c22b512e7ce0d9c5abb..19c9fe0c8f7085081f7141f981840b6ffd31bfab 100644 --- a/src/main/resources/templates/shopDetails.html +++ b/src/main/resources/templates/shopDetails.html @@ -41,7 +41,7 @@ <div th:each="reward : ${stampBoard.rewards}" class="reward is-fullwidth"> <p class="reward-text" th:text="${reward.rewardName}"></p> <button th:unless="${UserStampPos[0]>=reward.rewardStampLocation}" class="button is-small buttonRewardNotReady">Cannot afford</button> - <button th:if="${UserStampPos[0]>=reward.rewardStampLocation}" class="button is-small buttonRewardisReady">Click to claim!</button> + <button th:if="${UserStampPos[0]>=reward.rewardStampLocation}" class="button is-small buttonRewardisReady" th:onclick="claimReward([[${reward.rewardId}]])">Click to claim!</button> <progress class="progress is-small marginBottom7px is-success" th:value="${UserStampPos[0]}" th:max="${reward.rewardStampLocation}"></progress> <!-- TH:STYLE HAS NOT BEEN SET SO EXPECT AN ERROR --> <p class="stampProgressText" th:unless="${UserStampPos[0]>=reward.rewardStampLocation}" th:text="${reward.rewardStampLocation - UserStampPos[0]} + ' away from reward'"/> @@ -75,7 +75,7 @@ </div> </div> - <div th:if="${@loadSocials.getSocial(socials, 'facebook' != '')}" class="control"> + <div th:if="${@loadSocials.getSocial(socials, 'facebook') != ''}" class="control"> <div class="tags has-addons"> <span class="tag is-large is-grey"> <span class="icon-text"> @@ -110,7 +110,7 @@ </span> </span> </span> - <a th:href="'https://twitter.com/' + ${@loadSocials.getSocial(socials, 'instagram')}"><span class="tag is-large is-danger mousePointerWhenHovered">Instagram</span></a> + <a th:href="'https://instagram.com/' + ${@loadSocials.getSocial(socials, 'instagram')}"><span class="tag is-large is-danger mousePointerWhenHovered">Instagram</span></a> </div> </div> @@ -133,5 +133,24 @@ <!-- <img th:src="${shop.shopImage}" alt=""> --> <!-- <h1 th:text="${stampBoard.stampBoardSize}"></h1> --> </div> + <div class="change-stamp-progress-container" th:if="${userPermission[0] > 1}"> + <button class="button is-rounded is-info" th:onclick="changeUserStampPos('add', [[${shop.getShopId}]])">+</button> + <button class="button is-rounded is-info" th:onclick="changeUserStampPos('subtract', [[${shop.getShopId}]])">-</button> + </div> + <div class="modal" id="rewardModal"> + <div class="modal-background"></div> + <div class="modal-card"> + <header class="modal-card-head text-align-center"> + <p class="modal-card-title reward-claim-title">Claim your reward!</p> + <button class="delete" aria-label="close" onclick="closeModal()"></button> + </header> + <section class="custom-modal-card-body"> + <div class="inherit-width text-align-center big-margin-top">reward code:</div> + <div class="inherit-width text-align-center reward-claim-code" id="reward-code">XKMSTVZ</div> + + </section> + </div> + </div> + <span th:value="${shop.getShopId}" id="shopId"/> </body> </html> diff --git a/src/test/resources/schema-test-h2.sql b/src/test/resources/schema-test-h2.sql index a1344bb0431691788e75d4dcff4331aa471ff961..6abe29dfee8e62efcc21ebc2f3e58652e19193df 100644 --- a/src/test/resources/schema-test-h2.sql +++ b/src/test/resources/schema-test-h2.sql @@ -265,6 +265,40 @@ CREATE TABLE IF NOT EXISTS `User_Stamp_Boards` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `Events` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `Events` ( + `Event_Id` INT NOT NULL AUTO_INCREMENT, + `Event_Name` VARCHAR(45) NOT NULL, + PRIMARY KEY(`Event_Id`)) + ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `Logs` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `Logs` ( + `Log_Id` INT NOT NULL AUTO_INCREMENT, + `Event_Id` INT NOT NULL, + `User_Id` INT NOT NULL, + `Log_Details` VARCHAR(150), + `Log_Date_Time` DATETIME NOT NULL, + `Log_Super_Admin` TINYINT NOT NULL, + PRIMARY KEY(`Log_Id`, `Event_Id`, `User_Id`), + CONSTRAINT `fk_Events1` + FOREIGN KEY (`Event_Id`) + REFERENCES `Events` (`Event_Id`) + ON UPDATE NO ACTION + ON DELETE NO ACTION, + CONSTRAINT `fk_Users1` + FOREIGN KEY (`User_Id`) + REFERENCES `Users` (`User_Id`) + ON UPDATE NO ACTION + ON DELETE NO ACTION +) + ENGINE = InnoDB; + INSERT INTO two_factor_methods (`Two_Factor_Method_Id`, `Two_Factor_Method_Name`) VALUES (1, 'None'); INSERT INTO two_factor_methods (`Two_Factor_Method_Id`, `Two_Factor_Method_Name`) VALUES (2, 'GAuth'); @@ -284,4 +318,35 @@ INSERT INTO Admin_Types (Admin_Type_Id, Admin_Type_Name) VALUES (1,'User'); INSERT INTO Admin_Types (Admin_Type_Id, Admin_Type_Name) VALUES (2,'Business Admin'); INSERT INTO Admin_Types (Admin_Type_Id, Admin_Type_Name) VALUES (3,'Super Admin'); -INSERT INTO Tags (Tag_Name) VALUES ('Football'); \ No newline at end of file +INSERT INTO Tags (Tag_Name) VALUES ('football'); +INSERT INTO Tags (Tag_Name) VALUES ('fashion'); +INSERT INTO Tags (Tag_Name) VALUES ('electronics'); +INSERT INTO Tags (Tag_Name) VALUES ('coffee'); +INSERT INTO Tags (Tag_Name) VALUES ('art'); +INSERT INTO Tags (Tag_Name) VALUES ('pets'); +INSERT INTO Tags (Tag_Name) VALUES ('clothes'); +INSERT INTO Tags (Tag_Name) VALUES ('designer'); +INSERT INTO Tags (Tag_Name) VALUES ('groceries'); +INSERT INTO Tags (Tag_Name) VALUES ('cars'); +INSERT INTO Tags (Tag_Name) VALUES ('hiking'); +INSERT INTO Tags (Tag_Name) VALUES ('cooking'); +INSERT INTO Tags (Tag_Name) VALUES ('furniture'); +INSERT INTO Tags (Tag_Name) VALUES ('gaming'); +INSERT INTO Tags (Tag_Name) VALUES ('travelling'); +INSERT INTO Tags (Tag_Name) VALUES ('beauty'); +INSERT INTO Tags (Tag_Name) VALUES ('eco-friendly'); +INSERT INTO Tags (Tag_Name) VALUES ('decorations'); +INSERT INTO Tags (Tag_Name) VALUES ('photography'); + +INSERT INTO Events (Event_Name) VALUES ('New Account Created'); +INSERT INTO Events (Event_Name) VALUES ('Failed Login'); +INSERT INTO Events (Event_Name) VALUES ('Successful Login'); +INSERT INTO Events (Event_Name) VALUES ('User Details Changed'); +INSERT INTO Events (Event_Name) VALUES ('User Removed'); +INSERT INTO Events (Event_Name) VALUES ('New Shop'); +INSERT INTO Events (Event_Name) VALUES ('Deleted Shop'); +INSERT INTO Events (Event_Name) VALUES ('New Favourite Business'); +INSERT INTO Events (Event_Name) VALUES ('New Shop User'); +INSERT INTO Events (Event_Name) VALUES ('Shop Details Changed'); +INSERT INTO Events (Event_Name) VALUES ('Shop Activity Toggled'); +INSERT INTO Events (Event_Name) VALUES ('Image Inserted'); \ No newline at end of file