diff --git a/build.gradle b/build.gradle index 61f286a..8f63d53 100644 --- a/build.gradle +++ b/build.gradle @@ -14,11 +14,15 @@ } dependencies { + compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.11.0' + compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.0' + compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.11.0' implementation 'org.springframework.boot:spring-boot-starter-jersey' implementation 'org.springframework.boot:spring-boot-starter-web' developmentOnly 'org.springframework.boot:spring-boot-devtools' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' + } test { diff --git a/src/main/java/org/ntlab/acanthus_server/entities/Account.java b/src/main/java/org/ntlab/acanthus_server/entities/Account.java index da30156..5ffe796 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/Account.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/Account.java @@ -20,37 +20,68 @@ // //////////////////////////////////////////////////////////////////////////////////////// package org.ntlab.acanthus_server.entities; +import java.util.UUID; + public class Account { private int uid; private String name; private String email; private String token; private String password; - //コンストラクト + + //コンストラクト public Account(String name, String email, String password) { - this.name=name; - this.email=email; - this.password=password; + this.name = name; + this.email = email; + this.password = password; } + //----------------------------------------------------------------- + //----------------------------------------------------------------- //uidを返す //GetとSetを実装 public int getUid() { return uid; } - public void setUid(){ - this.uid=uid; + + //----------------------------------------------------------------- + public void setUid(int uid) { + this.uid = uid; } + + //----------------------------------------------------------------- //tokenを返す + //GetとSetを実装 public String getToken() { return token; } + + //----------------------------------------------------------------- + // トークンを生成する + public void createToken() { + this.token = UUID.randomUUID().toString(); + } + + //----------------------------------------------------------------- //passwordをtoken認証後返す public String getPassword(String token) { //IFでトークン認証をしたのちに返す return password; } - + //----------------------------------------------------------------- + //emailを返す + public String getEmail() { + return email; + } + //----------------------------------------------------------------- + public void setEmail(String email) { + this.email = email; + } + //----------------------------------------------------------------- + // パスワードが一致しているかを判定 + public boolean isMatchedPassword(String password) { + return this.password.equals(password); + } } diff --git a/src/main/java/org/ntlab/acanthus_server/entities/Animation.java b/src/main/java/org/ntlab/acanthus_server/entities/Animation.java new file mode 100644 index 0000000..5bd2854 --- /dev/null +++ b/src/main/java/org/ntlab/acanthus_server/entities/Animation.java @@ -0,0 +1,16 @@ +package org.ntlab.acanthus_server.entities; + +import java.util.ArrayList; +import java.util.Collection; + +public class Animation { + private ArrayList invitedUid; + + public Animation(Integer invitedUid) { + + } + + public Collection getGalleryInvites() { + return invitedUid; + } +} diff --git a/src/main/java/org/ntlab/acanthus_server/entities/Work.java b/src/main/java/org/ntlab/acanthus_server/entities/Work.java new file mode 100644 index 0000000..0d22d72 --- /dev/null +++ b/src/main/java/org/ntlab/acanthus_server/entities/Work.java @@ -0,0 +1,5 @@ +package org.ntlab.acanthus_server.entities; + +public class Work { + +} diff --git a/src/main/java/org/ntlab/acanthus_server/models/Accounts.java b/src/main/java/org/ntlab/acanthus_server/models/Accounts.java index bc762f0..befa65e 100644 --- a/src/main/java/org/ntlab/acanthus_server/models/Accounts.java +++ b/src/main/java/org/ntlab/acanthus_server/models/Accounts.java @@ -5,26 +5,44 @@ import java.util.HashMap; /* -* アカウント管理シングルトン -* -*/ + * アカウント管理シングルトン + * + */ public class Accounts { private static Accounts _theInstance = null; + private HashMap _accountHashMap = new HashMap<>(); //----------------------------------------------------------------- // インスタンス生成禁止 - private Accounts(){} + private Accounts() { + } //----------------------------------------------------------------- // シングルトン取得 //----------------------------------------------------------------- - public static Accounts getInstance(){ - if(_theInstance == null) _theInstance = new Accounts(); + public static Accounts getInstance() { + if (_theInstance == null) _theInstance = new Accounts(); return _theInstance; } //----------------------------------------------------------------- + //----------------------------------------------------------------- + // Uidからアカウントを返す + //----------------------------------------------------------------- + public Account getAccountByUid(int uid) { + return _accountHashMap.get(uid); + } + //----------------------------------------------------------------- + // e-Mailからアカウントを返す + //----------------------------------------------------------------- + public Account getAccountByEMail(String email) { + for (var account : _accountHashMap.values()) { + if (account.getEmail().equals(email)) return account; + } + return null; + } + //----------------------------------------------------------------- } diff --git a/src/main/java/org/ntlab/acanthus_server/resources/accounts/LoginRest.java b/src/main/java/org/ntlab/acanthus_server/resources/accounts/LoginRest.java index c06eb49..461387e 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/accounts/LoginRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/accounts/LoginRest.java @@ -1,41 +1,54 @@ package org.ntlab.acanthus_server.resources.accounts; -import org.ntlab.acanthus_server.entities.Account; import org.ntlab.acanthus_server.models.Accounts; import org.springframework.stereotype.Component; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.MediaType; -import java.awt.*; @Component @Path("/accounts/login") -public class LoginRest{ +public class LoginRest { private Accounts accounts = Accounts.getInstance(); //----------------------------------------------------------- + /** * ログイン時のトークン認証 - * @param uid ユーザーID - * @param token トークン + * アカウントが存在して, かつトークンを持っているかを確認する */ @GET @Produces(MediaType.APPLICATION_JSON) - public boolean hasLoginToken(String uid, String token) { - //if(uid != accounts.getAccountByUid(uid)) return false; - // return (token == accounts.getAccount(uid).getToken()); - return false; - } + public boolean hasLoginToken(@QueryParam("uid") int uid, @QueryParam("token") String token) { - // ToDo: トークン発行をJsonで返すのか, クラスで返却するのか決める. - // ToDo: クラスなら void でいい → setterを Account に用意 + var searchAccount = accounts.getAccountByUid(uid); + + if (searchAccount == null) throw new WebApplicationException(404); + if (!searchAccount.getToken().equals(token)) throw new WebApplicationException(400); + + return true; + } //----------------------------------------------------------- + /** + * ログイン時, トークンをアカウントに発行させる + * + * @param email ユーザーの登録したメアド + * @param password パスワード + */ + @PUT + @Produces(MediaType.APPLICATION_JSON) + public void authenticateLoginToken(@FormParam("e-mail") String email, @FormParam("password") String password) { + var searchAccount = accounts.getAccountByEMail(email); + + if (searchAccount == null) throw new WebApplicationException(404); + if (searchAccount.isMatchedPassword(password)) throw new WebApplicationException(401); + + searchAccount.createToken(); + } + //----------------------------------------------------------- } diff --git a/src/main/java/org/ntlab/acanthus_server/resources/accounts/WorkRest.java b/src/main/java/org/ntlab/acanthus_server/resources/accounts/WorkRest.java index 7f1fe51..db8dfbc 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/accounts/WorkRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/accounts/WorkRest.java @@ -1,37 +1,42 @@ package org.ntlab.acanthus_server.resources.accounts; +import org.ntlab.acanthus_server.entities.Work; +import org.ntlab.acanthus_server.models.Accounts; import org.springframework.stereotype.Component; import javax.ws.rs.*; +import java.util.Collection; @Component -@Path("accounts") +@Path("/accounts") public class WorkRest { + private Accounts accounts = Accounts.getInstance(); + /* 各ユーザーの作品を取得するメソッド */ - //@Path("accounts/{uid}/work") + //@Path("/{uid}/work") @GET - public String getWork(/*@PathParam("uid")Integer uid, @QueryParam("token")String token*/) { + public String getWork(/*@PathParam("uid") Integer uid, @QueryParam("token") String token*/) { return "fake1"; } /* 新しい作品を制作するメソッド */ - //@Path("accounts/{uid}/work") + //@Path("/{uid}/work") @POST - public String createWork(/*@PathParam("uid")Integer uid, @FormParam("token") String token*/){ + public String createWork(/*@PathParam("uid") Integer uid, @FormParam("token") String token*/){ return "fake2"; } /* 作品への参加を許可するメソッド */ - //@Path("accounts/{uid}/work" + //@Path("/{uid}/work") @PUT - public String updateWork(/*@PathParam("uid")Integer uid, @FormParam("token") String token, @FormParam("aid")Integer aid*/) { + public String updateWork(/*@PathParam("uid") Integer uid, @FormParam("token") String token, @FormParam("aid") Integer aid*/) { return "fake3"; } } 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 1eb43ff..0739fa2 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 @@ -1,9 +1,11 @@ package org.ntlab.acanthus_server.resources.gallery; +import org.ntlab.acanthus_server.entities.Animation; import org.springframework.stereotype.Component; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; +import java.util.Collection; @Component @Path("/gallery") @@ -12,7 +14,33 @@ @Path("/{aid}/invites") @GET @Produces(MediaType.APPLICATION_JSON) - public String isGalleryInvites(@PathParam("aid")Integer aid, String ownerToken){ - return "Hello World!!!"; + public String isGalleryInvites(@PathParam("aid")Integer aid, @QueryParam("invitedUid") String invitedUid, @QueryParam("invitedUidToken") String invitedUserToken, @QueryParam("Token") String ownerToken) { + if (invitedUid == null && invitedUserToken == null) { + //招待した人を確認する + + + }else{ + //招待されているかを確認する + + } + return "hello"; + } + + @Path("/{aid}/invites") + @PUT + @Produces(MediaType.APPLICATION_JSON) + public String addInvite(@PathParam("aid")Integer aid, @FormParam("ownerUid") String ownerUid, @FormParam("invitedUid") String invitedUid) { + + + return "追加しました"; + } + + @Path("/{aid}/invites") + @DELETE + @Produces(MediaType.APPLICATION_JSON) + public String deleteInvite(@PathParam("aid")Integer aid, @FormParam("invitedUid") String invitedUid, @FormParam("invitedToken") String invitedToken) { + + + return "追加しました"; } } diff --git a/src/main/java/org/ntlab/acanthus_server/resources/gallery/LayersRest.java b/src/main/java/org/ntlab/acanthus_server/resources/gallery/LayersRest.java index d027190..2b6f6da 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/gallery/LayersRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/gallery/LayersRest.java @@ -2,14 +2,30 @@ 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; @Component -@Path("gallery") +@Path("/gallery") public class LayersRest { + + /** + *指定したレイヤー情報(順番、枚数)を獲得するメソッド。 + * @param layerNo レイヤー番号 + * @param aid 作品id + * @param pid ページID + * @return strokeNo{pen, color, thickness, positions{x, y}} + */ + @Path("/{aid}/pageMap/0/layers/0") @GET - public String getLayersRest() { - return "Hello World!!!"; + @Produces(MediaType.APPLICATION_JSON) + public void getLayersRest(@PathParam("aid") Integer aid, @FormParam("layerNo") Integer layerNo, @FormParam("pid") Integer pid) { + + /* if() { + + } + */ + throw new WebApplicationException(404); } + } diff --git a/src/main/java/org/ntlab/acanthus_server/resources/gallery/StrokesRest.java b/src/main/java/org/ntlab/acanthus_server/resources/gallery/StrokesRest.java index ea29a60..8a3357b 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/gallery/StrokesRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/gallery/StrokesRest.java @@ -1,15 +1,39 @@ package org.ntlab.acanthus_server.resources.gallery; -import org.springframework.stereotype.Component; + 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.ArrayList; @Component -@Path("gallery") +@Path("/gallery") public class StrokesRest { + + /** + *指定したレイヤー情報(順番、枚数)を獲得メソッド。 + * @param aid 作品id + */ + + @Path("/{aid}/pageMap/0/layers/0/strokes") + @POST + @Produces(MediaType.APPLICATION_JSON) + public String addStrokes(@PathParam("aid") String aid, @FormParam("token") String client_token) { + return null; + } + + @Path("/{aid}/pageMap/0/layers/0/strokes/{strokeNo}/position") @GET - public String getStrokesRest() { - return "Hello World!!!"; + @Produces(MediaType.APPLICATION_JSON) + public ArrayList getPositions(@PathParam("aid") Integer aid, @PathParam("strokeNo") Integer strokeNo) { + return null; + } + + @Path("/{aid}/pageMap/0/layers/0/strokes/{strokeNo}/position") + @POST + @Produces(MediaType.APPLICATION_JSON) + public String addPositions(@PathParam("aid") String aid, @FormParam("token") String client_token) { + return null; } } +