From 2531a0af0460689c2bab11a5009e936a0e812538 Mon Sep 17 00:00:00 2001 From: Gabriel Copat <copatg@cardiff.ac.uk> Date: Tue, 5 Dec 2023 12:29:06 +0000 Subject: [PATCH] Changed database Repositories for Badges/Stickers to a singular Repository for Rewards Updated UserController.java to reflect this change --- .../smartTowns/rewards/RewardsRepository.java | 13 +++++++ ...ryJDBC.java => RewardsRepositoryJDBC.java} | 26 +++++++++++--- .../rewards/data/BadgesRepository.java | 11 ------ .../rewards/data/StickersRepository.java | 9 ----- .../rewards/data/StickersRepositoryJDBC.java | 35 ------------------- .../smartTowns/users/UserController.java | 19 +++++----- src/main/resources/data.sql | 14 +++++--- src/main/resources/schema.sql | 8 +++++ 8 files changed, 61 insertions(+), 74 deletions(-) create mode 100644 src/main/java/team5/smartTowns/rewards/RewardsRepository.java rename src/main/java/team5/smartTowns/rewards/{data/BadgesRepositoryJDBC.java => RewardsRepositoryJDBC.java} (52%) delete mode 100644 src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java delete mode 100644 src/main/java/team5/smartTowns/rewards/data/StickersRepository.java delete mode 100644 src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java diff --git a/src/main/java/team5/smartTowns/rewards/RewardsRepository.java b/src/main/java/team5/smartTowns/rewards/RewardsRepository.java new file mode 100644 index 00000000..3afd44cc --- /dev/null +++ b/src/main/java/team5/smartTowns/rewards/RewardsRepository.java @@ -0,0 +1,13 @@ +//Holds locations data repository +package team5.smartTowns.rewards; + +import team5.smartTowns.rewards.Badge; +import team5.smartTowns.rewards.Sticker; + +import java.util.List; + +public interface RewardsRepository { + List<Badge> getAllBadges(); + List<Sticker> getAllStickers(); +} + diff --git a/src/main/java/team5/smartTowns/rewards/data/BadgesRepositoryJDBC.java b/src/main/java/team5/smartTowns/rewards/RewardsRepositoryJDBC.java similarity index 52% rename from src/main/java/team5/smartTowns/rewards/data/BadgesRepositoryJDBC.java rename to src/main/java/team5/smartTowns/rewards/RewardsRepositoryJDBC.java index 5f8750fd..307d7975 100644 --- a/src/main/java/team5/smartTowns/rewards/data/BadgesRepositoryJDBC.java +++ b/src/main/java/team5/smartTowns/rewards/RewardsRepositoryJDBC.java @@ -1,7 +1,6 @@ //Implements the locations repository using JDBC -package team5.smartTowns.rewards.data; +package team5.smartTowns.rewards; -import team5.smartTowns.rewards.Badge; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; @@ -9,13 +8,15 @@ import org.springframework.stereotype.Repository; import java.util.List; @Repository -public class BadgesRepositoryJDBC implements BadgesRepository { - private JdbcTemplate jdbc; +public class RewardsRepositoryJDBC implements RewardsRepository { + private final JdbcTemplate jdbc; private RowMapper<Badge> badgeMapper; + private RowMapper<Sticker> stickerMapper; - public BadgesRepositoryJDBC(JdbcTemplate aJdbc) { + public RewardsRepositoryJDBC(JdbcTemplate aJdbc) { this.jdbc = aJdbc; setBadgeMapper(); + setStickerMapper(); } private void setBadgeMapper(){ badgeMapper = (rs, i) -> new Badge( @@ -26,6 +27,21 @@ public class BadgesRepositoryJDBC implements BadgesRepository { ); } + private void setStickerMapper(){ + stickerMapper = (rs, i) -> new Sticker( + rs.getInt("stickerID"), + rs.getString("name"), + rs.getString("description"), + rs.getInt("rarity") + ); + } + + @Override + public List<Sticker> getAllStickers(){ + String sql= "SELECT * FROM stickers"; + return jdbc.query(sql, stickerMapper); + } + @Override public List<Badge> getAllBadges(){ String sql= "SELECT * FROM badges"; diff --git a/src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java b/src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java deleted file mode 100644 index 70790543..00000000 --- a/src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -//Holds locations data repository -package team5.smartTowns.rewards.data; - -import team5.smartTowns.rewards.Badge; - -import java.util.List; - -public interface BadgesRepository { - List<Badge> getAllBadges(); -} - diff --git a/src/main/java/team5/smartTowns/rewards/data/StickersRepository.java b/src/main/java/team5/smartTowns/rewards/data/StickersRepository.java deleted file mode 100644 index 532d7cc6..00000000 --- a/src/main/java/team5/smartTowns/rewards/data/StickersRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -//Holds locations data repository -package team5.smartTowns.rewards.data; -import team5.smartTowns.rewards.Sticker; -import java.util.List; - -public interface StickersRepository { - List<Sticker> getAllStickers(); -} - diff --git a/src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java b/src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java deleted file mode 100644 index 49b3ca03..00000000 --- a/src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java +++ /dev/null @@ -1,35 +0,0 @@ -//Implements the locations repository using JDBC -package team5.smartTowns.rewards.data; - -import team5.smartTowns.rewards.Sticker; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public class StickersRepositoryJDBC implements StickersRepository { - private JdbcTemplate jdbc; - private RowMapper<Sticker> stickerMapper; - - public StickersRepositoryJDBC(JdbcTemplate aJdbc) { - this.jdbc = aJdbc; - setStickerMapper(); - } - private void setStickerMapper(){ - stickerMapper = (rs, i) -> new Sticker( - rs.getInt("stickerID"), - rs.getString("name"), - rs.getString("description"), - rs.getInt("rarity"), - rs.getString("pack") - ); - } - - @Override - public List<Sticker> getAllStickers(){ - String sql= "SELECT * FROM stickers"; - return jdbc.query(sql, stickerMapper); - } -} diff --git a/src/main/java/team5/smartTowns/users/UserController.java b/src/main/java/team5/smartTowns/users/UserController.java index 4d36608d..8313dd5f 100644 --- a/src/main/java/team5/smartTowns/users/UserController.java +++ b/src/main/java/team5/smartTowns/users/UserController.java @@ -2,9 +2,8 @@ package team5.smartTowns.users; import team5.smartTowns.rewards.Badge; -import team5.smartTowns.rewards.BadgesRepository; +import team5.smartTowns.rewards.RewardsRepository; import team5.smartTowns.rewards.Sticker; -import team5.smartTowns.rewards.StickersRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @@ -20,9 +19,7 @@ public class UserController { @Autowired private UserRepository userRepository; @Autowired - private BadgesRepository badgesRepository; - @Autowired - private StickersRepository stickersRepository; + private RewardsRepository rewardsRepository; @GetMapping("/login") public ModelAndView getLoginPage() { @@ -43,20 +40,22 @@ public class UserController { @GetMapping("/user/{id}") public ModelAndView getUserPage(@PathVariable int id) { ModelAndView mav = new ModelAndView("users/userProfile"); - List<Badge> badges = badgesRepository.getAllBadges(); /*DEPRECATED FOR THE MOMENT*/ - mav.addObject("badges", badges); - List<Sticker> allStickers = stickersRepository.getAllStickers(); + List<Badge> badges = rewardsRepository.getAllBadges(); /*DEPRECATED FOR THE MOMENT*/ + List<Sticker> allStickers = rewardsRepository.getAllStickers(); + + + List<User> users = userRepository.getAllUsers(); Map<Long, Boolean> userStickers = userRepository.getStickers(id); - for (Long stickerID : userStickers.keySet()) { //Finds and updates visibility of stickers based on what the user has allStickers.stream() .filter(sticker -> sticker.getId()==stickerID) .findFirst().ifPresent(sticker -> sticker.setVisibility(userStickers.get(stickerID))); } - mav.addObject("user", userRepository.getUser(id)); + mav.addObject("packs", badges); mav.addObject("stickers", allStickers); + return mav; } } diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index e40208ba..90036622 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -32,6 +32,7 @@ insert into locations ( locationName , locationEmail,locationDescription,locatio insert into locations (locationID, locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value (19, 'The Esplanade','','Location description here','Penarth',0301); insert into locations (locationID, locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value (20, 'The Old Swimming Baths','','Location description here','Penarth',0301); + delete from badges; insert into badges (name, description, difficulty) value ('TownConnoisseur', 'You know the town very well!', '2'); insert into badges (name, description, difficulty) value ('TownRegular', 'You visited the town 3 days in a row!', '1'); @@ -39,6 +40,11 @@ insert into badges (name, description, difficulty) value ('TownMaster', 'You vis insert into badges (name, description, difficulty) value ('TownRegular', 'You visited the town 3 days in a row!', '1'); insert into badges (name, description, difficulty) value ('TownRegular', 'You visited the town 3 days in a row!', '1'); +delete from badgeprogress; +insert into badgeprogress (userID, badgeID, progress) value ('1', '1', '40'); +insert into badgeprogress (userID, badgeID, progress) value ('1', '2', '70'); +insert into badgeprogress (userID, badgeID, progress) value ('2', '2', '70'); + delete from stickers; insert into stickers (name, description, rarity) value ('TownConnoisseur', 'You know the town very well!', '2'); insert into stickers (name, description, rarity) value ('TownRegular', 'You visited the town 3 days in a row!', '1'); @@ -46,10 +52,10 @@ insert into stickers (name, description, rarity) value ('TownMaster', 'You visit insert into stickers (name, description, rarity) value ('TownRegular', 'You visited the town 3 days in a row!', '1'); insert into stickers (name, description, rarity) value ('TownRegular', 'You visited the town 3 days in a row!', '1'); -delete from badgeprogress; -insert into badgeprogress (userID, badgeID, progress) value ('1', '1', '40'); -insert into badgeprogress (userID, badgeID, progress) value ('1', '2', '70'); -insert into badgeprogress (userID, badgeID, progress) value ('2', '2', '70'); +delete from stickerprogress; +insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '1', true); +insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '3', true); +insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '2', true); delete from stickerprogress; insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '1', true); diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 92b8d4e0..8f1aedef 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -39,6 +39,7 @@ drop table if exists stickers; create table if not exists stickers ( stickerID bigint auto_increment primary key, + packID bigint, name varchar(128), description varchar(128), rarity bigint @@ -57,4 +58,11 @@ create table if not exists stickerProgress userID bigint, stickerID bigint, hasSticker boolean /*Has sticker or not*/ +) engine=InnoDB; +create table if not exists packs +( + packID bigint auto_increment primary key, + name varchar(128), + description varchar(128) + ) engine=InnoDB; \ No newline at end of file -- GitLab