From 0bafd3f992f9b6b640abf918e728be95e14dd90d Mon Sep 17 00:00:00 2001 From: Gabriel Copat <copatg@cardiff.ac.uk> Date: Sat, 2 Dec 2023 16:14:16 +0000 Subject: [PATCH] Added dabase and controllers for Stickers --- .../rewards/StickersRepository.java | 9 +++++ .../rewards/StickersRepositoryJDBC.java | 33 +++++++++++++++++++ .../SmartTowns/users/UserController.java | 15 +++------ src/main/resources/data.sql | 17 +++++++--- src/main/resources/schema.sql | 8 +++++ 5 files changed, 66 insertions(+), 16 deletions(-) create mode 100644 src/main/java/Team5/SmartTowns/rewards/StickersRepository.java create mode 100644 src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java diff --git a/src/main/java/Team5/SmartTowns/rewards/StickersRepository.java b/src/main/java/Team5/SmartTowns/rewards/StickersRepository.java new file mode 100644 index 00000000..869c2d07 --- /dev/null +++ b/src/main/java/Team5/SmartTowns/rewards/StickersRepository.java @@ -0,0 +1,9 @@ +//Holds locations data repository +package Team5.SmartTowns.rewards; + +import java.util.List; + +public interface StickersRepository { + List<Sticker> getAllStickers(); +} + diff --git a/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java new file mode 100644 index 00000000..64df71bc --- /dev/null +++ b/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java @@ -0,0 +1,33 @@ +//Implements the locations repository using JDBC +package Team5.SmartTowns.rewards; + +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") + ); + } + + @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 d2cf3b31..e9ba7543 100644 --- a/src/main/java/Team5/SmartTowns/users/UserController.java +++ b/src/main/java/Team5/SmartTowns/users/UserController.java @@ -4,6 +4,7 @@ package Team5.SmartTowns.users; import Team5.SmartTowns.rewards.Badge; import Team5.SmartTowns.rewards.BadgesRepository; 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; @@ -19,19 +20,10 @@ public class UserController { private UserRepository userRepository; @Autowired private BadgesRepository badgesRepository; + @Autowired + private StickersRepository stickersRepository; - /*TODO REPLACE IT WITH DATABASE LIST*/ - static List<Sticker> stickers = List.of( - new Sticker(1, "Sticker", "Sticker", 1), - new Sticker(2, "Sticker", "Sticker", 4), - new Sticker(3, "Sticker", "Sticker One is This", 4), - new Sticker(4, "Sticker", "Sticker One is This", 5), - new Sticker(5, "Sticker", "Sticker One is This", 5), - new Sticker(46, "Sticker", "Sticker One is This", 5), - new Sticker(7, "Sticker", "Sticker One is This", 2) - ); - @GetMapping("/userList") public ModelAndView userList() { ModelAndView mav = new ModelAndView("towns/userData"); @@ -43,6 +35,7 @@ public class UserController { @GetMapping("/user/{id}") public ModelAndView getUserPage(@PathVariable int id) { List<Badge> badges = badgesRepository.getAllBadges(); + List<Sticker> stickers = stickersRepository.getAllStickers(); List<User> users = userRepository.getAllUsers(); ModelAndView mav = new ModelAndView("rewards/userProfile"); users.stream() diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index d06aaf78..2c9ea94b 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -11,8 +11,15 @@ insert into locations (locationID, Name) value ('1', 'Caerphilly'); insert into locations (locationID, Name) value ('2', 'Penarth'); delete from badges; -insert into badges (badgeID, name, description, difficulty) value ('1', 'TownConnoisseur', 'You know the town very well!', '2'); -insert into badges (badgeID, name, description, difficulty) value ('2', 'TownRegular', 'You visited the town 3 days in a row!', '1'); -insert into badges (badgeID, name, description, difficulty) value ('3', 'TownMaster', 'You visited the town 7 days in a row!', '1'); -insert into badges (badgeID, name, description, difficulty) value ('4', 'TownRegular', 'You visited the town 3 days in a row!', '1'); -insert into badges (badgeID, name, description, difficulty) value ('5', 'TownRegular', 'You visited the town 3 days in a row!', '1'); \ No newline at end of file +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'); +insert into badges (name, description, difficulty) value ('TownMaster', 'You visited the town 7 days in a row!', '1'); +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 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'); +insert into stickers (name, description, rarity) value ('TownMaster', 'You visited the town 7 days in a row!', '1'); +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'); \ No newline at end of file diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 4eadc115..ab83b929 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -24,4 +24,12 @@ create table if not exists badges name varchar(128), description varchar(128), difficulty bigint +) engine=InnoDB; +drop table if exists stickers; +create table if not exists stickers +( + stickerID bigint auto_increment primary key, + name varchar(128), + description varchar(128), + rarity bigint ) engine=InnoDB; \ No newline at end of file -- GitLab