diff --git a/src/dev/peerat/backend/Main.java b/src/dev/peerat/backend/Main.java index 54eab06..c9272e1 100644 --- a/src/dev/peerat/backend/Main.java +++ b/src/dev/peerat/backend/Main.java @@ -23,6 +23,14 @@ import dev.peerat.backend.routes.PuzzleResponse; import dev.peerat.backend.routes.Result; import dev.peerat.backend.routes.Swagger; import dev.peerat.backend.routes.admins.DynamicLogs; +import dev.peerat.backend.routes.admins.chapter.AddChapter; +import dev.peerat.backend.routes.admins.chapter.DeleteChapter; +import dev.peerat.backend.routes.admins.chapter.EditChapter; +import dev.peerat.backend.routes.admins.chapter.GetChapter; +import dev.peerat.backend.routes.admins.puzzle.AddPuzzle; +import dev.peerat.backend.routes.admins.puzzle.DeletePuzzle; +import dev.peerat.backend.routes.admins.puzzle.EditPuzzle; +import dev.peerat.backend.routes.admins.puzzle.GetPuzzle; import dev.peerat.backend.routes.groups.GroupCreate; import dev.peerat.backend.routes.groups.GroupJoin; import dev.peerat.backend.routes.groups.GroupList; @@ -88,7 +96,7 @@ public class Main{ router.addInterceptor(new RouteInterceptor(){ @Override public boolean intercept(Matcher matcher, Context context, HttpReader reader, HttpWriter writer, Method method){ - if(method.getDeclaringClass().getPackage().getName().endsWith("admins")){ + if(method.getDeclaringClass().getPackage().getName().contains(".admins")){ try { Group group = repo.getPlayerGroup(context.getUser().getId(), 1); if(!group.getName().equalsIgnoreCase("Quarter-Master - Battles PAC x CEI")) return false; @@ -144,6 +152,15 @@ public class Main{ register(new ForgotPassword(router, repo, mail)). register(new DynamicLogs(router.getLogger(), repo)). + register(new AddChapter(repo)). + register(new DeleteChapter(repo)). + register(new EditChapter(repo)). + register(new GetChapter(repo)). + + register(new AddPuzzle(repo)). + register(new DeletePuzzle(repo)). + register(new EditPuzzle(repo)). + register(new GetPuzzle(repo)). register(new ChapterElement(repo)). register(new ChapterList(repo)). diff --git a/src/dev/peerat/backend/repository/DatabaseQuery.java b/src/dev/peerat/backend/repository/DatabaseQuery.java index 9448907..7d603b9 100644 --- a/src/dev/peerat/backend/repository/DatabaseQuery.java +++ b/src/dev/peerat/backend/repository/DatabaseQuery.java @@ -89,6 +89,17 @@ public enum DatabaseQuery { // BADGES 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 = ?"), + + //ADMIN + ADD_CHAPTER("INSERT INTO chapters (name, start_date, end_date) VALUES (?,?,?)"), + DELETE_CHAPTER("DELETE FROM chapters WHERE id_chapter = ?"), + EDIT_CHAPTER("UPDATE chapters SET name = ?, start_date = ?, end_date = ? WHERE id_chapter = ?"), + GET_CHAPTER("SELECT name, start_date, end_date FROM chapters WHERE id_chapter = ?"), + + ADD_PUZZLE("INSERT INTO puzzles (name, content, soluce, verify, score_max, fk_chapter) VALUES (?,?,?,?,?,?)"), + DELETE_PUZZLE("DELETE FROM puzzles WHERE id_puzzle = ?"), + EDIT_PUZZLE("UPDATE puzzles SET name = ?, content = ?, soluce = ?, verify = ?, score_max = ?, fk_chapter = ? WHERE id_puzzle = ?"), + GET_PUZZLE("SELECT name, content, soluce, verify, score_max, fk_chapter FROM puzzles WHERE id_puzzle = ?"), //TRIGGER FIRST_TRY("CREATE OR REPLACE TRIGGER FirstTry\r\n" diff --git a/src/dev/peerat/backend/repository/DatabaseRepository.java b/src/dev/peerat/backend/repository/DatabaseRepository.java index 595c980..68b386e 100644 --- a/src/dev/peerat/backend/repository/DatabaseRepository.java +++ b/src/dev/peerat/backend/repository/DatabaseRepository.java @@ -692,4 +692,37 @@ public class DatabaseRepository { statement.setInt(5, user); statement.executeUpdate(); } + + + //ADMIN + public Chapter getAdminChapter(int id){ + try { + ensureConnection(); + PreparedStatement chapterStmt = DatabaseQuery.GET_CHAPTER.prepare(this.con); + chapterStmt.setInt(1, id); + ResultSet chapterResult = chapterStmt.executeQuery(); + if (chapterResult.next()) { + Chapter chapter = makeChapter(chapterResult); + return chapter; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public Puzzle getAdminPuzzle(int id){ + try { + ensureConnection(); + PreparedStatement chapterStmt = DatabaseQuery.GET_PUZZLE.prepare(this.con); + chapterStmt.setInt(1, id); + ResultSet chapterResult = chapterStmt.executeQuery(); + if (chapterResult.next()) { + return makePuzzle(chapterResult); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } } \ No newline at end of file diff --git a/src/dev/peerat/backend/routes/admins/DynamicLogs.java b/src/dev/peerat/backend/routes/admins/DynamicLogs.java index 831f073..3248de9 100644 --- a/src/dev/peerat/backend/routes/admins/DynamicLogs.java +++ b/src/dev/peerat/backend/routes/admins/DynamicLogs.java @@ -41,7 +41,7 @@ public class DynamicLogs implements Response{ json.set("logged", instance.isLogged()); if(instance.isLogged()) json.set("pseudo", repo.getPlayer(instance.getUser().getId()).getPseudo()); json.set("path", instance.getPath()); - json.set("type", instance.getType()); + json.set("type", instance.getType().toString()); json.set("code", instance.getResponseCode()); writer.write(json.toString()); diff --git a/src/dev/peerat/backend/routes/admins/chapter/AddChapter.java b/src/dev/peerat/backend/routes/admins/chapter/AddChapter.java new file mode 100644 index 0000000..0b6f66a --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/chapter/AddChapter.java @@ -0,0 +1,33 @@ +package dev.peerat.backend.routes.admins.chapter; + +import static dev.peerat.framework.RequestType.POST; + +import java.sql.Timestamp; +import java.util.regex.Matcher; + +import dev.peerat.backend.model.Chapter; +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Response; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonMap; + +public class AddChapter implements Response{ + + private DatabaseRepository repo; + + public AddChapter(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/chapter/$", type = POST, needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + + Chapter chapter = new Chapter(-1, json.get("name"), Timestamp.valueOf(json.get("start")), Timestamp.valueOf(json.get("end"))); + + } + +} diff --git a/src/dev/peerat/backend/routes/admins/chapter/DeleteChapter.java b/src/dev/peerat/backend/routes/admins/chapter/DeleteChapter.java new file mode 100644 index 0000000..53ae487 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/chapter/DeleteChapter.java @@ -0,0 +1,27 @@ +package dev.peerat.backend.routes.admins.chapter; + +import static dev.peerat.framework.RequestType.DELETE; + +import java.util.regex.Matcher; + +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Response; +import dev.peerat.framework.Route; + +public class DeleteChapter implements Response{ + + private DatabaseRepository repo; + + public DeleteChapter(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/chapter/(\\d+)$", type = DELETE, needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + int id = Integer.parseInt(matcher.group(1)); + } + +} diff --git a/src/dev/peerat/backend/routes/admins/chapter/EditChapter.java b/src/dev/peerat/backend/routes/admins/chapter/EditChapter.java new file mode 100644 index 0000000..a8069f0 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/chapter/EditChapter.java @@ -0,0 +1,30 @@ +package dev.peerat.backend.routes.admins.chapter; + +import static dev.peerat.framework.RequestType.PUT; + +import java.util.regex.Matcher; + +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Response; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonMap; + +public class EditChapter implements Response{ + + private DatabaseRepository repo; + + public EditChapter(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/chapter/(\\d+)$", type = PUT, needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + + + } + +} diff --git a/src/dev/peerat/backend/routes/admins/chapter/GetChapter.java b/src/dev/peerat/backend/routes/admins/chapter/GetChapter.java new file mode 100644 index 0000000..5f71b3f --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/chapter/GetChapter.java @@ -0,0 +1,34 @@ +package dev.peerat.backend.routes.admins.chapter; + +import java.util.regex.Matcher; + +import dev.peerat.backend.model.Chapter; +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Response; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonMap; + +public class GetChapter implements Response{ + + private DatabaseRepository repo; + + public GetChapter(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/chapter/(\\d+)$", needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + Chapter chapter = this.repo.getAdminChapter(Integer.parseInt(matcher.group(1))); + JsonMap json = new JsonMap(); + json.set("name", chapter.getName()); + json.set("start", chapter.getStartDate()); + json.set("end", chapter.getEndDate()); + + context.response(200); + writer.write(json.toString()+"\n"); + } + +} diff --git a/src/dev/peerat/backend/routes/admins/puzzle/AddPuzzle.java b/src/dev/peerat/backend/routes/admins/puzzle/AddPuzzle.java new file mode 100644 index 0000000..6f1114a --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/puzzle/AddPuzzle.java @@ -0,0 +1,30 @@ +package dev.peerat.backend.routes.admins.puzzle; + +import static dev.peerat.framework.RequestType.POST; + +import java.util.regex.Matcher; + +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Response; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonMap; + +public class AddPuzzle implements Response{ + + private DatabaseRepository repo; + + public AddPuzzle(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/puzzle/$", type = POST, needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + + + } + +} diff --git a/src/dev/peerat/backend/routes/admins/puzzle/DeletePuzzle.java b/src/dev/peerat/backend/routes/admins/puzzle/DeletePuzzle.java new file mode 100644 index 0000000..a2af169 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/puzzle/DeletePuzzle.java @@ -0,0 +1,30 @@ +package dev.peerat.backend.routes.admins.puzzle; + +import static dev.peerat.framework.RequestType.DELETE; + +import java.util.regex.Matcher; + +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Response; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonMap; + +public class DeletePuzzle implements Response{ + + private DatabaseRepository repo; + + public DeletePuzzle(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/puzzle/(\\d+)$", type = DELETE, needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + + + } + +} diff --git a/src/dev/peerat/backend/routes/admins/puzzle/EditPuzzle.java b/src/dev/peerat/backend/routes/admins/puzzle/EditPuzzle.java new file mode 100644 index 0000000..05dc415 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/puzzle/EditPuzzle.java @@ -0,0 +1,30 @@ +package dev.peerat.backend.routes.admins.puzzle; + +import static dev.peerat.framework.RequestType.PUT; + +import java.util.regex.Matcher; + +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Response; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonMap; + +public class EditPuzzle implements Response{ + + private DatabaseRepository repo; + + public EditPuzzle(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/puzzle/(\\d+)$", type = PUT, needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + + + } + +} diff --git a/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzle.java b/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzle.java new file mode 100644 index 0000000..be975d4 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzle.java @@ -0,0 +1,35 @@ +package dev.peerat.backend.routes.admins.puzzle; + +import java.util.regex.Matcher; + +import dev.peerat.backend.model.Puzzle; +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Response; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonMap; + +public class GetPuzzle implements Response{ + + private DatabaseRepository repo; + + public GetPuzzle(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/puzzle/(\\d+)$", needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + Puzzle puzzle = this.repo.getAdminPuzzle(Integer.parseInt(matcher.group(1))); + JsonMap json = new JsonMap(); + json.set("name", puzzle.getName()); + json.set("content", puzzle.getContent()); + json.set("soluce", puzzle.getSoluce()); + json.set("score_max", puzzle.getScoreMax()); + + context.response(200); + writer.write(json.toString()+"\n"); + } + +}