Repository
Gateway
์UseCase
์ ์ค๊ฐ์ ์ญํ ์ ํจ.UseCase
๋ ์ค์ง ๋๋ฉ์ธ ๋ก์ง๋ง์ ์๊ฐํด์ ๊ตฌํ๋์๊ณ ,Gateway
๋ ์ค์ง ์ธ๋ถ์์ ํต์ ๋ง์ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ทธ ์ค๊ฐ์์ ๋์ ์ด์ด์ฃผ๋ ์ญํ ์ ํจ.์ด ๋, ํ์ํ ๋ฐ์ดํฐ์ ์บ์ฑ, ๊ฐ๊ณต, ํต์ ์ต์ ์ ์ฒ๋ฆฌ ๋ฑ๋ฑ์ ํ๊ฒ ๋จ.
๋ฐ์ดํฐ์ ์บ์ฑ์
Repository
์ ์ค์ํ ์ญํ ์ค ํ๋์ธ๋ฐ,Repository
๊ฐ์ฒด์ ์๋ช ๊ณผ๋ ์์ฃผ ๊น๊ฒ ์ฐ๊ด๋์ด์์ผ๋ฏ๋ก, ํด๋นRepository
๊ฐ ์ด๋ค ์๋ช ์ ๊ฐ์ง๊ณ ์ด๋คLifetimeScope
์ ์์๋์ด์ผ ํ ์ง ์ ์ค๊ณํด์ผํจ.
public class AccountRepository : ISignInRepository, ISignOutRepository,
ISignUpRepository, IDeleteAccountRepository,
IAccountInfoRepository
{
private readonly IHttpClientGateway _httpClientGateway;
private const string URL = "url";
private string _id;
private string _token;
private string _nickName;
[Inject]
public AccountRepository(IHttpClientGateway httpClientGateway)
{
_httpClientGateway = httpClientGateway;
}
public async UniTask<ISignInRepository.SignInResponseData> SignIn(ISignInRepository.SignInRequestData signInData)
{
var requestData = new HttpSignInRequest(signInData.ID, signInData.Password);
var httpResponse = await _httpClientGateway
.RequestAsync<HttpSignInRequest, HttpSignInResponse>(URL, requestData);
if (!httpResponse.IsSuccess)
{
return new ISignInRepository.SignInResponseData(false);
}
_token = httpResponse.Token;
_nickName = httpResponse.NickName;
_id = signInData.ID;
return new ISignInRepository.SignInResponseData(true);
}
public async UniTask<ISignOutRepository.SignOutResponseData> SignOut()
{
var requestData = new HttpSignOutRequest(_token);
var httpResponse = await _httpClientGateway
.RequestAsync<HttpSignOutRequest, HttpSignInResponse>(URL, requestData);
if (!httpResponse.IsSuccess)
{
return new ISignOutRepository.SignOutResponseData(false, "Sign out failed");
}
_token = null;
_nickName = null;
_id = null;
return new ISignOutRepository.SignOutResponseData(true, "Sign out");
}
public async UniTask<ISignUpRepository.SignUpResponseData> SignUp(ISignUpRepository.SignUpRequestData signUpData)
{
throw new System.NotImplementedException();
}
public async UniTask<IDeleteAccountRepository.DeleteAccountResponseData> DeleteAccount(IDeleteAccountRepository.DeleteAccountRequestData deleteAccountData)
{
throw new System.NotImplementedException();
}
public IAccountInfoRepository.AccountInfo GetCurrentAccountInfo()
{
return new IAccountInfoRepository.AccountInfo("id", "nickName", "token");
}
[Serializable]
public class HttpSignInRequest
{
[JsonProperty("id")]
public string ID { get; }
[JsonProperty("password")]
public string Password { get; }
public HttpSignInRequest(string id, string password)
{
ID = id;
Password = password;
}
}
[Serializable]
public class HttpSignInResponse
{
[JsonProperty("isSuccess")]
public bool IsSuccess { get; }
[JsonProperty("token")]
public string Token { get; }
[JsonProperty("nickName")]
public string NickName { get; }
public HttpSignInResponse(bool isSuccess, string nickName, string token)
{
IsSuccess = isSuccess;
NickName = nickName;
Token = token;
}
}
[Serializable]
public class HttpSignOutRequest
{
[JsonProperty("token")]
public string Token { get; }
public HttpSignOutRequest(string token)
{
Token = token;
}
}
}
Last updated