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