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 752f52c..76e7928 100644 --- a/src/main/java/org/ntlab/nemophila/models/accounts/Account.java +++ b/src/main/java/org/ntlab/nemophila/models/accounts/Account.java @@ -1,10 +1,102 @@ package org.ntlab.nemophila.models.accounts; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.ntlab.nemophila.models.shops.Shop; + +import java.util.Collection; +import java.util.HashMap; + public class Account { + @JsonProperty("name") + private String name; + @JsonProperty("id") + private String id; + + @JsonIgnore + private String pw; + @JsonProperty("token") + private String token; + + //コンストラクタ + public Account(String name, String pw) { + this.name = name; + this.pw = pw; + } + + //Getter + public String getId() { + return id; + } + public String getName() { + return name; + } + public String getPw() { + return pw; + } + public String getToken() { + return token; + } + + //Setter + public void setName(String name) { + this.name = name; + } + public void setId(String id) { + this.id = id; + } + public void setPw(String pw) { + this.pw = pw; + } + public void setToken(String token) { + this.token = token; + } + + private HashMap posts = new HashMap<>(); + + + //新規投稿 + public Post createPost(int rate, String genre, String comment, String image1, String image2, String image3, String sid) { + Post post = new Post(); + + post.setRate(rate); + post.setGenre(genre); + //コメントと写真は必須ではない。nullで登録できる??? + //無理ならnull時「なし」に変換させて登録で。 + post.setComment(comment); + post.setImage1(image1); + post.setImage2(image2); + post.setImage3(image3); + post.setId(sid); + + posts.put(post.getId(), post); + + return post;//必要ないけど一応 + } + + //pidを指定して投稿を一つ取得 + public Post getPost(String pid) { + return posts.get(pid); + } + + //そのaccountの投稿を全て取得 + public Collection getPosts() { + return posts.values(); + } + + //投稿削除 + public void deletePost(Post post) { + posts.remove(post); + } + //投稿数の取得 + public int getPostsCount() { + return posts.size(); + } + //Accountから対応するFriendManagerを1つ呼び出す(初期化) FriendManager friendManager = new FriendManager(); 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 c8ecfb5..45b8dbc 100644 --- a/src/main/java/org/ntlab/nemophila/models/accounts/AccountManager.java +++ b/src/main/java/org/ntlab/nemophila/models/accounts/AccountManager.java @@ -1,4 +1,53 @@ package org.ntlab.nemophila.models.accounts; +import java.util.HashMap; +import java.util.UUID; + public class AccountManager { + private static AccountManager theInstance = null; + private HashMap accountsMap = new HashMap<>(); + private int newId = 57797; + + private AccountManager() { + + } + //シングルトン化 + public static AccountManager getInstance() { + if(theInstance == null){ + theInstance = new AccountManager(); + } + return theInstance; + } + //アカウントの取得 + public Account getAccount(String id){ + return accountsMap.get(id); + } + //新規アカウントの作成 + public Account createAccount(String name, String pw){ + //ランダムにトークンを作成 + UUID uuid = UUID.randomUUID(); + String token = (String) uuid.toString(); + Account ac = new Account(name, pw); + ac.setToken(token); + //IDの作成 + String id = Integer.toString(newId); + ac.setId(id); + newId++; + accountsMap.put(id, ac); + return ac; + } + //再ログイン時に新しいトークンを更新する + public Account updateAccount(String id) { + Account ac = accountsMap.get(id); + UUID uuid = UUID.randomUUID(); + String token = (String) uuid.toString(); + ac.setToken(token); + return ac; + } + //アカウント消去 + public void deleteAccount(String id){ + accountsMap.remove(id); + } + + } diff --git a/src/main/java/org/ntlab/nemophila/models/accounts/FriendManager.java b/src/main/java/org/ntlab/nemophila/models/accounts/FriendManager.java index 2585447..24e464c 100644 --- a/src/main/java/org/ntlab/nemophila/models/accounts/FriendManager.java +++ b/src/main/java/org/ntlab/nemophila/models/accounts/FriendManager.java @@ -1,17 +1,43 @@ package org.ntlab.nemophila.models.accounts; import java.util.ArrayList; +import java.util.HashSet; public class FriendManager { - + private HashSet friends = new HashSet<>(); private ArrayList requesting = new ArrayList<>(); + private ArrayList requested = new ArrayList<>(); - public void addRequesting(Account to){} + public void addFriend(Account friend) {} + + public HashSet getFriends() { + return friends; + } + + public void removeFriend(Account friend) {} + + public void addRequesting(Account to) { + requesting.add(to); + } public ArrayList getRequesting() { return requesting; } - public void removeRequesting(Account to){} + public void removeRequesting(Account to) { + requesting.remove(to); + } + + public void addRequested(Account from) { + requested.add(from); + } + + public ArrayList getRequested() { + return requested; + } + + public void removeRequested(Account from) { + requested.remove(from); + } } diff --git a/src/main/java/org/ntlab/nemophila/models/accounts/Post.java b/src/main/java/org/ntlab/nemophila/models/accounts/Post.java index 30c36f6..aa0f591 100644 --- a/src/main/java/org/ntlab/nemophila/models/accounts/Post.java +++ b/src/main/java/org/ntlab/nemophila/models/accounts/Post.java @@ -1,4 +1,82 @@ package org.ntlab.nemophila.models.accounts; +import com.fasterxml.jackson.annotation.JsonProperty; + public class Post { -} + @JsonProperty("id") + private String id; + @JsonProperty("genre") + private String genre; + @JsonProperty("image1") + private String image1; + @JsonProperty("image2") + private String image2; + @JsonProperty("image3") + private String image3; + @JsonProperty("rate") + private int rate; + @JsonProperty("comment") + private String comment; + @JsonProperty("sid") + private String sid; + @JsonProperty("uid") + private String uid; + + //Getter + public String getId() { + return id; + } + public String getGenre() { + return genre; + } + public String getImage1() { + return image1; + } + public String getImage2() { + return image2; + } + public String getImage3() { + return image3; + } + public int getRate() { + return rate; + } + public String getComment() { + return comment; + } + public String getSid() { + return sid; + } + public String getUid() { + return uid; + } + + //Setter + public void setId(String id) { + this.id = id; + } + public void setGenre(String genre) { + this.genre = genre; + } + public void setImage1(String image1) { + this.image1 = image1; + } + public void setImage2(String image2) { + this.image2 = image2; + } + public void setImage3(String image3) { + this.image3 = image3; + } + public void setRate(int rate) { + this.rate = rate; + } + public void setComment(String comment) { + this.comment = comment; + } + public void setSid(String sid) { + this.sid = sid; + } + public void setUid(String uid) { + this.uid = uid; + } +} \ No newline at end of file diff --git a/src/main/java/org/ntlab/nemophila/models/shops/Shop.java b/src/main/java/org/ntlab/nemophila/models/shops/Shop.java index 59368ca..d233070 100644 --- a/src/main/java/org/ntlab/nemophila/models/shops/Shop.java +++ b/src/main/java/org/ntlab/nemophila/models/shops/Shop.java @@ -1,17 +1,18 @@ package org.ntlab.nemophila.models.shops; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import org.ntlab.nemophila.models.accounts.Post; import java.util.ArrayList; public class Shop { - @JsonProperty("id") + @JsonProperty("sid") private String id; - @JsonProperty("name") + @JsonIgnore private String name; - @JsonProperty("longitude") + @JsonIgnore private double longitude; - @JsonProperty("latitude") + @JsonIgnore private double latitude; @JsonProperty("posts") private ArrayList posts = new ArrayList<>(); @@ -29,19 +30,23 @@ public double getLatitude() { return latitude; } + //idからその店の投稿を返す + public ArrayList getPosts() { + return posts; + } //Setter public void setId(String id) { - id = id; + this.id = id; } public void setName(String name) { - name = name; + this.name = name; } public void setLongitude(double longitude) { - longitude = longitude; + this.longitude = longitude; } - public void setLatitude(double latitude) { - latitude = latitude; + public void setLatitude(double latitude) { + this.latitude = latitude; } //postsに関するメソッド @@ -51,10 +56,4 @@ public void deletePost(Post post) { posts.remove(post); } - public Post getposts(int index) { - return posts.get(index); - } - public int getPostsCount() { - return posts.size(); - } } diff --git a/src/main/java/org/ntlab/nemophila/models/shops/ShopManager.java b/src/main/java/org/ntlab/nemophila/models/shops/ShopManager.java index eae8908..bdfd27d 100644 --- a/src/main/java/org/ntlab/nemophila/models/shops/ShopManager.java +++ b/src/main/java/org/ntlab/nemophila/models/shops/ShopManager.java @@ -1,7 +1,11 @@ package org.ntlab.nemophila.models.shops; -import java.util.HashMap; +import org.ntlab.nemophila.models.accounts.Post; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.UUID; public class ShopManager { private static ShopManager theInstance = null; @@ -19,17 +23,45 @@ return theInstance; } - //idからお店の情報を取得 + //idからお店の情報を返す public Shop getShop(String id) { return shopsMap.get(id); } + //お店の情報を全て返す + public Collection getShops() { + return shopsMap.values(); + } + + //sidからその店の投稿を取得 + public ArrayList getPosts (String id) { + Shop shop = shopsMap.get(id); + return shop.getPosts(); + } + //お店のidとその店を紐づけて保存 - public void setShopsMap(Shop shop) { + public Shop createShop(String name, double longitude, double latitude) { + UUID uuid = UUID.randomUUID(); + String id = uuid.toString(); + + //インスタンス生成 + Shop shop = new Shop(); + shop.setId(id); + shop.setName(name); + shop.setLongitude(longitude); + shop.setLatitude(latitude); + + //生成したインスタンスを登録 + updateShop(shop); + + return shop; + } + + public void updateShop(Shop shop) { shopsMap.put(shop.getId(), shop); } - public void deleteShop(String id) { + public void removeShop(String id) { shopsMap.remove(id); } -} +} \ No newline at end of file diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostRest.java index 64ced8c..c1fea72 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostRest.java @@ -1,26 +1,52 @@ 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.springframework.stereotype.Component; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; @Component @Path("/accounts") public class AccountPostRest { @PUT @Path("/{uid}/posts/{pid}") - @Produces(MediaType.APPLICATION_JSON) - public String getAccountPost(@PathParam("uid") String uid, @PathParam("pid") String pid, @FormParam("token") String token, + public void putAccountPost(@PathParam("uid") String uid, @PathParam("pid") String pid, @FormParam("token") String token, @FormParam("genre") String genre, @FormParam("image1") String image1, @FormParam("image2") String image2, - @FormParam("image3") String image3, @FormParam("rate") int rate, @FormParam("comment") String comment) { + @FormParam("image3") String image3, @FormParam("rate") Integer rate, @FormParam("comment") String comment) { + AccountManager am = AccountManager.getInstance(); + Account account = am.getAccount(uid); - return null; + if(account != null && account.getToken().equals(token)) { + Post post = account.getPost(pid); + if (!genre.equals(null)) post.setGenre(genre); + if (!image1.equals(null)) post.setImage1(image1); + if (!image2.equals(null)) post.setImage2(image2); + if (!image3.equals(null)) post.setImage3(image3); + if (!rate.equals(null)) post.setRate(rate); + if (!comment.equals(null)) post.setComment(comment); + } } @DELETE @Path("/{uid}/posts/{pid}") public void deleteAccountPost(@PathParam("uid") String uid, @PathParam("pid") String pid, @FormParam("token") String token){ - + AccountManager am = AccountManager.getInstance(); + Account account = am.getAccount(uid); + + if(account != null){ + Post post = account.getPost(pid); + + if(post == null){ + var response = Response.status(Response.Status.NO_CONTENT); + response.status(404).entity("投稿が存在しません"); + throw new WebApplicationException(response.build()); + } else { + account.deletePost(post); + } + } } } 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 846248c..004bd91 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountsRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountsRest.java @@ -1,16 +1,20 @@ 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.POST; -import javax.ws.rs.Path; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; @Component @Path("/accounts") public class AccountsRest { @POST - public String getAccounts() { - return null; + public Account createAccount(@FormParam("name") String name, @FormParam("pw") String pw) { + AccountManager am = AccountManager.getInstance(); + Account new_account = createAccount(name,pw); + + return new_account; } } 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 aafa8de..8cb02d3 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/FriendsRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/FriendsRest.java @@ -2,16 +2,26 @@ import org.springframework.stereotype.Component; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; +import javax.ws.rs.*; @Component @Path("/accounts") public class FriendsRest { @GET @Path("/{uid}/friends") - public String getFriends(@PathParam("uid") String uid){ - return "Hello World"; + public String getFriends(@PathParam("uid") String uid) { + return uid; + } + + @PUT + @Path("/{uid}/friends/{fid}") + public String putFriend(@PathParam("uid") String uid, @PathParam("fid") String fid) { + return null; + } + + @DELETE + @Path("/{uid}/friends/{fid}") + public String deleteFriend(@PathParam("uid") String uid, @PathParam("fid") String fid) { + return null; } } 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 3fb4a2a..f696126 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/LoginRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/LoginRest.java @@ -1,5 +1,9 @@ package org.ntlab.nemophila.resources.accounts; +import org.ntlab.nemophila.models.accounts.Account; +import org.ntlab.nemophila.models.accounts.AccountManager; + +import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -8,7 +12,16 @@ public class LoginRest { @POST @Path("/{uid}/login") - public String getAccounts(@PathParam("uid") String uid, String pw) { - return null; + public Account getAccounts(@FormParam("uid") String uid, @FormParam("pw") String pw) { + AccountManager am = AccountManager.getInstance(); + Account account = am.getAccount(uid); + + if (account.getPw().equals(pw)) { + account = am.updateAccount(uid); + } else { + System.out.println("Error : Miss match pw"); + } + + return account; } } 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 a8de572..8675311 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/RequestingRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/RequestingRest.java @@ -1,18 +1,66 @@ 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.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; +import javax.ws.rs.*; +import java.util.ArrayList; +import java.util.Collection; @Component @Path("/accounts") public class RequestingRest { @GET @Path("/{uid}/requesting") - public String getRequesting(@PathParam("uid") String uid) { + public Collection getRequesting(@PathParam("uid") String uid) { + + AccountManager am = AccountManager.getInstance(); + Account ac = am.getAccount(uid); + FriendManager fm = ac.getFriendManager(); + + ArrayList requesting = fm.getRequesting(); + ArrayList ids = new ArrayList<>(); + + for (Account a: requesting){ + ids.add(a.getId()); + } + + return ids; + } + + @PUT + @Path("/{uid}/requesting/{requesting_id}") + public String 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(); + + fm.addRequesting(acto); + fmto.addRequested(ac); return null; } + + @DELETE + @Path("/{uid}/requesting/{requesting_id}") + public String 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(); + + fm.removeRequesting(acto); + fmto.removeRequested(ac); + + return null; + } + + } diff --git a/src/main/java/org/ntlab/nemophila/resources/shops/ShopsRest.java b/src/main/java/org/ntlab/nemophila/resources/shops/ShopsRest.java index 466ad61..a8824b2 100644 --- a/src/main/java/org/ntlab/nemophila/resources/shops/ShopsRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/shops/ShopsRest.java @@ -1,15 +1,28 @@ package org.ntlab.nemophila.resources.shops; +import org.ntlab.nemophila.models.shops.Shop; +import org.ntlab.nemophila.models.shops.ShopManager; import org.springframework.stereotype.Component; -import javax.ws.rs.GET; -import javax.ws.rs.Path; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.Collection; @Component @Path("/shops") public class ShopsRest { @GET - public String getShops() { - return null; + @Produces(MediaType.APPLICATION_JSON) + public Collection getShops() { + ShopManager shopManager = ShopManager.getInstance(); + return shopManager.getShops(); } -} + + @POST + @Produces(MediaType.APPLICATION_JSON) + public Shop createShop(@FormParam("name") String name, @FormParam("longitude") double longitude, @FormParam("latitude") double latitude) { + ShopManager shopManager = ShopManager.getInstance(); + Shop shop = shopManager.createShop(name, longitude, latitude); + return shop; + } +} \ No newline at end of file