- package org.ntlab.citrusserver.resources;
- import jakarta.ws.rs.*;
- import jakarta.ws.rs.core.MediaType;
- import jakarta.ws.rs.core.Response;
- import org.ntlab.citrusserver.entities.Account;
- import org.ntlab.citrusserver.repositories.AccountManager;
- import org.springframework.beans.factory.annotation.Autowired;
- //import org.springframework.http.HttpStatus;
- import org.springframework.stereotype.Component;
-
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Set;
-
- @Path("/accounts")
- @Component //accountRestのインスタンスを一個作る
-
- public class AccountsRest {
- private final AccountManager accountManager; //finalは書き換えられない
- @Autowired//springbootの決まり
- public AccountsRest(AccountManager am) {
- accountManager = am;
- }
-
- // アカウントの一覧をリストとして返す(GET)
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public Set<String> getAccount(){
- return accountManager.getAccountsID();
- }
-
-
-
- // account_idとpasswordを設定し新しいアカウントを作成する(POST)
- @POST
- @Consumes(MediaType.APPLICATION_FORM_URLENCODED)//bodyに入力する値がある時
- public String signup(@FormParam("account_id") String accountId, @FormParam("password") String password) {
- String token;
- token = accountManager.createAccount(accountId, password);
- return token;
- }
-
- // 指定されたアカウントの情報を返す(GET)
- @Path("/{account_id}")
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public Account getAccountInfo(@PathParam("account_id") String accountId) {
- //404
- if (!accountManager.getAccountsID().contains(accountId)){ //account_idが存在しない時
- var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
- throw new WebApplicationException(response.build());
- }
- Account ac = accountManager.getAccount(accountId);
- return ac;
- }
-
- // アカウント情報を全削除する(DELETE)
- @Path("/{account_id}")
- @DELETE
- public void deleteAccount(@PathParam("account_id") String accountId,
- @QueryParam("token") String token,
- @QueryParam("password")String password) {
- if(accountManager.checkToken(accountId, token)) {
- accountManager.deleteAccount(accountId, token, password);
- }
- //404
- if (!accountManager.getAccountsID().contains(accountId)){ //account_idが存在しない時
- var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
- throw new WebApplicationException(response.build());
- }
- //403
- var response = Response.status(Response.Status.FORBIDDEN).entity("アカウント削除失敗");//forbiddenは403
- throw new WebApplicationException(response.build());
-
- }
-
-
- //指定されたIDのパスワードを変更する (PUT)
- @Path("/{account_id}/password")
- @PUT
- public void changePassword(@PathParam("account_id") String accountId,
- @FormParam("new_password")String newPassword,
- @FormParam("old_password")String oldPassword,
- @FormParam("token") String token){
- if(accountManager.checkToken(accountId, token)) {
- accountManager.changePassword(accountId, newPassword, oldPassword, token);
- }
-
- //404
- if (!accountManager.getAccountsID().contains(accountId)){ //account_idが存在しない時
- var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
- throw new WebApplicationException(response.build());
- }
- //403
- var response = Response.status(Response.Status.FORBIDDEN).entity("認証失敗");//forbiddenは403
- throw new WebApplicationException(response.build());
- }
-
- // 指定されたIDの自己紹介を返す(GET)
- @Path("/{account_id}/introduction")
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public String getIntroduction(@PathParam("account_id") String accountId){
- String ac = accountManager.AccountIntro(accountId);
- return ac;
- }
-
- // 指定されたIDの自己紹介を変更する (PUT)
- @Path("/{account_id}/introduction")
- @PUT
- public void changeIntroduction(@PathParam("account_id") String accountId,
- @FormParam("introduction")String introduction,
- @FormParam("token") String token){
- if(accountManager.checkToken(accountId, token)) {
- accountManager.changeIntroduction(accountId, introduction, token);
- }
- //404
- if (!accountManager.getAccountsID().contains(accountId)){ //account_idが存在しない時
- var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
- throw new WebApplicationException(response.build());
- }
- //403
- var response = Response.status(Response.Status.FORBIDDEN).entity("認証失敗");//forbiddenは403
- throw new WebApplicationException(response.build());
- }
- /////////
- // @Path("/{account_id}/photo")
- // //画像を返す
- // @GET
- // public String getAccount(@PathParam("account_id") String accountId){
- // Account ac = accountManager.getAccount(accountId);
- // return ac.getPhoto();
- // }
- // @Path("/{account_id}/photo")
- // @PUT
-
-
- //指定されたIDのお気に入りの本のリストを返す
- @Path("/accounts/{account_id}/favorites")
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public ArrayList<HashMap<String, String>> favoriteBook(@PathParam("account_id") String accountId,
- @QueryParam("token")String token){
- if(accountManager.checkToken(accountId, token)) {
- return accountManager.Favorites(accountId, token);
- }
- //404
- if (!accountManager.getAccountsID().contains(accountId)){ //account_idが存在しない時
- var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
- throw new WebApplicationException(response.build());
- }
- return null;
- }
-
- //指定されたIDのお気に入りの本のリストを返す(指定した人物)
- @Path("/accounts/{account_id}/favorites/{other_account_id}")
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public ArrayList<Integer> FavoriteBook(@PathParam("account_id") String accountId,
- @PathParam("other_account_id") String otherAccountId,
- @QueryParam("token")String token){
- if(accountManager.checkToken(accountId, token)) {
- return accountManager.FavoritesBookId(accountId, otherAccountId, token);
- }
-
- //404
- if (!accountManager.getAccountsID().contains(accountId)){ //account_idが存在しない時
- var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
- throw new WebApplicationException(response.build());
- }
- //403
- var response = Response.status(Response.Status.FORBIDDEN).entity("認証失敗");//forbiddenは403
- throw new WebApplicationException(response.build());
- }
-
- //////////
- // お気に入りの本のbook_idを削除する (DELETE)
- // @Path("/{account_id}/favorites/{other_account_id}/{book_id}")
- // @DELETE
-
- // いいねした本のアカウントIDとbook_idを追加する(いいねした側に追加) (PUT)
- //@Path("/{account_id}/favorites/{other_account_id}/{book_id}")
- // @PUT
-
-
-
- // アカウントidとパスワードでログインし、tokenを返す (POST)
- @Path("/{account_id}/login")
- @POST
- public String login(@PathParam("account_id") String accountId,@FormParam("password") String password) {
- //404
- if (!accountManager.getAccountsID().contains(accountId)){ //account_idが存在しない時
- var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404
- throw new WebApplicationException(response.build());
- }
- return accountManager.login(accountId, password);
- }
-
- }