From 2fa2e2464369b7b1bf9bf1d7633a6285fe325ce1 Mon Sep 17 00:00:00 2001 From: Rhys Evans <EvansRM17@cardiff.ac.uk> Date: Wed, 6 Dec 2023 20:34:12 +0000 Subject: [PATCH] Further work. Previous commit - attempting foreign keys --- src/main/java/Team5/SmartTowns/Data/Town.java | 20 +++++++++- .../Team5/SmartTowns/Data/TownRepository.java | 8 +++- .../SmartTowns/Data/TownRepositoryJDBC.java | 37 ++++++++++++++++++- .../SmartTowns/Towns/TownController.java | 30 +++++++++++---- src/main/resources/schema.sql | 20 +++++----- .../userTrails/userTrailsTemplate.html | 6 +++ .../SmartTownsApplicationTests.java | 23 ++++++++++++ 7 files changed, 124 insertions(+), 20 deletions(-) diff --git a/src/main/java/Team5/SmartTowns/Data/Town.java b/src/main/java/Team5/SmartTowns/Data/Town.java index aa0b7cd6..22b7a435 100644 --- a/src/main/java/Team5/SmartTowns/Data/Town.java +++ b/src/main/java/Team5/SmartTowns/Data/Town.java @@ -1,2 +1,20 @@ -package Team5.SmartTowns.Data;public class Town { +package Team5.SmartTowns.Data; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class Town { + private String townName; + private Integer townTrailNumber; + + + public String getTownName() { + return townName; + } + + public Integer getTownTrailNumber() { + return townTrailNumber; + } } diff --git a/src/main/java/Team5/SmartTowns/Data/TownRepository.java b/src/main/java/Team5/SmartTowns/Data/TownRepository.java index dd5cb04a..ea6255b4 100644 --- a/src/main/java/Team5/SmartTowns/Data/TownRepository.java +++ b/src/main/java/Team5/SmartTowns/Data/TownRepository.java @@ -1,2 +1,8 @@ -package Team5.SmartTowns.Data;public class TownRepository { +package Team5.SmartTowns.Data; + +import java.util.List; + +public interface TownRepository { + List<Town> getAllTowns(); + void addTown(Town town); } diff --git a/src/main/java/Team5/SmartTowns/Data/TownRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/Data/TownRepositoryJDBC.java index f40cb51f..89436f4d 100644 --- a/src/main/java/Team5/SmartTowns/Data/TownRepositoryJDBC.java +++ b/src/main/java/Team5/SmartTowns/Data/TownRepositoryJDBC.java @@ -1,2 +1,37 @@ -package Team5.SmartTowns.Data;public class TownRepositoryJDBC { +package Team5.SmartTowns.Data; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public class TownRepositoryJDBC implements TownRepository{ + + private JdbcTemplate jdbc; + private RowMapper<Town> townMapper; + + public TownRepositoryJDBC(JdbcTemplate aJdbc) { + this.jdbc = aJdbc; + setTownMapper(); + } + private void setTownMapper(){ + townMapper = (rs, i) -> new Town( + rs.getString("townName"), + rs.getInt("townTrailNumber") + ); + } + public List<Town> getAllTowns(){ + String sql= "SELECT * FROM towns"; + return jdbc.query(sql, townMapper); + } + + @Override // intended implementation at current: user data from templates/Landmarks/LandmarkFormTh.html is added to the Location table + public void addTown(Town town) { + String sql = "insert into towns( townName,townTrailNumber) values (?,?)"; + + jdbc.update(sql,town.getTownName(),town.getTownTrailNumber()); + } + } diff --git a/src/main/java/Team5/SmartTowns/Towns/TownController.java b/src/main/java/Team5/SmartTowns/Towns/TownController.java index dfdb9ae9..be04c550 100644 --- a/src/main/java/Team5/SmartTowns/Towns/TownController.java +++ b/src/main/java/Team5/SmartTowns/Towns/TownController.java @@ -1,6 +1,11 @@ package Team5.SmartTowns.Towns; +import Team5.SmartTowns.Data.Location; +import Team5.SmartTowns.Data.Town; +import Team5.SmartTowns.Data.TownRepository; +import Team5.SmartTowns.Data.locationRepository; import Team5.SmartTowns.Landmarks.Landmarks; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.servlet.ModelAndView; @@ -9,6 +14,10 @@ import java.util.List; @Controller public class TownController { + @Autowired + private Team5.SmartTowns.Data.locationRepository locationRepository; + @Autowired + private Team5.SmartTowns.Data.TownRepository townRepository; @GetMapping("/home") public ModelAndView getTownList(){ @@ -20,12 +29,19 @@ public class TownController { } -// @GetMapping("/home/town") -// public ModelAndView getATownTrailsList(){ -// ModelAndView modelAndView = new ModelAndView("userTrails/userTrailsTemplate"); -// modelAndView.addObject("townStuff", a); -// return modelAndView; -// } -// + @GetMapping("/home/town") + public ModelAndView getATownTrailsList(){ + ModelAndView modelAndView = new ModelAndView("userTrails/userTrailsTemplate"); + TownStorage townsCurrent= new TownStorage().getInstance(); + List<Towns> towns = townsCurrent.getTownList(); + List<Town> Towns = townRepository.getAllTowns(); + modelAndView.addObject("towns", Towns); + List<Location> Locations = locationRepository.getAllLocation(); + modelAndView.addObject("locations", Locations); + return modelAndView; + } + + public List<Location> filterByLocationForTrails(List<Location>) + } diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 3264a781..2ca616e6 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -5,15 +5,9 @@ create table if not exists trails name varchar(128) ) engine=InnoDB; - drop table if exists towns; -create table if not exists towns -( - townID bigint auto_increment primary key, - townName varchar(255), - trailNumber tinyint -) engine=InnoDB; + drop table if exists locations; create table if not exists locations @@ -22,9 +16,8 @@ create table if not exists locations locationName varchar(128), locationEmail varchar(128), locationDescription longtext, - locationPlace bigint, - locationTrailID varchar(128), - foreign key (locationPlace) references towns(townID) + locationPlace varchar(255), + locationTrailID varchar(128) ) engine=InnoDB; drop table if exists users; @@ -69,3 +62,10 @@ create table if not exists stickerProgress hasSticker boolean /*Has sticker or not*/ ) engine=InnoDB; +create table if not exists towns +( + townID bigint auto_increment primary key, + townName varchar(255) , + townTrailNumber tinyint + +) engine=InnoDB; diff --git a/src/main/resources/templates/userTrails/userTrailsTemplate.html b/src/main/resources/templates/userTrails/userTrailsTemplate.html index fb52c908..65317b0e 100644 --- a/src/main/resources/templates/userTrails/userTrailsTemplate.html +++ b/src/main/resources/templates/userTrails/userTrailsTemplate.html @@ -5,10 +5,16 @@ <title>Trails</title> </head> <body> +<main> + <div th:each="location:${locations}"></div> +</main> + + + </body> diff --git a/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java b/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java index d9c15a4b..c0d81b03 100644 --- a/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java +++ b/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java @@ -1,13 +1,36 @@ package Team5.SmartTowns; +import Team5.SmartTowns.Towns.TownController; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import static org.junit.jupiter.api.Assertions.assertEquals; + @SpringBootTest class SmartTownsApplicationTests { + private static TownController townController; + @Autowired + private Team5.SmartTowns.Data.locationRepository locationRepository; +// @BeforeAll +// public static void before(){} +// townController= new townController(); +//} + @Test void contextLoads() { } + @Test + public void whenFilteringTownsByLocationsReturnOneTown() { + + townController.filterByLocationForTrails() + + + assertEquals(, townController.filterByLocationForTrails); + } + + } -- GitLab