You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.6 KiB
141 lines
4.6 KiB
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)) |