From 6f558f5eada987ac63a9b89bc083272cb97e0f58 Mon Sep 17 00:00:00 2001
From: Rhys Evans <EvansRM17@cardiff.ac.uk>
Date: Tue, 12 Dec 2023 16:21:41 +0000
Subject: [PATCH] Re-implemented data/schema .sql files for more efficient
 working order i.e. they break less

---
 src/main/resources/data.sql   | 142 +++++++++++++++++++++-------------
 src/main/resources/schema.sql |  92 ++++++++++++++--------
 src/test/java/Test3.java      |  54 ++++++-------
 3 files changed, 176 insertions(+), 112 deletions(-)

diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index f73e28c6..93f05d0c 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -1,61 +1,99 @@
 delete from users;
-insert into users ( email, name, dragonProgress) value ('hannah@gmail.com', 'Hannah', '90');
-insert into users ( email, name, dragonProgress) value ( 'nigel@gmail.com', 'Nigel', '40');
+insert into users (email, name, dragonProgress,dragonsLandmarkIDs) value ('hannah@gmail.com', 'Hannah','90','A');
+insert into users (email, name, dragonProgress,dragonsLandmarkIDs) value ('nigel@gmail.com', 'Nigel','40','B');
 
 delete from trails;
-insert into trails ( Name) value ( 'Caerphilly Coffee Trail');
-insert into trails ( Name) value ( 'Penarth Dragon Trail');
-delete from towns;
-insert into towns ( townName,townTrailNumber) value ( 'Caerphilly',03);
-insert into towns ( townName,townTrailNumber) value ( 'Risca',01);
-insert into towns ( townName,townTrailNumber) value ( 'Penarth',01);
+insert into trails ( Name,tru) value ( 'Caerphilly Coffee Trail',false);
+insert into trails ( Name,tru) value ( 'Penarth Dragon Trail',true);
 
 delete from locations;
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'St Cenydd','','Location description here','Caerphilly',0101);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'The Castle','','Location description here','Caerphilly',0101);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'Medieval Trades','','Location description here','Caerphilly',0101);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'The Queen''s War','','Location description here','Caerphilly',0101);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'The Green Lady','','Location description here','Caerphilly',0101);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'Armoury','','Location description here','Caerphilly',0101);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'Architecture','','Location description here','Caerphilly',0101);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( '21st Century Landmark','','Location description here','Caerphilly',0101);
-
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'JD Wetherspoons-Malcolm Uphill','','Location description here','Caerphilly',0102);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'Caerphilly Cwtch','','Location description here','Caerphilly',0102);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'Caerphilly Conservative Club','','Location description here','Caerphilly',0102);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'The King''s Arms','','Location description here','Caerphilly',0102);
-
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'Caerphilly Bus Station','','Location description here','Caerphilly',0103);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'The Medieval Courthouse','','Location description here','Caerphilly',0103);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ('Caerphilly Castle','','Location description here','Caerphilly',0103);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'Ty Vaughan House','','Location description here','Caerphilly',0103);
-
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'Risca Colliery','','Location description here','Risca',0201);
-insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value ( 'Black Vein Colliery Disaster','','Location description here','Risca',0201);
-
-
-insert into locations (locationID, locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value (19, 'The Esplanade','','Location description here','Penarth',0301);
-insert into locations (locationID, locationName , locationEmail,locationDescription,locationPlace, locationTrailID) value (20, 'The Old Swimming Baths','','Location description here','Penarth',0301);
-delete from badges;
-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');
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'St Cenydd','','Location description here','Caerphilly',0101, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'The Castle','','Location description here','Caerphilly',0101, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'Medieval Trades','','Location description here','Caerphilly',0101, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'The Queen''s War','','Location description here','Caerphilly',0101, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'The Green Lady','','Location description here','Caerphilly',0101, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'Armoury','','Location description here','Caerphilly',0101, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'Architecture','','Location description here','Caerphilly',0101, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( '21st Century Landmark','','Location description here','Caerphilly',0101, true);
+
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'JD Wetherspoons-Malcolm Uphill','','Location description here','Caerphilly',0102, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'Caerphilly Cwtch','','Location description here','Caerphilly',0102, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'Caerphilly Conservative Club','','Location description here','Caerphilly',0102, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'The King''s Arms','','Location description here','Caerphilly',0102, true);
+
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'Caerphilly Bus Station','','Location description here','Caerphilly',0103, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'The Medieval Courthouse','','Location description here','Caerphilly',0103, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ('Caerphilly Castle','','Location description here','Caerphilly',0103, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'Ty Vaughan House','','Location description here','Caerphilly',0103, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'Risca Colliery','','Location description here','Risca',0201, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'Black Vein Colliery Disaster','','Location description here','Risca',0201, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'The Esplanade','','Location description here','Penarth',0301, true);
+insert into locations ( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) value ( 'The Old Swimming Baths','','Location description here','Penarth',0301, true);
+
+
+# delete from badges;
+# 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 packs;
+insert into packs (name, description) value ('Wales Football Team', 'Pack of Welsh Football Players in the National Team');
+insert into packs (name, description) value ('Wales Rugby Team', 'Pack of Welsh Rugby Players in the National Team');
+insert into packs (name, description) value ('Welsh Heritage', 'Pack About Welsh Heritage');
+
 
 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');
-
-delete from badgeprogress;
-insert into badgeprogress (userID, badgeID, progress) value ('1', '1', '40');
-insert into badgeprogress (userID, badgeID, progress) value ('1', '2', '70');
-insert into badgeprogress (userID, badgeID, progress) value ('2', '2', '70');
-
-delete from stickerprogress;
+insert into stickers (packID, stickerID, name, description, rarity) value (1, 1, 'wayne_hennessey', 'Wales Football Team Player', '2');
+insert into stickers (packID, stickerID, name, description, rarity) value (1, 2, 'neco_williams', 'Wales Football Team Player', '2');
+insert into stickers (packID, stickerID, name, description, rarity) value (1, 3, 'joe_morrell', 'Wales Football Team Player', '2');
+insert into stickers (packID, stickerID, name, description, rarity) value (1, 4, 'ethan_ampadu', 'Wales Football Team Player', '2');
+insert into stickers (packID, stickerID, name, description, rarity) value (1, 5, 'connor_roberts', 'Wales Football Team Player', '2');
+insert into stickers (packID, stickerID, name, description, rarity) value (2, 1, 'Taine_Basham', 'Wales Rugby Team Player', '1');
+insert into stickers (packID, stickerID, name, description, rarity) value (2, 2, 'Adam Beard', 'Wales Rugby Team Player', '1');
+insert into stickers (packID, stickerID, name, description, rarity) value (2, 3, 'Elliot Dee', 'Wales Rugby Team Player', '1');
+insert into stickers (packID, stickerID, name, description, rarity) value (2, 4, 'Corey Domachowski', 'Wales Rugby Team Player', '1');
+insert into stickers (packID, stickerID, name, description, rarity) value (2, 5, 'Ryan Elias', 'Wales Rugby Team Player', '1');
+insert into stickers (packID, stickerID, name, description, rarity) value (3, 1, 'Welsh Lady', 'Welsh Heritage', '1');
+insert into stickers (packID, stickerID, name, description, rarity) value (3, 2, 'Welsh Outline', 'Welsh Heritage', '1');
+insert into stickers (packID, stickerID, name, description, rarity) value (3, 3, 'Welsh Spoon', 'Welsh Heritage', '1');
+
+# delete from stickerprogress;
 # insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '1', true);
 # insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '3', true);
-# insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '2', true);
\ No newline at end of file
+# insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '2', true);
+
+delete from locationCoordinates;
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (2, 51.57623, -3.21910 );
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (3, 51.575372, -3.219186);
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (4, 51.576363, -3.220712 );
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (9, 51.57239, -3.21992);
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (10, 51.57229, -3.21937 );
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (13, 51.57168, -3.21861);
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (14, 51.57465, -3.22022 );
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (17, 51.61117, -3.10198 );
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (18, 51.61655, -3.12371 );
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (19, 51.43484, -3.16492 );
+insert into locationCoordinates(locationID, locationCoordsLat, locationCoordsLong) value (20, 51.43547, -3.16789 );
+
+
+
+
+
+# insert into stickerprogress (userID, packID, stickerID) value (1, 1, 1);
+# insert into stickerprogress (userID, packID, stickerID) value (1, 1, 2);
+# insert into stickerprogress (userID, packID, stickerID) value (1, 1, 3);
+# insert into stickerprogress (userID, packID, stickerID) value (1, 1, 5);
+# insert into stickerprogress (userID, packID, stickerID) value (1, 2, 1);
+# insert into stickerprogress (userID, packID, stickerID) value (1, 2, 3);
+
+
+
+#
+delete from townsWithTrails;
+insert into townsWithTrails (townName, townCentreCoordsLat, townCentreCoordsLong, townUppermostCoordsLat, townLowermostCoordsLat, townLeftmostCoordsLong, townRightmostCoordsLong) value ('Caerphilly', '51.57903','-3.22075 ','51.60418','51.55093','-3.25222','-3.17696');
+insert into townsWithTrails (townName, townCentreCoordsLat, townCentreCoordsLong, townUppermostCoordsLat, townLowermostCoordsLat, townLeftmostCoordsLong, townRightmostCoordsLong) value ('Risca','51.61195','-3.09648','51.63039','51.59175','-3.12129','-3.06438');
+insert into townsWithTrails (townName, townCentreCoordsLat, townCentreCoordsLong, townUppermostCoordsLat, townLowermostCoordsLat, townLeftmostCoordsLong, townRightmostCoordsLong) value ('Penarth','51.43893','-3.17354','51.44878','51.41233','-3.20271','-3.16005');
\ No newline at end of file
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index 22d745ed..83a9327f 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -2,14 +2,12 @@ drop table if exists trails;
 create table if not exists trails
 (
     trailID bigint auto_increment primary key,
-    name varchar(128)
+    name varchar(128),
+    tru boolean
 )   engine=InnoDB;
 
-drop table if exists towns;
-
-
+drop table if exists locationCoordinates;
 drop table if exists locations;
-
 create table if not exists locations
 (
     locationID bigint auto_increment primary key,
@@ -17,55 +15,83 @@ create table if not exists locations
     locationEmail varchar(128),
     locationDescription longtext,
     locationPlace varchar(255),
-    locationTrailID varchar(128)
+    locationTrailID varchar(128),
+    locationApproved boolean
 )   engine=InnoDB;
 
+
 drop table if exists users;
+drop table if exists stickers;
+drop table if exists packs;
+drop table if exists stickerProgress;
+
 create table if not exists users
 (
-    userID bigint auto_increment primary key,
+    id bigint auto_increment primary key,
     email varchar(128),
-    name varchar(128),
-    dragonProgress int
+    name varchar(30),
+    dragonProgress int,
+    dragonsLandmarkIDs longtext
 ) engine=InnoDB;
 
-drop table if exists badges;
-create table if not exists badges
+
+create table if not exists packs
 (
-    badgeID bigint auto_increment primary key,
-    name varchar(128),
-    description varchar(128),
-    difficulty bigint
+    id bigint auto_increment primary key,
+    name varchar(20),
+    description text
 ) 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
+    id bigint auto_increment primary key,
+    packID bigint,
+    FOREIGN KEY (packID) REFERENCES packs(id)
+        ON DELETE CASCADE
+        ON UPDATE RESTRICT,
+    stickerID bigint, /*STICKER ID NUMBER WITHIN ITS OWN PACK*/
+    name varchar(30),
+    description text,
+    rarity tinyint
+
 ) engine=InnoDB;
 
-drop table if exists badgeProgress;
-create table if not exists badgeProgress
+create table if not exists stickerProgress
 (
+    id bigint auto_increment primary key,
     userID bigint,
-    badgeID bigint,
-    progress int /*0-100*/
+    stickerID bigint
 ) engine=InnoDB;
 
-create table if not exists stickerProgress
+
+
+
+
+create table if not exists locationCoordinates
 (
-    userID int,
-    stickerID int,
-    hasSticker boolean /*Has sticker or not*/
-) engine=InnoDB;
+    locationCoordID bigint auto_increment primary key,
+    locationID bigint,
+    Foreign Key (locationID) REFERENCES locations(locationID)
+        ON DELETE CASCADE
+        ON UPDATE RESTRICT,
+    locationCoordsLat DECIMAL(8,6),
+    locationCoordsLong DECIMAL(8,6)
+
+
+)engine=InnoDB;
 
-create table if not exists towns
+
+drop table if exists townsWithTrails;
+create table if not exists townsWithTrails
 (
     townID bigint auto_increment primary key,
-    townName varchar(255) ,
-    townTrailNumber tinyint
+    townName varchar(128),
+    townCentreCoordsLat varchar(128),
+    townCentreCoordsLong varchar(128),
+    townUppermostCoordsLat varchar(128),
+    townLowermostCoordsLat varchar(128),
+    townLeftmostCoordsLong varchar(128),
+    townRightmostCoordsLong varchar(128)
+
+)engine=InnoDB;
 
-) engine=InnoDB;
diff --git a/src/test/java/Test3.java b/src/test/java/Test3.java
index d80d3658..9c8f681f 100644
--- a/src/test/java/Test3.java
+++ b/src/test/java/Test3.java
@@ -1,27 +1,27 @@
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
-
-import javax.sql.DataSource;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-
-public class Test3 {
-
-    @Test
-//	test2
-    public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount1() {
-        DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
-                .addScript("classpath:schema.sql")
-                .addScript("classpath:data.sql")
-                .build();
-//        .addScript("classpath:jdbc/test-data.sql")
-
-//        LocationRepositoryJDBC employeeDAO = new LocationRepositoryJDBC();
-//        employeeDAO.setDataSource(dataSource);
-
-//        assertEquals(4, employeeDAO.getCountOfEmployees());}
-    assertEquals(4, 4);}
-}
+//import org.junit.jupiter.api.Test;
+//import org.springframework.boot.test.context.SpringBootTest;
+//import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
+//import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
+//
+//import javax.sql.DataSource;
+//
+//import static org.junit.jupiter.api.Assertions.assertEquals;
+//
+//
+//public class Test3 {
+//
+//    @Test
+////	test2
+//    public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount1() {
+//        DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
+//                .addScript("classpath:schema.sql")
+//                .addScript("classpath:data.sql")
+//                .build();
+////        .addScript("classpath:jdbc/test-data.sql")
+//
+////        LocationRepositoryJDBC employeeDAO = new LocationRepositoryJDBC();
+////        employeeDAO.setDataSource(dataSource);
+//
+////        assertEquals(4, employeeDAO.getCountOfEmployees());}
+//    assertEquals(4, 4);}
+//}
-- 
GitLab