package org.ntlab.citrusserver.resources;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import org.ntlab.citrusserver.entities.Account;
import org.ntlab.citrusserver.repositories.AccountManager;
import org.springframework.beans.factory.annotation.Autowired;
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){
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) {
accountManager.deleteAccount(accountId, token, password);
}
//指定された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,
@QueryParam("token") String token){
accountManager.changePassword(accountId,newPassword,oldPassword,token);
}
// 指定された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){
accountManager.changeIntroduction(accountId,introduction,token);
}
/////////
// @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){
return accountManager.Favorites(accountId,token);
}
//指定された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){
return accountManager.FavoritesBookId(accountId,otherAccountId,token);
}
//////////
// お気に入りの本のbook_idを削除する (DELETE)
// @Path("/accounts/{account_id}/favorites/{other_account_id}/{book_id}")
// @DELETE
// いいねした本のアカウントIDとbook_idを追加する(いいねした側に追加) (PUT)
//@Path("/accounts/{account_id}/favorites/{other_account_id}/{book_id}")
// @PUT
// アカウントidとパスワードでログインし、tokenを返す (POST)
@Path("/{account_id}/login")
@POST
public void login(@PathParam("account_id") String accountId,@FormParam("password") String password) {
accountManager.login(accountId, password);
}
}