Create Group
This commit is contained in:
parent
241c55abe0
commit
9c98ca573a
6 changed files with 63 additions and 5 deletions
|
@ -22,6 +22,7 @@ import be.jeffcheasey88.peeratcode.routes.PuzzleElement;
|
|||
import be.jeffcheasey88.peeratcode.routes.PuzzleResponse;
|
||||
import be.jeffcheasey88.peeratcode.routes.Register;
|
||||
import be.jeffcheasey88.peeratcode.routes.Result;
|
||||
import be.jeffcheasey88.peeratcode.routes.groups.CreateGroup;
|
||||
import be.jeffcheasey88.peeratcode.routes.groups.GroupList;
|
||||
import be.jeffcheasey88.peeratcode.webserver.Client;
|
||||
import be.jeffcheasey88.peeratcode.webserver.HttpReader;
|
||||
|
@ -80,6 +81,7 @@ public class Main {
|
|||
router.register(new BadgeDetails(router.getDataBase()));
|
||||
|
||||
router.register(new GroupList(router.getDataBase()));
|
||||
router.register(new CreateGroup(router.getDataBase()));
|
||||
}
|
||||
|
||||
private static void startWebServer(Configuration config, Router router) throws IOException {
|
||||
|
|
|
@ -7,6 +7,12 @@ public class Group {
|
|||
private int linkToChapter;
|
||||
private int linkToPuzzle;
|
||||
|
||||
public Group(JSONObject json){
|
||||
this.name = (String)json.get("name");
|
||||
this.linkToChapter = ((Number)json.get("chapter")).intValue();
|
||||
this.linkToPuzzle = ((Number)json.get("puzzle")).intValue();
|
||||
}
|
||||
|
||||
public Group(String name, int initChap, int initPuzz) {
|
||||
this.name = name;
|
||||
this.linkToChapter = initChap;
|
||||
|
|
|
@ -11,6 +11,7 @@ public enum DatabaseQuery {
|
|||
PUZZLES_IN_CHAPTER_QUERY("SELECT p.*, GROUP_CONCAT(t.name) AS tags FROM puzzles p LEFT JOIN containsTags ct ON ct.fk_puzzle = p.id_puzzle LEFT JOIN tags t ON t.id_tag = ct.fk_tag WHERE fk_chapter = ? GROUP BY p.id_puzzle"),
|
||||
ALL_CHAPTERS_QUERY("SELECT * FROM chapters WHERE id_chapter > 0"),
|
||||
ALL_GROUPS("SELCT * FROM groups"),
|
||||
ALL_PLAYERS_FOR_LEADERBOARD("select p.*, scores.*, 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 JOIN containsGroups cg ON scores.fk_player = cg.fk_player LEFT JOIN groups g ON cg.fk_group = g.id_group WHERE p.id_player = scores.fk_player ORDER BY g.fk_chapter, g.fk_puzzle"),
|
||||
CHECK_PSEUDO_AVAILABLE_QUERY("SELECT * FROM players WHERE pseudo = ?"),
|
||||
CHECK_EMAIL_AVAILABLE_QUERY("SELECT * FROM players WHERE email = ?"),
|
||||
REGISTER_QUERY("INSERT INTO players (pseudo, email, passwd, firstname, lastname, description, avatar) VALUES (?, ?, ?, ?, ?, ?, ?)"),
|
||||
|
@ -22,10 +23,10 @@ public enum DatabaseQuery {
|
|||
GET_PLAYER_DETAILS("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 JOIN containsGroups cg ON scores.fk_player = cg.fk_player LEFT JOIN groups g ON cg.fk_group = g.id_group WHERE p.id_player = scores.fk_player AND "),
|
||||
GET_PLAYER_DETAILS_BY_ID(GET_PLAYER_DETAILS," p.id_player = ? ORDER BY g.fk_chapter, g.fk_puzzle;"),
|
||||
GET_PLAYER_DETAILS_BY_PSEUDO(GET_PLAYER_DETAILS,"p.pseudo = ? ORDER BY g.fk_chapter, g.fk_puzzle;"),
|
||||
ALL_PLAYERS_FOR_LEADERBOARD("select p.*, scores.*, 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 JOIN containsGroups cg ON scores.fk_player = cg.fk_player LEFT JOIN groups g ON cg.fk_group = g.id_group WHERE p.id_player = scores.fk_player ORDER BY g.fk_chapter, g.fk_puzzle"),
|
||||
GET_BADGE("SELECT * FROM badges WHERE id_badge = ?"),
|
||||
GET_BADGES_OF_PLAYER("SELECT * FROM badges b LEFT JOIN containsBadges cb ON cb.fk_badge = b.id_badge WHERE cb.fk_player = ?"),
|
||||
INSERT_COMPLETION("INSERT INTO completions (fk_puzzle, fk_player, tries, code, fileName, score) values (?, ?, ?, ?, ?, ?)"),
|
||||
INSERT_GROUP("INSERT INTO groups (name, fk_chapter, fk_puzzle) VALUES (?,?,?)"),
|
||||
UPDATE_COMPLETION("UPDATE completions SET tries = ?, filename = ?, score = ? WHERE fk_puzzle = ? AND fk_player = ?");
|
||||
|
||||
private String request;
|
||||
|
|
|
@ -91,10 +91,8 @@ public class DatabaseRepository {
|
|||
// Found on StackOverflow
|
||||
ResultSetMetaData rsmd = rs.getMetaData();
|
||||
int columns = rsmd.getColumnCount();
|
||||
for (int x = 1; x <= columns; x++) {
|
||||
if (columnName.equals(rsmd.getColumnName(x))) {
|
||||
return true;
|
||||
}
|
||||
for(int x = 1; x <= columns; x++){
|
||||
if(columnName.equals(rsmd.getColumnName(x))) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -304,6 +302,7 @@ public class DatabaseRepository {
|
|||
|
||||
public List<Group> getAllGroups() {
|
||||
try {
|
||||
ensureConnection();
|
||||
List<Group> list = new ArrayList<>();
|
||||
PreparedStatement stmt = DatabaseQuery.ALL_GROUPS.prepare(this.con);
|
||||
ResultSet groupResult = stmt.executeQuery();
|
||||
|
@ -455,6 +454,18 @@ public class DatabaseRepository {
|
|||
statement.executeUpdate();
|
||||
}
|
||||
|
||||
public boolean insertGroup(Group group){
|
||||
try {
|
||||
ensureConnection();
|
||||
PreparedStatement statement = DatabaseQuery.INSERT_GROUP.prepare(this.con);
|
||||
statement.setString(1, group.getName());
|
||||
statement.setInt(2, group.getLinkToChapter());
|
||||
statement.setInt(3, group.getLinkToPuzzle());
|
||||
return statement.executeUpdate() >= 0;
|
||||
}catch(Exception e){}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void updateCompletion(Completion completionToUpdate) throws SQLException {
|
||||
// Update completions
|
||||
PreparedStatement statement = DatabaseQuery.UPDATE_COMPLETION.prepare(this.con);
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package be.jeffcheasey88.peeratcode.routes.groups;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import be.jeffcheasey88.peeratcode.model.Group;
|
||||
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
|
||||
import be.jeffcheasey88.peeratcode.webserver.HttpReader;
|
||||
import be.jeffcheasey88.peeratcode.webserver.HttpUtil;
|
||||
import be.jeffcheasey88.peeratcode.webserver.HttpWriter;
|
||||
import be.jeffcheasey88.peeratcode.webserver.Response;
|
||||
import be.jeffcheasey88.peeratcode.webserver.Route;
|
||||
import be.jeffcheasey88.peeratcode.webserver.User;
|
||||
|
||||
public class CreateGroup implements Response{
|
||||
|
||||
private DatabaseRepository repo;
|
||||
|
||||
public CreateGroup(DatabaseRepository repo){
|
||||
this.repo = repo;
|
||||
}
|
||||
|
||||
@Route(path = "^\\/groupCreate$", type = "POST", needLogin = true)
|
||||
@Override
|
||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
||||
HttpUtil.skipHeaders(reader);
|
||||
|
||||
if(this.repo.insertGroup(new Group((JSONObject)HttpUtil.readJson(reader)))){
|
||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
||||
}else{
|
||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -8,6 +8,7 @@ import org.json.simple.JSONObject;
|
|||
import be.jeffcheasey88.peeratcode.model.Group;
|
||||
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
|
||||
import be.jeffcheasey88.peeratcode.webserver.HttpReader;
|
||||
import be.jeffcheasey88.peeratcode.webserver.HttpUtil;
|
||||
import be.jeffcheasey88.peeratcode.webserver.HttpWriter;
|
||||
import be.jeffcheasey88.peeratcode.webserver.Response;
|
||||
import be.jeffcheasey88.peeratcode.webserver.Route;
|
||||
|
@ -24,6 +25,7 @@ public class GroupList implements Response{
|
|||
@Route(path = "^\\/groups$", needLogin = true)
|
||||
@Override
|
||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
||||
JSONArray result = new JSONArray();
|
||||
for(Group group : this.repo.getAllGroups()) result.add(group.toJson());
|
||||
writer.write(result.toJSONString());
|
||||
|
|
Loading…
Add table
Reference in a new issue