Newer
Older
CitrusServer / src / main / java / org / ntlab / citrusserver / resources / TodoRest.java
package org.ntlab.citrusserver.resources;

import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import org.apache.coyote.http11.upgrade.UpgradeServletOutputStream;
import org.ntlab.citrusserver.entities.Todo;
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;

    @Autowired
    public TodoRest(TodoManager tm, TodoManager todoManager) {
        this.todoManager = todoManager;
        todoManager = tm;
    }
    //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) {
        return todoManager.getAllTodos(account_id, book_id, token);

    }

    //指定された本の指定された年と月の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) {
        return todoManager.getTodosByMonth(account_id, book_id, year, month,token);
    }

    //指定された本の指定された年と月と日の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) {
        return todoManager.getTodosByDay(account_id, book_id, year, month, day, token);

    }

    //本の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) {
        Todo todo = todoManager.getTodoById(account_id, book_id, year, month, day, todo_id, token);
        return todo;
    }


    //指定した本と年月日に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) {
        return todoManager.createTodo(account_id, book_id, year, month, day, title,token);
    }

    //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){
         todoManager.setCheck(account_id, book_id, year, month, day, todo_id,check,token);
    }

    //本の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){
        todoManager.deleteTodoById(account_id, book_id, year, month, day, todo_id,token);
    }





}