Newer
Older
tampopo-server / src / main / java / org / ntlab / tampoposerver / resources / ActivitiesResource.java
package org.ntlab.tampoposerver.resources;

import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import org.ntlab.tampoposerver.repositories.ActivityRepository;
import org.ntlab.tampoposerver.repositories.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Path("/users")
@Component

public class ActivitiesResource {

    private UserRepository userRepository = null;
    private ActivityRepository activityRepository = null;

    @Autowired
    public ActivitiesResource(UserRepository userRepository, ActivityRepository activityRepository) {
        this.userRepository = userRepository;
        this.activityRepository = activityRepository;
    }

    @Path("/{user-id}/activities")
    @GET
    public String getActivities(@PathParam("user-id") String userId, @QueryParam("filter") String filter) {
        return "Hello World!!";
    }

    @Path("/{user-id}/activities")
    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)//bodyに入力する値がある時
    public Response postActivities(@PathParam("user-id") String userId,
                               @FormParam("token") String token,
                               @FormParam("new-activity") String newActivity) {
        //失敗
        //400(不正なリクエスト)
        if (token == null || token.isEmpty() || newActivity == null || newActivity.isEmpty()) { //トークン or 新アクティビティがnull or 空だったら
            var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト");
            throw new WebApplicationException(response.build());
        }

        //403(未認証&トークンの不一致)
        if (!userRepository.checkToken(userId, token)) { // ユーザーまたはトークンが存在しない はるかと相談済み
            var response = Response.status(Response.Status.FORBIDDEN).entity("認証エラー");
            throw new WebApplicationException(response.build());
        }


        //404(新しいアクティビティのテキストが存在しないとき)
        if (!activityRepository.isValidActivity(newActivity)) { //新しいアクティビティが不正な内容 なっちゃんと相談
            var response = Response.status(Response.Status.NOT_FOUND).entity("アクティビティが存在しません");
            throw new WebApplicationException(response.build());
        }

        /*
        500(予期せぬエラー)
        spring bootが500を返してくれるからコードなし
         */

        //成功
        //200(アクティビティを作成)
        activityRepository.addActivity(); //なっちゃんと相談
        return Response.status(Response.Status.OK).build(); //インスタンス(Response.status(Response.Status.OK))を実際に返すデータとして構築(アプリ側が読めるようにする)→build


    }

    @Path("/{user-id}/activities/{activity-id}")
    @GET
    public String getActivity(@PathParam("user-id") String userId, @PathParam("activity-id") String activityId) {
        return "Hello World!!";
    }

    @Path("/{user-id}/activities/{activity-id}")
    @DELETE
    public void deleteActivity(@PathParam("user-id") String userId,
                               @PathParam("activity-id") String activityId,
                               @QueryParam("token") String token) {
        if (userRepository.checkToken(accountId, token)) {
            userRepository.deleteAccount(accountId, token, password);
            return;
        }
        //失敗
        //400(不正なリクエスト)
        if (token == null || token.isEmpty() || newActivity == null || newActivity.isEmpty()) { //トークン or 新アクティビティがnull or 空だったら
            var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト");
            throw new WebApplicationException(response.build());
        }

        //401(未認証)
        if (!userRepository.exists(userId)) { //対象のユーザーが存在しない(認証されていない) はるかが作成したメソッドを使わないとだめだから相談
            var response = Response.status(Response.Status.UNAUTHORIZED).entity("未認証");
            throw new WebApplicationException(response.build());
        }

        //403(トークンの不一致)
        if (!userRepository.checkToken(userId, token)) { //トークンの内容が間違っている(アクセス権限がない) はるかと相談
            var response = Response.status(Response.Status.FORBIDDEN).entity("トークンの不一致");
            throw new WebApplicationException(response.build());
        }


        //404(新しいアクティビティのテキストが存在しないとき)
        if (!activityRepository.isValidActivity(newActivity)) { //新しいアクティビティが不正な内容 なっちゃんと相談
            var response = Response.status(Response.Status.NOT_FOUND).entity("アクティビティが存在しません");
            throw new WebApplicationException(response.build());
        }

        /*
        500(予期せぬエラー)
        spring bootが500を返してくれるからコードなし
         */

        //成功
        //200(アクティビティを作成)
        activityRepository.addActivity(); //なっちゃんと相談
        return Response.status(Response.Status.OK).build(); //インスタンス(Response.status(Response.Status.OK))を実際に返すデータとして構築(アプリ側が読めるようにする)→build

    }


    @Path("/{user-id}/activities/{activity-id}/text")
    @GET
    public String getActivityText(@PathParam("user-id") String userId, @PathParam("activity-id") String activityId) {
        return "Hello World!!";
    }

    @Path("/{user-id}/activities/{activity-id}/updated-time")
    @GET
    public String getActivityUpdatedTime(@PathParam("user-id") String userId, @PathParam("activity-id") String activityId) {
        return "Hello World!!";
    }

    @Path("/{user-id}/activities/{activity-id}/last-updated-time")
    @GET
    public String getActivityLastUpdatedTime(@PathParam("user-id") String userId) {
        return "Hello World!!";
    }
}