diff --git a/src/dev/peerat/backend/Main.java b/src/dev/peerat/backend/Main.java index 47cff50..e04b4b3 100644 --- a/src/dev/peerat/backend/Main.java +++ b/src/dev/peerat/backend/Main.java @@ -31,6 +31,11 @@ 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.admins.puzzle.GetPuzzles; +import dev.peerat.backend.routes.admins.tag.AddTag; +import dev.peerat.backend.routes.admins.tag.DeleteTag; +import dev.peerat.backend.routes.admins.tag.EditTag; +import dev.peerat.backend.routes.admins.tag.GetTags; import dev.peerat.backend.routes.groups.GroupCreate; import dev.peerat.backend.routes.groups.GroupJoin; import dev.peerat.backend.routes.groups.GroupList; @@ -171,6 +176,12 @@ public class Main{ register(new DeletePuzzle(repo)). register(new EditPuzzle(repo)). register(new GetPuzzle(repo)). + register(new GetPuzzles(repo)). + + register(new AddTag(repo)). + register(new DeleteTag(repo)). + register(new EditTag(repo)). + register(new GetTags(repo)). register(new ChapterElement(repo)). register(new ChapterList(repo)). diff --git a/src/dev/peerat/backend/model/Tag.java b/src/dev/peerat/backend/model/Tag.java new file mode 100644 index 0000000..f49313f --- /dev/null +++ b/src/dev/peerat/backend/model/Tag.java @@ -0,0 +1,30 @@ +package dev.peerat.backend.model; + +import dev.peerat.framework.utils.json.JsonMap; + +public class Tag{ + + private int id; + private String name; + + public Tag(int id, String name){ + this.id = id; + this.name = name; + } + + public int getId(){ + return this.id; + } + + public String getName(){ + return this.name; + } + + public JsonMap toJson(){ + JsonMap result = new JsonMap(); + result.set("id", id); + result.set("name", name); + return result; + } + +} diff --git a/src/dev/peerat/backend/repository/DatabaseQuery.java b/src/dev/peerat/backend/repository/DatabaseQuery.java index 8b3d096..166982a 100644 --- a/src/dev/peerat/backend/repository/DatabaseQuery.java +++ b/src/dev/peerat/backend/repository/DatabaseQuery.java @@ -99,8 +99,14 @@ public enum DatabaseQuery { 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 * FROM puzzles WHERE id_puzzle = ?"), - + GET_PUZZLE("SELECT * 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 p.id_puzzle = ?"), + GET_PUZZLES("SELECT * 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"), + + ADD_TAG("INSERT INTO tags (name) VALUES (?)"), + DELETE_TAG("DELETE FROM tags WHERE id_tag = ?"), + EDIT_TAG("UPDATE tags SET name = ? WHERE id_tag = ?"), + GET_TAGS("SELECT * FROM tags"), + //TRIGGER FIRST_TRY("CREATE OR REPLACE TRIGGER FirstTry\r\n" + "AFTER INSERT\r\n" diff --git a/src/dev/peerat/backend/repository/DatabaseRepository.java b/src/dev/peerat/backend/repository/DatabaseRepository.java index 077ba42..efd3aac 100644 --- a/src/dev/peerat/backend/repository/DatabaseRepository.java +++ b/src/dev/peerat/backend/repository/DatabaseRepository.java @@ -22,6 +22,7 @@ import dev.peerat.backend.model.Group; import dev.peerat.backend.model.PeerAtUser; import dev.peerat.backend.model.Player; import dev.peerat.backend.model.Puzzle; +import dev.peerat.backend.model.Tag; public class DatabaseRepository { @@ -727,6 +728,38 @@ public class DatabaseRepository { return null; } + public List getAdminPuzzles(){ + try { + ensureConnection(); + PreparedStatement chapterStmt = DatabaseQuery.GET_PUZZLES.prepare(this.con); + ResultSet chapterResult = chapterStmt.executeQuery(); + List list = new ArrayList<>(); + while(chapterResult.next()){ + list.add(makePuzzle(chapterResult)); + } + return list; + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public List getAdminTags(){ + try { + ensureConnection(); + PreparedStatement chapterStmt = DatabaseQuery.GET_TAGS.prepare(this.con); + ResultSet chapterResult = chapterStmt.executeQuery(); + List list = new ArrayList<>(); + while(chapterResult.next()){ + list.add(new Tag(chapterResult.getInt("id_tag"), chapterResult.getString("name"))); + } + return list; + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + public boolean adminAddChapter(Chapter chapter) throws SQLException { ensureConnection(); PreparedStatement statement = DatabaseQuery.ADD_CHAPTER.prepare(this.con); @@ -748,6 +781,13 @@ public class DatabaseRepository { return (statement.executeUpdate() >= 0); } + public boolean adminAddTag(String name) throws SQLException { + ensureConnection(); + PreparedStatement statement = DatabaseQuery.ADD_TAG.prepare(this.con); + statement.setString(1, name); + return (statement.executeUpdate() >= 0); + } + public boolean adminUpdateChapter(int id, Chapter chapter) throws SQLException { ensureConnection(); PreparedStatement statement = DatabaseQuery.EDIT_CHAPTER.prepare(this.con); @@ -771,6 +811,14 @@ public class DatabaseRepository { return (statement.executeUpdate() >= 0); } + public boolean adminUpdateTag(Tag tag) throws SQLException { + ensureConnection(); + PreparedStatement statement = DatabaseQuery.EDIT_TAG.prepare(this.con); + statement.setString(1, tag.getName()); + statement.setInt(2, tag.getId()); + return (statement.executeUpdate() >= 0); + } + public boolean adminDeleteChapter(int id) throws SQLException { ensureConnection(); PreparedStatement statement = DatabaseQuery.DELETE_CHAPTER.prepare(this.con); @@ -784,4 +832,11 @@ public class DatabaseRepository { statement.setInt(1, id); return (statement.executeUpdate() >= 0); } + + public boolean adminDeleteTag(int id) throws SQLException { + ensureConnection(); + PreparedStatement statement = DatabaseQuery.DELETE_TAG.prepare(this.con); + statement.setInt(1, id); + return (statement.executeUpdate() >= 0); + } } \ No newline at end of file diff --git a/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzles.java b/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzles.java new file mode 100644 index 0000000..e3d1059 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzles.java @@ -0,0 +1,24 @@ +package dev.peerat.backend.routes.admins.puzzle; + +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 GetPuzzles implements Response{ + + private DatabaseRepository repo; + + public GetPuzzles(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/puzzles/$", needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + } + +} diff --git a/src/dev/peerat/backend/routes/admins/tag/AddTag.java b/src/dev/peerat/backend/routes/admins/tag/AddTag.java new file mode 100644 index 0000000..8df16dd --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/tag/AddTag.java @@ -0,0 +1,33 @@ +package dev.peerat.backend.routes.admins.tag; + +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 AddTag implements Response{ + + private DatabaseRepository repo; + + public AddTag(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/tag/$", type = POST, needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + if(repo.adminAddTag(json.get("name"))){ + context.response(200); + }else{ + context.response(501); + } + } + +} diff --git a/src/dev/peerat/backend/routes/admins/tag/DeleteTag.java b/src/dev/peerat/backend/routes/admins/tag/DeleteTag.java new file mode 100644 index 0000000..84d92a0 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/tag/DeleteTag.java @@ -0,0 +1,31 @@ +package dev.peerat.backend.routes.admins.tag; + +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 DeleteTag implements Response{ + + private DatabaseRepository repo; + + public DeleteTag(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/tag/(\\d+)$", type = DELETE, needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + if(this.repo.adminDeleteTag(Integer.parseInt(matcher.group(1)))){ + context.response(200); + }else{ + context.response(501); + } + } + +} diff --git a/src/dev/peerat/backend/routes/admins/tag/EditTag.java b/src/dev/peerat/backend/routes/admins/tag/EditTag.java new file mode 100644 index 0000000..08c265e --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/tag/EditTag.java @@ -0,0 +1,34 @@ +package dev.peerat.backend.routes.admins.tag; + +import static dev.peerat.framework.RequestType.PUT; + +import java.util.regex.Matcher; + +import dev.peerat.backend.model.Tag; +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 EditTag implements Response{ + + private DatabaseRepository repo; + + public EditTag(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/tag/(\\d+)$", type = PUT, needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + if(repo.adminUpdateTag(new Tag(Integer.parseInt(matcher.group(1)), json.get("name")))){ + context.response(200); + }else{ + context.response(501); + } + } + +} diff --git a/src/dev/peerat/backend/routes/admins/tag/GetTags.java b/src/dev/peerat/backend/routes/admins/tag/GetTags.java new file mode 100644 index 0000000..aa14b43 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/tag/GetTags.java @@ -0,0 +1,33 @@ +package dev.peerat.backend.routes.admins.tag; + +import java.util.List; +import java.util.regex.Matcher; + +import dev.peerat.backend.model.Tag; +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.JsonArray; + +public class GetTags implements Response{ + + private DatabaseRepository repo; + + public GetTags(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/tag/$", needLogin = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + List list = repo.getAdminTags(); + JsonArray json = new JsonArray(); + for(Tag tag : list) json.add(tag.toJson()); + context.response(200); + writer.write(json.toString()); + writer.flush(); + } + +}