diff --git a/src/main/java/org/ntlab/acanthus_server/entities/Work.java b/src/main/java/org/ntlab/acanthus_server/entities/Work.java index 0cbcd78..4b98a17 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/Work.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/Work.java @@ -1,13 +1,24 @@ package org.ntlab.acanthus_server.entities; - +//----------------------------------------------------------------- +// public class Work { int status = 0; Animation animation = null; + //----------------------------------------------------------------- + public Work(){} + public Work(Animation animation){ + this.animation = animation; + } + + //----------------------------------------------------------------- + // getter public Animation getAnimation(){ return this.animation; } + //----------------------------------------------------------------- + // setter public void setAnimation(Animation anime) { this.animation = anime; } public void setInvites(Animation animation){ diff --git a/src/main/java/org/ntlab/acanthus_server/resources/accounts/InvitedRest.java b/src/main/java/org/ntlab/acanthus_server/resources/accounts/InvitedRest.java index 4a2d193..20ba4b6 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/accounts/InvitedRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/accounts/InvitedRest.java @@ -4,7 +4,9 @@ import org.ntlab.acanthus_server.models.Accounts; import org.ntlab.acanthus_server.models.Gallery; import org.springframework.stereotype.Component; + import javax.ws.rs.*; +import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.Collection; @@ -16,50 +18,48 @@ private Gallery gallery = Gallery.getInstance(); /** - *accountの中に指定されたaidの作品が入っているかをtrue,falseでかえす - *トークン認証 - * + * accountの中に指定されたaidの作品が入っているかをtrue,falseでかえす + * トークン認証 */ @Path("/{uid}/invited") @GET - public boolean checkAccountInvited(@PathParam("uid") int ownerUid, @QueryParam("aid") int aid){ + public boolean checkAccountInvited(@PathParam("uid") int ownerUid, @QueryParam("aid") int aid) { var account = accounts.getAccountByUid(ownerUid); - if(account != null){ - //招待されているならtrue,されていないならfalse - var accountInvitedMap = account.getInvitedMap(); - - if(accountInvitedMap.get(aid) != null){ - return true; - }else{ - return false; - } - - }else{ - //ユーザーIDが間違っている時のレスポンス - throw new WebApplicationException(400); - + if (account == null) { + var response = Response.status(401).entity("アカウントが存在しません."); + throw new WebApplicationException(response.build()); } + + //招待されているならtrue,されていないならfalse + var accountInvitedMap = account.getInvitedMap().get(aid); + if(accountInvitedMap == null) { + var response = Response.status(401).entity("どこにも招待されていません."); + throw new WebApplicationException(response.build()); + } + + if(accountInvitedMap.isInviting()) return true; + else return false; } @Path("/{uid}/invited") @GET - public Collection getAccountInvited(@PathParam("uid") int ownerUid, @QueryParam("token") String token){ + public Collection getAccountInvited(@PathParam("uid") int ownerUid, @QueryParam("token") String token) { var account = accounts.getAccountByUid(ownerUid); //トークン認証 - if(account != null && account.getToken().equals(token)){ + if (account != null && account.getToken().equals(token)) { var accountInvitedMap = account.getInvitedMap(); ArrayList accountInvited = new ArrayList<>(); - for(int key: accountInvitedMap.keySet()){ + for (int key : accountInvitedMap.keySet()) { accountInvited.add(key); } return accountInvited; - }else{ + } else { //トークン認証失敗のレスポンス throw new WebApplicationException(400); @@ -71,31 +71,31 @@ */ @Path("/{uid}/invited") @PUT - public void addAccountInvited(@PathParam("uid") int invitedUid, @FormParam("ownerUid") int ownerUid, @FormParam("ownerToken") String ownerToken, @FormParam("aid") int aid){ + public void addAccountInvited(@PathParam("uid") int invitedUid, @FormParam("ownerUid") int ownerUid, @FormParam("ownerToken") String ownerToken, @FormParam("aid") int aid) { var invitedAccount = accounts.getAccountByUid(invitedUid); var ownerAccount = accounts.getAccountByUid(ownerUid); var invitedAnimation = gallery.getAnimationByAid(aid); - if(ownerAccount != null && ownerAccount.getToken().equals(ownerToken)){ + if (ownerAccount != null && ownerAccount.getToken().equals(ownerToken)) { var accountInvitedMap = invitedAccount.getInvitedMap(); - if(this.checkAccountInvited(invitedUid, aid)){ + if (this.checkAccountInvited(invitedUid, aid)) { //すでに招待されている時のレスポンス throw new WebApplicationException(400); - }else{ + } else { //招待された作品の招待者の中に自分が含まれているか確認 - if(invitedAnimation.searchAnimationInvites(invitedAccount) != null){ + if (invitedAnimation.searchAnimationInvites(invitedAccount) != null) { //Workクラスのstateを1に変更 accountInvitedMap.get(aid).setInvites(invitedAnimation); - }else{ + } else { throw new WebApplicationException(400); } } - }else{ + } else { //ユーザーID、トークンが間違っている時のレスポンス throw new WebApplicationException(400); @@ -110,23 +110,23 @@ */ @Path("/{uid}/invited") @DELETE - public void removeAccountInvited(@PathParam("uid") int invitedUid, @FormParam("invitedToken") String invitedToken, @FormParam("aid") int aid){ + public void removeAccountInvited(@PathParam("uid") int invitedUid, @FormParam("invitedToken") String invitedToken, @FormParam("aid") int aid) { var invitedAccount = accounts.getAccountByUid(invitedUid); var animation = gallery.getAnimationByAid(aid); - if(invitedAccount != null && invitedAccount.getToken().equals(invitedToken)){ - if(invitedAccount.getInvitedMap().get(aid) != null && animation.getInvites().contains(invitedAccount)) { + if (invitedAccount != null && invitedAccount.getToken().equals(invitedToken)) { + if (invitedAccount.getInvitedMap().get(aid) != null && animation.getInvites().contains(invitedAccount)) { //accountのworkHashMapから削除 invitedAccount.getWorkHashMap().remove(aid); //animationのinvitesから削除 animation.removeAnimationInvites(invitedAccount); - }else{ + } else { //削除しようとしているaidがinvitedHashMapに含まれていない throw new WebApplicationException(400); } - }else { + } else { //token認証失敗 throw new WebApplicationException(400); diff --git a/src/main/java/org/ntlab/acanthus_server/resources/gallery/InvitesRest.java b/src/main/java/org/ntlab/acanthus_server/resources/gallery/InvitesRest.java index 2ef3b6a..6109de2 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/gallery/InvitesRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/gallery/InvitesRest.java @@ -3,6 +3,7 @@ import org.ntlab.acanthus_server.entities.Account; import org.ntlab.acanthus_server.entities.Animation; import org.ntlab.acanthus_server.entities.Editor; +import org.ntlab.acanthus_server.entities.Work; import org.ntlab.acanthus_server.models.Accounts; import org.ntlab.acanthus_server.models.Gallery; import org.springframework.stereotype.Component; @@ -81,7 +82,7 @@ Account invitedAccount = accounts.getAccountByUid(Integer.parseInt(invitedUid)); Account owner = animation.getOwner(); - //重複するユーザーのチェック + //既に参加しているかのユーザーのチェック for (var editor : animation.getEditors()) { if (editor.getUid() == Integer.parseInt(invitedUid)) { var response = Response.status(401).entity("既にユーザーが参加しています."); @@ -89,13 +90,24 @@ } } + //既に招待されているかのチェック + for (var invite : invitedAccount.getInvitedMap().values()) { + if(invite.isInviting()){ + var response = Response.status(401).entity("既にユーザーを招待しています."); + throw new WebApplicationException(response.build()); + } + } + if (owner != null && owner.getToken().equals(ownerToken)) { animation.addAccountToAnimationInvites(invitedAccount); //↓Workのstatusを招待状態にする処理 - Account account = accounts.getAccountByUid(Integer.parseInt(invitedUid)); - var work = owner.getWorkHashMap().get(aid); - account.getWorkHashMap().put(aid, work); - account.getWorkHashMap().get(aid).setInvites(animation); + var work = new Work(); + work.setAnimation(owner.getWorkHashMap().get(aid).getAnimation()); + + // workを追加して + invitedAccount.getWorkHashMap().put(aid, work); + invitedAccount.getWorkHashMap().get(aid).setInvites(animation); + return "追加しました"; } else { throw new WebApplicationException(404);