package be.jeffcheasey88.peeratcode.routes; import java.util.regex.Matcher; import org.json.simple.JSONObject; import be.jeffcheasey88.peeratcode.framework.HttpReader; import be.jeffcheasey88.peeratcode.framework.HttpUtil; import be.jeffcheasey88.peeratcode.framework.HttpWriter; import be.jeffcheasey88.peeratcode.framework.Response; import be.jeffcheasey88.peeratcode.framework.Route; import be.jeffcheasey88.peeratcode.framework.User; import be.jeffcheasey88.peeratcode.model.Puzzle; import be.jeffcheasey88.peeratcode.repository.DatabaseRepository; public class PuzzleElement implements Response { private final DatabaseRepository databaseRepo; public PuzzleElement(DatabaseRepository databaseRepo) { this.databaseRepo = databaseRepo; } @Route(path = "^\\/puzzle\\/([0-9]+)$", needLogin = true) public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { Puzzle puzzle = databaseRepo.getPuzzle(extractId(matcher)); if (puzzle != null) { JSONObject puzzleJSON = new JSONObject(); puzzleJSON.put("id", puzzle.getId()); puzzleJSON.put("name", puzzle.getName()); puzzleJSON.put("content", puzzle.getContent()); puzzleJSON.put("scoreMax", puzzle.getScoreMax()); if(puzzle.getTags() != null) puzzleJSON.put("tags", puzzle.getJsonTags()); int score = this.databaseRepo.getScore(user.getId(), puzzle.getId()); if(score >= 0) puzzleJSON.put("score", score); if(puzzle.getDepend() > 0) puzzleJSON.put("depend", puzzle.getDepend()); HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *", "Content-Type: application/json"); writer.write(puzzleJSON.toJSONString()); } else { HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *"); } } private int extractId(Matcher matcher) { return Integer.parseInt(matcher.group(1)); } }