DROP DATABASE IF EXISTS `territory-walker`; CREATE DATABASE `territory-walker`; USE `territory-walker`; DROP PROCEDURE IF EXISTS `deletePolygon`; DROP PROCEDURE IF EXISTS `insertPolygon`; DROP PROCEDURE IF EXISTS `selectNonUserPolygon`; DROP PROCEDURE IF EXISTS `selectUserPolygon`; DROP PROCEDURE IF EXISTS `getPolygonPoints`; DROP TABLE IF EXISTS `polygonPoints`; DROP TABLE IF EXISTS `polygonArea`; DROP TABLE IF EXISTS `userJoinedGames`; DROP TABLE IF EXISTS `gameInstances`; DROP TABLE IF EXISTS `users`; CREATE TABLE `gameInstances` ( gameID VARCHAR(6) UNIQUE NOT NULL, PRIMARY KEY (gameID) ); CREATE TABLE `users` ( userID VARCHAR(40) UNIQUE NOT NULL, nickname VARCHAR (40) NOT NULL, PRIMARY KEY (userID) ); CREATE TABLE `userJoinedGames` ( userID VARCHAR(40) NOT NULL, gameID VARCHAR(6) NOT NULL, colour VARCHAR(6) NOT NULL, FOREIGN KEY (userID) REFERENCES users(userID), FOREIGN KEY (gameID) REFERENCES gameInstances(gameID), PRIMARY KEY (userID, gameID) ); CREATE TABLE `polygonArea` ( gameID VARCHAR(6) NOT NULL, polygonID VARCHAR(36) UNIQUE NOT NULL, userID VARCHAR(40) NOT NULL, area DOUBLE(30,4) NOT NULL, PRIMARY KEY (polygonID), FOREIGN KEY (gameID) REFERENCES gameInstances(gameID), FOREIGN KEY (userID) REFERENCES users(userID) ); CREATE TABLE `polygonPoints` ( polygonID VARCHAR(36) NOT NULL, lat DOUBLE(11,8) NOT NULL, lng DOUBLE(11,8) NOT NULL, FOREIGN KEY (polygonID) REFERENCES polygonArea(polygonID) ); DELIMITER // CREATE PROCEDURE getPolygonPoints (IN id VARCHAR(6)) BEGIN SELECT * FROM `polygonPoints` JOIN `polygonArea` ON `polygonArea`.polygonID = polygonPoints.polygonID JOIN (SELECT * FROM `userJoinedGames` WHERE gameID = id) AS userColour ON `polygonArea`.userID = userColour.UserID WHERE polygonArea.gameID = id; END // DELIMITER ; DELIMITER // CREATE PROCEDURE selectUserPolygon (IN gID VARCHAR(6), IN usID VARCHAR(40)) BEGIN SELECT * FROM `polygonPoints` JOIN `polygonArea` ON `polygonArea`.polygonID = polygonPoints.polygonID JOIN (SELECT * FROM `userJoinedGames` WHERE gameID = gID) AS userColour ON `polygonArea`.userID = userColour.UserID WHERE polygonArea.gameID = gID AND polygonArea.userID = usID; END // DELIMITER ; DELIMITER // CREATE PROCEDURE selectNonUserPolygon (IN gID VARCHAR(6), IN usID VARCHAR(40)) BEGIN SELECT * FROM `polygonPoints` JOIN `polygonArea` ON `polygonArea`.polygonID = polygonPoints.polygonID JOIN (SELECT * FROM `userJoinedGames` WHERE gameID = gID) AS userColour ON `polygonArea`.userID = userColour.UserID WHERE polygonArea.gameID = gID AND polygonArea.userID != usID; END // DELIMITER ; DELIMITER // CREATE PROCEDURE insertPolygon (IN gID VARCHAR(6), IN usID VARCHAR(40), IN a DOUBLE(30,4)) BEGIN DECLARE lastid VARCHAR(36) DEFAULT UUID(); INSERT INTO `polygonArea` (gameID, polygonID, userID, area) VALUES (gID, lastid, usID, a); SELECT * FROM `polygonArea` JOIN userJoinedGames ON userJoinedGames.userID = polygonArea.userID AND userJoinedGames.gameID = polygonArea.gameID WHERE polygonID = lastid; END // DELIMITER ; DELIMITER // CREATE PROCEDURE deletePolygon (IN id VARCHAR(36)) BEGIN DELETE FROM `polygonPoints` WHERE polygonID = id; DELETE FROM `polygonArea` WHERE polygonID = id; END // DELIMITER ; INSERT INTO `gameInstances` (gameID) VALUES ("U39FME"); INSERT INTO `users` (userID, nickname) VALUES ("Sam Bates", "Lesmaux"); INSERT INTO `users` (userID, nickname) VALUES ("Fan-Wu Yang", "Umbra Sheep"); INSERT INTO `userJoinedGames` (userID, gameID, colour) VALUES ("Sam Bates", "U39FME", "0000FF"); INSERT INTO `userJoinedGames` (userID, gameID, colour) VALUES ("Fan-Wu Yang", "U39FME", "00FF00"); -- INSERT INTO `polygonArea` (gameID, polygonID, userID, area) VALUES -- ("samdum", "someuniqueid", "samded", 100000.1); -- INSERT INTO `polygonPoints` (polygonID, lat, lng) VALUES -- ("someuniqueid", -43.5623, 172.5655), -- ("someuniqueid", -43.5623, 172.5650), -- ("someuniqueid", -43.5628, 172.5650), -- ("someuniqueid", -43.5628, 172.5655), -- ("someuniqueid", -43.5623, 172.5655); -- TODO CREATE PROCEDURE FOR GENERATING GAME ID -- concat(substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1), -- substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1), -- substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1), -- substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1), -- substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1), -- substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', rand()*36+1, 1))