diff --git a/src/main/java/org/ntlab/nemophila/models/accounts/Account.java b/src/main/java/org/ntlab/nemophila/models/accounts/Account.java index 76e7928..84cd138 100644 --- a/src/main/java/org/ntlab/nemophila/models/accounts/Account.java +++ b/src/main/java/org/ntlab/nemophila/models/accounts/Account.java @@ -57,9 +57,10 @@ //新規投稿 - public Post createPost(int rate, String genre, String comment, String image1, String image2, String image3, String sid) { + public Post createPost(String sid, int rate, String genre, String comment, String image1, String image2, String image3) { Post post = new Post(); + post.setId(sid); post.setRate(rate); post.setGenre(genre); //コメントと写真は必須ではない。nullで登録できる??? @@ -68,11 +69,10 @@ post.setImage1(image1); post.setImage2(image2); post.setImage3(image3); - post.setId(sid); posts.put(post.getId(), post); - return post;//必要ないけど一応 + return post; } //pidを指定して投稿を一つ取得 @@ -99,4 +99,4 @@ public FriendManager getFriendManager() { return friendManager; } -} \ No newline at end of file +} diff --git a/src/main/java/org/ntlab/nemophila/models/accounts/AccountManager.java b/src/main/java/org/ntlab/nemophila/models/accounts/AccountManager.java index 45b8dbc..1e3221f 100644 --- a/src/main/java/org/ntlab/nemophila/models/accounts/AccountManager.java +++ b/src/main/java/org/ntlab/nemophila/models/accounts/AccountManager.java @@ -20,6 +20,7 @@ } //アカウントの取得 public Account getAccount(String id){ + return accountsMap.get(id); } //新規アカウントの作成 @@ -46,6 +47,7 @@ } //アカウント消去 public void deleteAccount(String id){ + accountsMap.remove(id); } diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostsRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostsRest.java index a3064fd..98f12c9 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostsRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostsRest.java @@ -1,27 +1,62 @@ package org.ntlab.nemophila.resources.accounts; +import org.ntlab.nemophila.models.accounts.Account; +import org.ntlab.nemophila.models.accounts.AccountManager; +import org.ntlab.nemophila.models.accounts.Post; +import org.ntlab.nemophila.models.shops.Shop; +import org.ntlab.nemophila.models.shops.ShopManager; import org.springframework.stereotype.Component; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; +import java.util.Collection; @Component @Path("/accounts") public class AccountPostsRest { + // 「/{uid}/posts」のPOSTメソッド @POST @Path("/{uid}/posts") @Produces(MediaType.APPLICATION_JSON) - public String postAccountPosts(@PathParam("uid") String uid, @FormParam("token") String token, @FormParam("genre") String genre, - @FormParam("image1") String img1, @FormParam("image2") String img2, @FormParam("image3") String img3, - @FormParam("rate") int rate, @FormParam("comment") String comme, @FormParam("sid") String sid){ - return null; + public String postAccountPosts(@PathParam("uid") String uid, @FormParam("token") String token, @FormParam("sid") String sid, + @FormParam("rate") int rate, @FormParam("genre") String genre, @FormParam("comment") String comme, + @FormParam("image1") String img1, @FormParam("image2") String img2, @FormParam("image3") String img3) { + // アカウントインスタンスを生成する + AccountManager am = AccountManager.getInstance(); + Account account = am.getAccount(uid); + + /* + (対象のアカウントインスタンスが) + 存在する場合:投稿を新規作成し、その投稿IDを返す + 存在しない場合:何も返さない + */ + if (account != null) { + Post post = account.createPost(sid, rate, genre, comme, img1, img2, img3); + return post.getId(); + } else { + return null; + } } + // 「/{uid}/posts」のGETメソッド @GET @Path("/{uid}/posts") @Produces(MediaType.APPLICATION_JSON) - public String getAccountPosts(@PathParam("uid") String uid){ - return null; + public Collection getAccountPosts(@PathParam("uid") String uid) { + // アカウントインスタンスを生成する + AccountManager am = AccountManager.getInstance(); + Account account = am.getAccount(uid); + + /* + (対象のアカウントインスタンスが) + 存在する場合:全投稿の情報を取得し、それらを返す + 存在しない場合:何も返さない + */ + if (account != null) { + return account.getPosts(); + } else { + return null; + } } } diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountRest.java index 59e202e..ecb73cf 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountRest.java @@ -1,18 +1,92 @@ package org.ntlab.nemophila.resources.accounts; +import org.ntlab.nemophila.models.accounts.Account; +import org.ntlab.nemophila.models.accounts.AccountManager; import org.springframework.stereotype.Component; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; @Component @Path("/accounts") public class AccountRest { + + //ユーザー情報の取得 @GET @Path("/{uid}") - public String getAccount(@PathParam("uid") String uid){ - return null; + @Produces(MediaType.APPLICATION_JSON) + public Account getAccount(@PathParam("uid") String uid){ + AccountManager am = AccountManager.getInstance(); + Account ac = am.getAccount(uid); + return ac; } + + //ユーザーの削除 + @DELETE + @Path("/{uid}") + public void deleteAccount(@PathParam("uid") String uid,@FormParam("token") String token){ + AccountManager am = AccountManager.getInstance(); + Account ac = am.getAccount(uid); + if (ac.getToken().equals(token)) { + am.deleteAccount(uid); + } else { + System.out.println("Error : Miss match token"); + } + } + + //パスワードの変更 + @PUT + @Path("/{uid}/pw") + public void pwChange(@PathParam("uid") String uid, @FormParam("oldPw") String oldPw, @FormParam("newPw") String newPw,@FormParam("token") String token){ + AccountManager am = AccountManager.getInstance(); + Account ac = am.getAccount(uid); + if (ac.getToken().equals(token)) { + if (ac.getPw().equals(oldPw)) { + ac.setPw(newPw); + } else { + System.out.println("Error : Miss match pw"); + } + } else { + System.out.println("Error : Miss match token"); + } + } +// + //名前の変更 + @PUT + @Path("/{uid}/name") + public void nameChange(@PathParam("uid") String uid, @FormParam("name") String name, @FormParam("token") String token){ + AccountManager am = AccountManager.getInstance(); + Account ac = am.getAccount(uid); + if (ac.getToken().equals(token)) { + ac.setName(name); + } else { + System.out.println("Error : Miss match token"); + } + + } + + //アイコンの変更 +// @PUT +// @Path("/{uid}/icon") +// public void nameChange(@PathParam("uid") String uid, @FormParam("name") String name, @FormParam("token") String token){ +// AccountManager am = AccountManager.getInstance(); +// Account ac = am.getAccount(uid); +// if (ac.getToken().equals(token)) { +// ac.setName(name); +// } else { +// System.out.println("Error : Miss match pw"); +// } +// +// } +// } + + //アイコンの削除 +// @DELETE +// @Path("/{uid}/icon") +// public String removeAccount(@PathParam("uid") String uid){ +// AccountManager am = AccountManager.getInstance(); +// Account ac = am.getAccount(uid); +// return null; +// } } diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountsRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountsRest.java index 004bd91..819c2b3 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountsRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountsRest.java @@ -10,11 +10,13 @@ @Component @Path("/accounts") public class AccountsRest { + //ユーザー新規登録 @POST + @Produces(MediaType.APPLICATION_JSON) public Account createAccount(@FormParam("name") String name, @FormParam("pw") String pw) { AccountManager am = AccountManager.getInstance(); - Account new_account = createAccount(name,pw); + Account newAccount = am.createAccount(name,pw); - return new_account; + return newAccount; } } diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/FriendsRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/FriendsRest.java index 8cb02d3..502b034 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/FriendsRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/FriendsRest.java @@ -1,27 +1,93 @@ package org.ntlab.nemophila.resources.accounts; +import org.ntlab.nemophila.models.accounts.Account; +import org.ntlab.nemophila.models.accounts.AccountManager; +import org.ntlab.nemophila.models.accounts.FriendManager; import org.springframework.stereotype.Component; import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; @Component @Path("/accounts") public class FriendsRest { @GET @Path("/{uid}/friends") - public String getFriends(@PathParam("uid") String uid) { - return uid; + @Produces(MediaType.APPLICATION_JSON) + public Collection getFriends(@PathParam("uid") String uid) { + AccountManager accountManager = AccountManager.getInstance(); + Account account = accountManager.getAccount(uid); //uidに紐づいたAccountのインスタンスを取得 + FriendManager friendManager = account.getFriendManager(); //取得したAccountのインスタンスのFriendManagerを取得 + HashSet friends = friendManager.getFriends(); //Accountのインスタンスが入ったHashSetを取得 + ArrayList ids = new ArrayList<>(); //YAML上ではidが入ったArrayListで返すのでそれ用に作成 + for (Account ac : friends) { + ids.add(ac.getId()); + } + + return ids; } @PUT @Path("/{uid}/friends/{fid}") - public String putFriend(@PathParam("uid") String uid, @PathParam("fid") String fid) { - return null; + public void putFriend(@PathParam("uid") String uid, @PathParam("fid") String fid, @FormParam("token") String token) { + AccountManager accountManager = AccountManager.getInstance(); + Account myAc = accountManager.getAccount(uid); //uidに紐づいたAccountのインスタンスを取得 + if (!(myAc.getToken().equals(token))) { + var response = Response.status(Response.Status.NO_CONTENT); + response.status(401).entity("tokenの認証に失敗"); + throw new WebApplicationException(response.build()); + } + + Account otherAc = accountManager.getAccount(fid); //fidに紐づいたAccountのインスタンスを取得 + FriendManager myFriendManager = myAc.getFriendManager(); //uidのAccountのインスタンスのFriendManagerを取得 + FriendManager otherAcFriendManager = otherAc.getFriendManager(); //fidのAccountのインスタンスのFriendManagerを取得 + + ArrayList otherRequesting = otherAcFriendManager.getRequesting(); //フレンド申請の送り主のフレンド申請中のArrayList + ArrayList myRequested = myFriendManager.getRequested(); //自身のフレンド申請されているArrayList + + // 自身がフレンド申請を受け取っている、かつ相手がフレンド申請をしているとき実行 + if (myRequested.contains(otherAc) && otherRequesting.contains(myAc)) { + myFriendManager.addFriend(otherAc); + myFriendManager.removeRequested(otherAc); + + otherAcFriendManager.addFriend(myAc); + otherAcFriendManager.removeRequesting(myAc); + } else { + var response = Response.status(Response.Status.NO_CONTENT); + response.status(400).entity("リクエストが不正である"); + throw new WebApplicationException(response.build()); + } } @DELETE @Path("/{uid}/friends/{fid}") - public String deleteFriend(@PathParam("uid") String uid, @PathParam("fid") String fid) { - return null; + public void deleteFriend(@PathParam("uid") String uid, @PathParam("fid") String fid, @FormParam("token") String token) { + AccountManager accountManager = AccountManager.getInstance(); + Account myAc = accountManager.getAccount(uid); //uidに紐づいたAccountのインスタンスを取得 + if (!(myAc.getToken().equals(token))) { + var response = Response.status(Response.Status.NO_CONTENT); + response.status(401).entity("tokenの認証に失敗"); + throw new WebApplicationException(response.build()); + } + + Account otherAc = accountManager.getAccount(fid); //fidに紐づいたAccountのインスタンスを取得 + FriendManager myFriendManager = myAc.getFriendManager(); //uidのAccountのインスタンスのFriendManagerを取得 + FriendManager otherFriendManager = otherAc.getFriendManager(); //fidのAccountのインスタンスのFriendManagerを取得 + + HashSet myFriends = myFriendManager.getFriends(); //uidのAccountのfriendsを取得 + HashSet otherFriends = otherFriendManager.getFriends(); //fidのAccountのfriendsを取得 + + if (myFriends.contains(otherAc) || otherFriends.contains(myAc)) { + myFriends.remove(otherAc); + otherFriends.remove(myAc); + } else { + var response = Response.status(Response.Status.NO_CONTENT); + response.status(400).entity("リクエストが不正である"); + throw new WebApplicationException(response.build()); + } } } diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/LoginRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/LoginRest.java index f696126..8f06844 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/LoginRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/LoginRest.java @@ -2,26 +2,28 @@ import org.ntlab.nemophila.models.accounts.Account; import org.ntlab.nemophila.models.accounts.AccountManager; +import org.springframework.stereotype.Component; -import javax.ws.rs.FormParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; - +@Component +@Path("/accounts") public class LoginRest { @POST @Path("/{uid}/login") - public Account getAccounts(@FormParam("uid") String uid, @FormParam("pw") String pw) { - AccountManager am = AccountManager.getInstance(); - Account account = am.getAccount(uid); + @Produces(MediaType.APPLICATION_JSON) - if (account.getPw().equals(pw)) { - account = am.updateAccount(uid); + public Account getAccounts(@PathParam("uid") String uid, @FormParam("pw") String pw) { + AccountManager am = AccountManager.getInstance(); + Account ac = am.getAccount(uid); + + if (ac.getPw().equals(pw)) { + ac = am.updateAccount(uid); } else { System.out.println("Error : Miss match pw"); } - return account; + return ac; } } diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/RequestedRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/RequestedRest.java new file mode 100644 index 0000000..d711660 --- /dev/null +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/RequestedRest.java @@ -0,0 +1,39 @@ +package org.ntlab.nemophila.resources.accounts; + +import org.ntlab.nemophila.models.accounts.Account; +import org.ntlab.nemophila.models.accounts.AccountManager; +import org.ntlab.nemophila.models.accounts.FriendManager; +import org.springframework.stereotype.Component; + +import javax.ws.rs.*; +import java.util.ArrayList; +import java.util.Collection; + +@Component +@Path("/accounts") +public class RequestedRest { + + @GET + @Path("/{uid}/requested") + public Collection getRequested(@PathParam("uid") String uid) { + + AccountManager am = AccountManager.getInstance(); + Account ac = am.getAccount(uid); + FriendManager fm = ac.getFriendManager(); + + ArrayList requesting = fm.getRequested(); + ArrayList ids = new ArrayList<>(); + + for (Account a: requesting){ + ids.add(a.getId()); + } + + return ids; + } + + @DELETE + @Path("/{uid}/requested/{requested_id}") + public void putRequestingId(@PathParam("uid") String uid, @PathParam("requested_id") String requested_id, @FormParam("token") String token){ + + } +} diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/RequestingRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/RequestingRest.java index 8675311..5d06a01 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/RequestingRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/RequestingRest.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Component; import javax.ws.rs.*; +import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.Collection; @@ -16,13 +17,14 @@ @Path("/{uid}/requesting") public Collection getRequesting(@PathParam("uid") String uid) { - AccountManager am = AccountManager.getInstance(); - Account ac = am.getAccount(uid); - FriendManager fm = ac.getFriendManager(); + AccountManager am = AccountManager.getInstance(); //アカウントマネージャーを取得 + Account ac = am.getAccount(uid); //uidからAccountインスタンスを取得 + FriendManager fm = ac.getFriendManager(); //uidのAccountのFriendManagerを取得 - ArrayList requesting = fm.getRequesting(); - ArrayList ids = new ArrayList<>(); + ArrayList requesting = fm.getRequesting(); //uidが申請中のAccountが入ったArrayListを取得 + ArrayList ids = new ArrayList<>(); //idを返すために格納するArrayListを宣言 + //取得したArrayListからidのみをidsに格納し返す for (Account a: requesting){ ids.add(a.getId()); } @@ -32,35 +34,46 @@ @PUT @Path("/{uid}/requesting/{requesting_id}") - public String PutRequestingId(@PathParam("uid") String uid, @PathParam("requesting_id") String requesting_id, @FormParam("token") String token){ + public void putRequestingId(@PathParam("uid") String uid, @PathParam("requesting_id") String requesting_id, @FormParam("token") String token){ - AccountManager am = AccountManager.getInstance(); - Account ac = am.getAccount(uid); - Account acto = am.getAccount(requesting_id); - FriendManager fm = ac.getFriendManager(); - FriendManager fmto = acto.getFriendManager(); + AccountManager am = AccountManager.getInstance(); //AccountManagerを取得 + Account ac = am.getAccount(uid); //uidからAccountインスタンスを取得 + Account acTo = am.getAccount(requesting_id); //requesting_uidから申請先のAccountインスタンスを取得 + FriendManager fm = ac.getFriendManager(); //uidのAccountのFriendManagerを取得 + FriendManager fmTo = acTo.getFriendManager(); //申請先のAccountのFriendManagerを取得 - fm.addRequesting(acto); - fmto.addRequested(ac); - - return null; + //入力されたtokenがuidのものと一致した時、uidのrequestingに申請先のAccountを、申請先のrequestedにuidのAccountを追加する + String acToken = ac.getToken(); + if(token.equals(acToken)) { + fm.addRequesting(acTo); + fmTo.addRequested(ac); + }else{ + var response = Response.status(Response.Status.NO_CONTENT); + response.status(401).entity("認証に失敗しました"); + throw new WebApplicationException(response.build()); + } } @DELETE @Path("/{uid}/requesting/{requesting_id}") - public String DeleteRequestingId(@PathParam("uid") String uid, @PathParam("requesting_id") String requesting_id, @FormParam("token") String token){ + public void deleteRequestingId(@PathParam("uid") String uid, @PathParam("requesting_id") String requesting_id, @FormParam("token") String token){ - AccountManager am = AccountManager.getInstance(); - Account ac = am.getAccount(uid); - Account acto = am.getAccount(requesting_id); - FriendManager fm = ac.getFriendManager(); - FriendManager fmto = acto.getFriendManager(); + AccountManager am = AccountManager.getInstance(); //AccountManagerを取得 + Account ac = am.getAccount(uid); //uidからAccountインスタンスを取得 + Account acTo = am.getAccount(requesting_id); //requesting_uidから申請先のAccountインスタンスを取得 + FriendManager fm = ac.getFriendManager(); //uidのAccountのFriendManagerを取得 + FriendManager fmTo = acTo.getFriendManager(); //申請先のAccountのFriendManagerを取得 - fm.removeRequesting(acto); - fmto.removeRequested(ac); - - return null; + //入力されたtokenがuidのものと一致した時、uidのrequestingにある申請先のAccountを、申請先のrequestedにあるuidのAccountを削除する + String acToken = ac.getToken(); + if(token.equals(acToken)) { + fm.removeRequesting(acTo); + fmTo.removeRequested(ac); + }else{ + var response = Response.status(Response.Status.NO_CONTENT); + response.status(401).entity("認証に失敗しました"); + throw new WebApplicationException(response.build()); + } } - } diff --git a/src/main/java/org/ntlab/nemophila/resources/shops/ShopPostsRest.java b/src/main/java/org/ntlab/nemophila/resources/shops/ShopPostsRest.java index 0072723..1f4a1aa 100644 --- a/src/main/java/org/ntlab/nemophila/resources/shops/ShopPostsRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/shops/ShopPostsRest.java @@ -7,6 +7,7 @@ import org.ntlab.nemophila.models.shops.ShopManager; import org.springframework.stereotype.Component; +import javax.ws.rs.core.MediaType; import javax.ws.rs.*; import javax.ws.rs.core.Response; import java.util.ArrayList; @@ -15,6 +16,7 @@ @Path("/shops") public class ShopPostsRest { @GET + @Produces(MediaType.APPLICATION_JSON) @Path("/{sid}/posts") public ArrayList getShopPosts(@PathParam("sid") String sid) { ShopManager sm = ShopManager.getInstance();