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.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)).

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 (?,?,?,?,?,?)"),
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"

View file

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

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