From 6ca9cb39cf94e025ad28aaeda9ed6d3fbd279839 Mon Sep 17 00:00:00 2001 From: Gabriel Copat <copatg@cardiff.ac.uk> Date: Sat, 2 Dec 2023 16:01:34 +0000 Subject: [PATCH] Added Badges Database Added User Database Loaded both into the UserController, displaying at the UserPage. Added new database entries in data.sql Deleted old user object, not in use. --- .../SmartTowns/Data/DatabaseController.java | 13 ++----- src/main/java/Team5/SmartTowns/Data/user.java | 12 ------ .../SmartTowns/rewards/BadgesRepository.java | 9 +++++ .../rewards/BadgesRepositoryJDBC.java | 33 ++++++++++++++++ .../SmartTowns/users/UserController.java | 39 +++++++++---------- .../{Data => users}/UserRepository.java | 4 +- .../{Data => users}/UserRepositoryJDBC.java | 13 ++++--- src/main/resources/data.sql | 13 +++++-- src/main/resources/schema.sql | 9 +++++ 9 files changed, 93 insertions(+), 52 deletions(-) delete mode 100644 src/main/java/Team5/SmartTowns/Data/user.java create mode 100644 src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java create mode 100644 src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.java rename src/main/java/Team5/SmartTowns/{Data => users}/UserRepository.java (59%) rename src/main/java/Team5/SmartTowns/{Data => users}/UserRepositoryJDBC.java (71%) diff --git a/src/main/java/Team5/SmartTowns/Data/DatabaseController.java b/src/main/java/Team5/SmartTowns/Data/DatabaseController.java index b91d7d88..646df7b5 100644 --- a/src/main/java/Team5/SmartTowns/Data/DatabaseController.java +++ b/src/main/java/Team5/SmartTowns/Data/DatabaseController.java @@ -1,5 +1,7 @@ package Team5.SmartTowns.Data; +import Team5.SmartTowns.users.User; +import Team5.SmartTowns.users.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @@ -9,20 +11,13 @@ import java.util.*; @Controller public class DatabaseController { - @Autowired - private UserRepository userRepository; + @Autowired private locationRepository locationRepository; @Autowired private trailsRepository trailsRepository; - @GetMapping("/userList") - public ModelAndView userList() { - ModelAndView mav = new ModelAndView("towns/userData"); - List<user> users = userRepository.getAllUsers(); - mav.addObject("users", users); - return mav; - } + @GetMapping("/trailList") public ModelAndView trailList() { ModelAndView mav1 = new ModelAndView("towns/trailsData"); diff --git a/src/main/java/Team5/SmartTowns/Data/user.java b/src/main/java/Team5/SmartTowns/Data/user.java deleted file mode 100644 index a40350eb..00000000 --- a/src/main/java/Team5/SmartTowns/Data/user.java +++ /dev/null @@ -1,12 +0,0 @@ -//Holds variable data for the users table -package Team5.SmartTowns.Data; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class user { - private int userId; - private String name; -} diff --git a/src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java b/src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java new file mode 100644 index 00000000..56b1019c --- /dev/null +++ b/src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java @@ -0,0 +1,9 @@ +//Holds locations data repository +package Team5.SmartTowns.rewards; + +import java.util.List; + +public interface BadgesRepository { + List<Badge> getAllBadges(); +} + diff --git a/src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.java new file mode 100644 index 00000000..7c22061e --- /dev/null +++ b/src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.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 BadgesRepositoryJDBC implements BadgesRepository { + private JdbcTemplate jdbc; + private RowMapper<Badge> badgeMapper; + + public BadgesRepositoryJDBC(JdbcTemplate aJdbc) { + this.jdbc = aJdbc; + setBadgeMapper(); + } + private void setBadgeMapper(){ + badgeMapper = (rs, i) -> new Badge( + rs.getInt("badgeID"), + rs.getString("name"), + rs.getString("description"), + rs.getInt("difficulty") + ); + } + + @Override + public List<Badge> getAllBadges(){ + String sql= "SELECT * FROM badges"; + return jdbc.query(sql, badgeMapper); + } +} diff --git a/src/main/java/Team5/SmartTowns/users/UserController.java b/src/main/java/Team5/SmartTowns/users/UserController.java index 0df64570..d2cf3b31 100644 --- a/src/main/java/Team5/SmartTowns/users/UserController.java +++ b/src/main/java/Team5/SmartTowns/users/UserController.java @@ -1,7 +1,10 @@ package Team5.SmartTowns.users; + import Team5.SmartTowns.rewards.Badge; +import Team5.SmartTowns.rewards.BadgesRepository; import Team5.SmartTowns.rewards.Sticker; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -12,23 +15,13 @@ import java.util.List; @Controller public class UserController { - /* TEMPORARY USER LIST --- TODO REPLACE IT WITH DATABASE LIST*/ - static List<User> users = List.of( - new User(1, "johndoe@gmail.com", "Claire Redfield"), - new User(2, "johndoe@gmail.com", "Albert Wesker"), - new User(3, "johndoe@gmail.com", "Leon Kennedy"), - new User(4, "johndoe@gmail.com", "Jill Valentine") - ); - static List<Badge> badges = List.of( - new Badge(1, "Badge1", "Bage One is This", 1), - new Badge(2, "Badge1", "Bage One is This", 4), - new Badge(3, "Badge1", "Bage One is This", 4), - new Badge(4, "Badge1", "Bage One is This", 5), - new Badge(5, "Badge1", "Bage One is This", 5), - new Badge(46, "Badge1", "Bage One is This", 5), - new Badge(7, "Badge1", "Bage One is This", 2) - ); + @Autowired + private UserRepository userRepository; + @Autowired + private BadgesRepository badgesRepository; + + /*TODO REPLACE IT WITH DATABASE LIST*/ static List<Sticker> stickers = List.of( new Sticker(1, "Sticker", "Sticker", 1), new Sticker(2, "Sticker", "Sticker", 4), @@ -39,8 +32,18 @@ public class UserController { new Sticker(7, "Sticker", "Sticker One is This", 2) ); + @GetMapping("/userList") + public ModelAndView userList() { + ModelAndView mav = new ModelAndView("towns/userData"); + List<User> users = userRepository.getAllUsers(); + mav.addObject("users", users); + return mav; + } + @GetMapping("/user/{id}") public ModelAndView getUserPage(@PathVariable int id) { + List<Badge> badges = badgesRepository.getAllBadges(); + List<User> users = userRepository.getAllUsers(); ModelAndView mav = new ModelAndView("rewards/userProfile"); users.stream() .filter(user -> user.getId() == id) @@ -50,8 +53,4 @@ public class UserController { mav.addObject("stickers", stickers); return mav; } -// @GetMapping("/userProfile") -// public ModelAndView getUserPage(ModelAndView mav) { -// return mav; -// } } diff --git a/src/main/java/Team5/SmartTowns/Data/UserRepository.java b/src/main/java/Team5/SmartTowns/users/UserRepository.java similarity index 59% rename from src/main/java/Team5/SmartTowns/Data/UserRepository.java rename to src/main/java/Team5/SmartTowns/users/UserRepository.java index 172591d6..c994b3dc 100644 --- a/src/main/java/Team5/SmartTowns/Data/UserRepository.java +++ b/src/main/java/Team5/SmartTowns/users/UserRepository.java @@ -1,8 +1,8 @@ //Holds users data repository -package Team5.SmartTowns.Data; +package Team5.SmartTowns.users; import java.util.List; public interface UserRepository { - List<user> getAllUsers(); + List<User> getAllUsers(); } diff --git a/src/main/java/Team5/SmartTowns/Data/UserRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java similarity index 71% rename from src/main/java/Team5/SmartTowns/Data/UserRepositoryJDBC.java rename to src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java index 63e0bad0..ee3a72fb 100644 --- a/src/main/java/Team5/SmartTowns/Data/UserRepositoryJDBC.java +++ b/src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java @@ -1,5 +1,5 @@ //Implements the users repository using JDBC -package Team5.SmartTowns.Data; +package Team5.SmartTowns.users; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; @@ -11,17 +11,18 @@ import java.util.List; public class UserRepositoryJDBC implements UserRepository{ private JdbcTemplate jdbc; - private RowMapper<user> userMapper; + private RowMapper<User> userMapper; public UserRepositoryJDBC(JdbcTemplate aJdbc){ this.jdbc = aJdbc; - setuserMapper(); + setUserMapper(); } - private void setuserMapper(){ - userMapper = (rs, i) -> new user( + private void setUserMapper(){ + userMapper = (rs, i) -> new User( rs.getInt("userID"), + rs.getString("email"), rs.getString("name") ); } @@ -29,7 +30,7 @@ public class UserRepositoryJDBC implements UserRepository{ @Override - public List<user> getAllUsers(){ + public List<User> getAllUsers(){ String sql= "SELECT * FROM users"; return jdbc.query(sql, userMapper); } diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index f7656769..d06aaf78 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -1,6 +1,6 @@ delete from users; -insert into users (userID, Name) value ('1', 'Hannah'); -insert into users (userID, Name) value ('2', 'Nigel'); +insert into users (userID, email, name) value ('1', 'hannah@gmail.com', 'Hannah'); +insert into users (userID, email, name) value ('2', 'nigel@gmail.com', 'Nigel'); delete from trails; insert into trails (trailID, Name) value ('1', 'Caerphilly Coffee Trail'); @@ -8,4 +8,11 @@ insert into trails (trailID, Name) value ('2', 'Penarth Dragon Trail'); delete from locations; insert into locations (locationID, Name) value ('1', 'Caerphilly'); -insert into locations (locationID, Name) value ('2', 'Penarth'); \ No newline at end of file +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 diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 8d9e102d..4eadc115 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -14,5 +14,14 @@ drop table if exists users; create table if not exists users ( userID bigint auto_increment primary key, + email varchar(128), name varchar(128) +) engine=InnoDB; +drop table if exists badges; +create table if not exists badges +( + badgeID bigint auto_increment primary key, + name varchar(128), + description varchar(128), + difficulty bigint ) engine=InnoDB; \ No newline at end of file -- GitLab