package org.ntlab.citrusserver.resources; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.apache.coyote.http11.upgrade.UpgradeServletOutputStream; import org.ntlab.citrusserver.entities.Todo; import org.ntlab.citrusserver.repositories.AccountManager; import org.ntlab.citrusserver.repositories.TodoManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.HashMap; @Path("/accounts") @Component public class TodoRest { private final TodoManager todoManager; private final AccountManager accountManager; @Autowired public TodoRest(TodoManager todoManager, AccountManager accountManager) { this.todoManager = todoManager; this.accountManager = accountManager; } //test用 @Path("/TodoTest") @GET @Produces(MediaType.TEXT_PLAIN) public String testHello() { return "hello"; } //指定された本のtodoをすべて返す //変更↓ @Path("/{account_id}/books/{book_id}/todos") @GET @Produces(MediaType.APPLICATION_JSON) public HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer, Todo>>>> getAllTodos(@PathParam("account_id") String account_id, @PathParam("book_id") Integer book_id, @QueryParam("token") String token) { if (accountManager.checkToken(account_id, token)) { return todoManager.getAllTodos(account_id, book_id); } return null; } //指定された本の指定された年と月のtodoをすべて返す @Path("/{account_id}/books/{book_id}/todos/{year}/{month}") @GET @Produces(MediaType.APPLICATION_JSON) public HashMap<Integer, HashMap<Integer, Todo>> getTodosByMonth(@PathParam("account_id") String account_id, @PathParam("book_id") Integer book_id, @PathParam("year") Integer year, @PathParam("month") Integer month, @QueryParam("token") String token) { if (accountManager.checkToken(account_id, token)) { return todoManager.getTodosByMonth(account_id, book_id, year, month); } return null; } //指定された本の指定された年と月と日のtodoをすべて返す @Path("/{account_id}/books/{book_id}/todos/{year}/{month}/{day}") @GET @Produces(MediaType.APPLICATION_JSON) public HashMap<Integer, Todo> getTodosByDay(@PathParam("account_id") String account_id, @PathParam("book_id") Integer book_id, @PathParam("year") Integer year, @PathParam("month") Integer month, @PathParam("day") Integer day, @QueryParam("token") String token) { if (accountManager.checkToken(account_id, token)) { return todoManager.getTodosByDay(account_id, book_id, year, month, day); } return null; } //本のtodoを年月日とtodo_idを指定してtodoを一つ返す @Path("/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}") @GET @Produces(MediaType.APPLICATION_JSON) public Todo getTodoById(@PathParam("account_id") String account_id, @PathParam("book_id") Integer book_id, @PathParam("year") Integer year, @PathParam("month") Integer month, @PathParam("day") Integer day, @PathParam("todo_id") Integer todo_id, @QueryParam("token") String token) { if (accountManager.checkToken(account_id, token)) { Todo todo = todoManager.getTodoById(account_id, book_id, year, month, day, todo_id); return todo; } return null; } //指定した本と年月日にtodoを新しく追加する @POST @Path("/{account_id}/books/{book_id}/todos/{year}/{month}/{day}") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces(MediaType.APPLICATION_JSON) public Todo createTodo(@PathParam("account_id") String account_id, @PathParam("book_id") Integer book_id, @PathParam("year") Integer year, @PathParam("month") Integer month, @PathParam("day") Integer day, @FormParam("title") String title, @FormParam("token") String token) { if (accountManager.checkToken(account_id, token)) { return todoManager.createTodo(account_id, book_id, year, month, day, title); } return null; } //todoを選んで達成状態を変更する //フォームパラメータでチェック状況 //-1エラー 1達成 @PUT @Path("/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}/check") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public void setCheck(@PathParam("account_id") String account_id, @PathParam("book_id") Integer book_id, @PathParam("year") Integer year, @PathParam("month") Integer month, @PathParam("day") Integer day, @PathParam("todo_id") Integer todo_id, @FormParam("check") boolean check, @FormParam("token") String token) { if (accountManager.checkToken(account_id, token)) { if (todoManager.setCheck(account_id, book_id, year, month, day, todo_id, check) == -1) { var response = Response.status(Response.Status.BAD_REQUEST).entity("変更失敗"); throw new WebApplicationException(response.build()); } }else{ var response = Response.status(Response.Status.FORBIDDEN).entity("認証失敗"); throw new WebApplicationException(response.build()); } } /* //本のtodoを年月日とtodo_idを指定してそのtodoを削除する @DELETE @Path("/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public void deleteTodoById(@PathParam("account_id") String account_id, @PathParam("book_id") Integer book_id, @PathParam("year") Integer year, @PathParam("month") Integer month, @PathParam("day") Integer day, @PathParam("todo_id") Integer todo_id, @QueryParam("token") String token){ if(accountManager.checkToken(account_id,token)==true) { todoManager.deleteTodoById(account_id, book_id, year, month, day, todo_id); } }*/ //本のtodoを年月日とtodo_idを指定してそのtodoを削除する //-1えらー 1達成 @DELETE @Path("/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public void deleteTodoById(@PathParam("account_id") String account_id, @PathParam("book_id") Integer book_id, @PathParam("year") Integer year, @PathParam("month") Integer month, @PathParam("day") Integer day, @PathParam("todo_id") Integer todo_id, @QueryParam("token") String token) { if (accountManager.checkToken(account_id, token)) { if (todoManager.deleteTodoById(account_id, book_id, year, month, day, todo_id) == -1) { var response = Response.status(Response.Status.BAD_REQUEST).entity("消去失敗"); throw new WebApplicationException(response.build()); } }else { var response = Response.status(Response.Status.FORBIDDEN).entity("認証失敗"); throw new WebApplicationException(response.build()); } } }