diff --git a/src/main/java/Team5/SmartTowns/Data/DatabaseController.java b/src/main/java/Team5/SmartTowns/Data/DatabaseController.java index b91d7d880368f6cb405e3ed71c38242f612bfae2..646df7b5705c710acbe588209fdf00e6c9c53420 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 a40350ebc13621da4fb8a89f4e58d2ccb5be2568..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..56b1019cbe016a7c687b5ac83973679e8f498eef --- /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 0000000000000000000000000000000000000000..7c22061e894a633bf9c047f69f575daf9366b493 --- /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 0df6457070de7a7db2ff33576c569e20120be554..d2cf3b318522ae65fb456ca4a03dd3bbe10376ed 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 172591d6500927a341d6534dca6c34728965db06..c994b3dc6a418757f57501a958cb571b542df5cf 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 63e0bad0a8a3abf5f09c435a749066f51f7100fc..ee3a72fb30c5b58291d7caf1ec5242d0df2833b6 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 f7656769c7d1b2afd5e78e3a93c3cd3ed44abe3b..d06aaf78f54db096f2f3da78687cbd0676652421 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 8d9e102d1f6b02b1f864e396f591a4a61aad8b41..4eadc115d284f559d296a7743cf852606a507418 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