- package org.ntlab.citrusserver.resources;
-
- import jakarta.ws.rs.*;
- import jakarta.ws.rs.core.MediaType;
- import jakarta.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) == true) {
- 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) == true) {
- 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) == true) {
- 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) == true) {
- 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) == true) {
- return todoManager.createTodo(account_id, book_id, year, month, day, title);
- }
- return null;
- }
-
- //todoを選んで達成状態を変更する
- //フォームパラメータでチェック状況
- @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) == true) {
- todoManager.setCheck(account_id, book_id, year, month, day, todo_id, check);
- }
- }
-
-
- //本の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, token);
- // }
- //}
-
- @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) {
- 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());
- }
- }
- }
-
- }