181 lines
No EOL
4.6 KiB
Java
181 lines
No EOL
4.6 KiB
Java
package dev.peerat.backend.repository;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.SQLException;
|
|
|
|
public enum DatabaseQuery {
|
|
|
|
//TRIGGER
|
|
FIRST_TRY("CREATE OR REPLACE TRIGGER FirstTry\r\n"
|
|
+ "AFTER INSERT\r\n"
|
|
+ " ON completions FOR EACH ROW\r\n"
|
|
+ "BEGIN\r\n"
|
|
+ " DECLARE badge INT;\r\n"
|
|
+ " DECLARE contain INT;\r\n"
|
|
+ " \r\n"
|
|
+ " SELECT id_badge\r\n"
|
|
+ " INTO @badge\r\n"
|
|
+ " FROM badges\r\n"
|
|
+ " WHERE name = 'FirstTry';\r\n"
|
|
+ " \r\n"
|
|
+ " IF @badge is not null THEN\r\n"
|
|
+ " \r\n"
|
|
+ " SELECT count(*)\r\n"
|
|
+ " INTO @contain\r\n"
|
|
+ " FROM containsBadges\r\n"
|
|
+ " WHERE fk_badge = @badge AND fk_player = NEW.fk_player;\r\n"
|
|
+ " \r\n"
|
|
+ " IF (@contain = 0) THEN\r\n"
|
|
+ " INSERT INTO containsBadges(fk_player, fk_badge) VALUES (NEW.fk_player, @badge);\r\n"
|
|
+ " END IF;\r\n"
|
|
+ " END IF;\r\n"
|
|
+ "END;"),
|
|
EventParticipation("CREATE OR REPLACE TRIGGER EventParticipation\r\n"
|
|
+ "AFTER INSERT\r\n"
|
|
+ " ON completions FOR EACH ROW\r\n"
|
|
+ "BEGIN\r\n"
|
|
+ " DECLARE badge INT;\r\n"
|
|
+ " DECLARE endDate datetime;\r\n"
|
|
+ " DECLARE player INT;\r\n"
|
|
+ " DECLARE contain INT;\r\n"
|
|
+ "\r\n"
|
|
+ " SELECT id_badge\r\n"
|
|
+ " INTO badge\r\n"
|
|
+ " FROM badges\r\n"
|
|
+ " WHERE name = 'EventParticipation';\r\n"
|
|
+ "\r\n"
|
|
+ " IF @badge is not null THEN\r\n"
|
|
+ "\r\n"
|
|
+ " SELECT c.end_date, i.fk_player\r\n"
|
|
+ " INTO endDate, player\r\n"
|
|
+ " FROM inserted i\r\n"
|
|
+ " JOIN puzzles p ON i.fk_puzzle = p.id_puzzle\r\n"
|
|
+ " JOIN chapters c on p.fk_chapter = c.id_chapter;\r\n"
|
|
+ "\r\n"
|
|
+ " IF @endDate is not null THEN\r\n"
|
|
+ "\r\n"
|
|
+ " SELECT count(*)\r\n"
|
|
+ " INTO contain\r\n"
|
|
+ " FROM containsBadges\r\n"
|
|
+ " WHERE fk_badge = badge AND fk_player = player;\r\n"
|
|
+ "\r\n"
|
|
+ " IF (@contain = 0) THEN\r\n"
|
|
+ " INSERT INTO containsBadges(fk_player, fk_badge) VALUES (@player, @badge);\r\n"
|
|
+ " END IF;\r\n"
|
|
+ " END IF;\r\n"
|
|
+ " END IF;\r\n"
|
|
+ "END;");
|
|
|
|
private String request;
|
|
|
|
DatabaseQuery(DatabaseQuery parent, String request) {
|
|
this.request = parent.request + request;
|
|
}
|
|
|
|
DatabaseQuery(String request) {
|
|
this.request = request;
|
|
}
|
|
|
|
public PreparedStatement prepare(Connection con) throws SQLException {
|
|
return con.prepareStatement(this.request);
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return this.request;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
*
|
|
|
|
SELECT p.*, scores.score, scores.completions, scores.tries, scores.rank, g.*
|
|
FROM players p,
|
|
(SELECT fk_player, SUM(c.score) AS score,
|
|
COUNT(c.id_completion) AS completions,
|
|
SUM(c.tries) AS tries,
|
|
rank() over(ORDER BY score DESC) AS rank
|
|
FROM completions c GROUP BY c.fk_player)
|
|
AS scores
|
|
LEFT OUTER JOIN containsGroups cg ON scores.fk_player = cg.fk_player
|
|
LEFT OUTER JOIN groups g ON cg.fk_group = g.id_group
|
|
WHERE p.id_player = scores.fk_player AND "),
|
|
|
|
|
|
*
|
|
*/
|
|
|
|
/* TRIGGER PLACE
|
|
*
|
|
|
|
CREATE OR REPLACE TRIGGER FirstTry
|
|
AFTER INSERT
|
|
ON completions FOR EACH ROW
|
|
BEGIN
|
|
DECLARE badge INT;
|
|
DECLARE contain INT;
|
|
|
|
SELECT id_badge
|
|
INTO @badge
|
|
FROM badges
|
|
WHERE name = 'FirstTry';
|
|
|
|
IF @badge is not null THEN
|
|
|
|
SELECT count(*)
|
|
INTO @contain
|
|
FROM containsBadges
|
|
WHERE fk_badge = @badge AND fk_player = NEW.fk_player;
|
|
|
|
IF (@contain = 0) THEN
|
|
|
|
IF (NEW.score >= 0 AND NEW.tries < 2) THEN
|
|
INSERT INTO containsBadges(fk_player, fk_badge) VALUES (NEW.fk_player, @badge);
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
|
|
|
|
|
|
CREATE OR REPLACE TRIGGER EventParticipation
|
|
AFTER INSERT
|
|
ON completions FOR EACH ROW
|
|
BEGIN
|
|
DECLARE badge INT;
|
|
DECLARE endDate datetime;
|
|
DECLARE player INT;
|
|
DECLARE contain INT;
|
|
|
|
SELECT id_badge
|
|
INTO badge
|
|
FROM badges
|
|
WHERE name = 'EventParticipation';
|
|
|
|
IF @badge is not null THEN
|
|
|
|
SELECT c.end_date, i.fk_player
|
|
INTO endDate, player
|
|
FROM inserted i
|
|
JOIN puzzles p ON i.fk_puzzle = p.id_puzzle
|
|
JOIN chapters c on p.fk_chapter = c.id_chapter;
|
|
|
|
IF @endDate is not null THEN
|
|
|
|
SELECT count(*)
|
|
INTO contain
|
|
FROM containsBadges
|
|
WHERE fk_badge = badge AND fk_player = player;
|
|
|
|
IF (@contain = 0) THEN
|
|
INSERT INTO containsBadges(fk_player, fk_badge) VALUES (@player, @badge);
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
|
|
|
|
*
|
|
*/ |