diff --git a/src/main/java/org/ntlab/tampoposerver/resources/ActivitiesResource.java b/src/main/java/org/ntlab/tampoposerver/resources/ActivitiesResource.java index 8edefdb..6ac3037 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/ActivitiesResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/ActivitiesResource.java @@ -1,37 +1,138 @@ package org.ntlab.tampoposerver.resources; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.QueryParam; +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) {