Admin CRUD Tags

This commit is contained in:
jeffcheasey88 2024-03-21 10:27:30 +01:00
parent a7b87bcf12
commit d089ff237a
9 changed files with 259 additions and 2 deletions

View file

@ -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.DeletePuzzle;
import dev.peerat.backend.routes.admins.puzzle.EditPuzzle; import dev.peerat.backend.routes.admins.puzzle.EditPuzzle;
import dev.peerat.backend.routes.admins.puzzle.GetPuzzle; 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.GroupCreate;
import dev.peerat.backend.routes.groups.GroupJoin; import dev.peerat.backend.routes.groups.GroupJoin;
import dev.peerat.backend.routes.groups.GroupList; import dev.peerat.backend.routes.groups.GroupList;
@ -171,6 +176,12 @@ public class Main{
register(new DeletePuzzle(repo)). register(new DeletePuzzle(repo)).
register(new EditPuzzle(repo)). register(new EditPuzzle(repo)).
register(new GetPuzzle(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 ChapterElement(repo)).
register(new ChapterList(repo)). register(new ChapterList(repo)).

View file

@ -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;
}
}

View file

@ -99,7 +99,13 @@ public enum DatabaseQuery {
ADD_PUZZLE("INSERT INTO puzzles (name, content, soluce, verify, score_max, fk_chapter) VALUES (?,?,?,?,?,?)"), ADD_PUZZLE("INSERT INTO puzzles (name, content, soluce, verify, score_max, fk_chapter) VALUES (?,?,?,?,?,?)"),
DELETE_PUZZLE("DELETE FROM puzzles WHERE id_puzzle = ?"), DELETE_PUZZLE("DELETE FROM puzzles WHERE id_puzzle = ?"),
EDIT_PUZZLE("UPDATE puzzles SET name = ?, content = ?, soluce = ?, verify = ?, score_max = ?, fk_chapter = ? 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 //TRIGGER
FIRST_TRY("CREATE OR REPLACE TRIGGER FirstTry\r\n" FIRST_TRY("CREATE OR REPLACE TRIGGER FirstTry\r\n"

View file

@ -22,6 +22,7 @@ import dev.peerat.backend.model.Group;
import dev.peerat.backend.model.PeerAtUser; import dev.peerat.backend.model.PeerAtUser;
import dev.peerat.backend.model.Player; import dev.peerat.backend.model.Player;
import dev.peerat.backend.model.Puzzle; import dev.peerat.backend.model.Puzzle;
import dev.peerat.backend.model.Tag;
public class DatabaseRepository { public class DatabaseRepository {
@ -727,6 +728,38 @@ public class DatabaseRepository {
return null; return null;
} }
public List<Puzzle> getAdminPuzzles(){
try {
ensureConnection();
PreparedStatement chapterStmt = DatabaseQuery.GET_PUZZLES.prepare(this.con);
ResultSet chapterResult = chapterStmt.executeQuery();
List<Puzzle> list = new ArrayList<>();
while(chapterResult.next()){
list.add(makePuzzle(chapterResult));
}
return list;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public List<Tag> getAdminTags(){
try {
ensureConnection();
PreparedStatement chapterStmt = DatabaseQuery.GET_TAGS.prepare(this.con);
ResultSet chapterResult = chapterStmt.executeQuery();
List<Tag> 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 { public boolean adminAddChapter(Chapter chapter) throws SQLException {
ensureConnection(); ensureConnection();
PreparedStatement statement = DatabaseQuery.ADD_CHAPTER.prepare(this.con); PreparedStatement statement = DatabaseQuery.ADD_CHAPTER.prepare(this.con);
@ -748,6 +781,13 @@ public class DatabaseRepository {
return (statement.executeUpdate() >= 0); 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 { public boolean adminUpdateChapter(int id, Chapter chapter) throws SQLException {
ensureConnection(); ensureConnection();
PreparedStatement statement = DatabaseQuery.EDIT_CHAPTER.prepare(this.con); PreparedStatement statement = DatabaseQuery.EDIT_CHAPTER.prepare(this.con);
@ -771,6 +811,14 @@ public class DatabaseRepository {
return (statement.executeUpdate() >= 0); 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 { public boolean adminDeleteChapter(int id) throws SQLException {
ensureConnection(); ensureConnection();
PreparedStatement statement = DatabaseQuery.DELETE_CHAPTER.prepare(this.con); PreparedStatement statement = DatabaseQuery.DELETE_CHAPTER.prepare(this.con);
@ -784,4 +832,11 @@ public class DatabaseRepository {
statement.setInt(1, id); statement.setInt(1, id);
return (statement.executeUpdate() >= 0); 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);
}
} }

View file

@ -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{
}
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}
}

View file

@ -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<Tag> list = repo.getAdminTags();
JsonArray json = new JsonArray();
for(Tag tag : list) json.add(tag.toJson());
context.response(200);
writer.write(json.toString());
writer.flush();
}
}