필수 과제 | 성장 과제 1 |
---|---|
- 로그인/회원가입 서버 연동
📋 API 명세서
POSTMAN 테스트
- 로그인 테스트
- 회원가입 테스트
주요 코드
- RequestSignIn
data class RequestSignIn(
val email: String,
val password: String
)
- RequestSignUp
data class RequestSignUp (
val email: String,
val password: String,
val userName: String
)
- ResponseSignIn
data class ResponseSignIn(
@SerializedName("data")
val `data`: Data,
@SerializedName("message")
val message: String,
@SerializedName("status")
val status: Int,
@SerializedName("success")
val success: Boolean
) {
data class Data(
@SerializedName("email")
val email: String,
@SerializedName("password")
val password: String,
@SerializedName("userName")
val userName: String
)
}
- ResponseSignIn
data class ResponseSignUp(
@SerializedName("data")
val `data`: Data,
@SerializedName("message")
val message: String,
@SerializedName("status")
val status: Int,
@SerializedName("success")
val success: Boolean
) {
data class Data(
@SerializedName("email")
val email: String,
@SerializedName("password")
val password: String,
@SerializedName("userName")
val userName: String
)
}
- UserService
interface UserService {
@POST("/users/signin")
@Headers("Content-Type: application/json")
fun signIn(
@Body body: RequestSignIn
): Single<ResponseSignIn>
@POST("/users/signup")
@Headers("Content-Type: application/json")
fun signUp(
@Body body: RequestSignUp
): Single<ResponseSignUp>
}
- UserViewModel
: Repository Pattern, MVVM Architecture 이용
private val _signInTaskEvent = MutableLiveData<Event<User>>()
val signInTaskEvent: LiveData<Event<User>> = _signInTaskEvent
private val _signUpTaskEvent = MutableLiveData<Event<Boolean>>()
val signUpTaskEvent: LiveData<Event<Boolean>> = _signUpTaskEvent
private val _toastMessage = MutableLiveData<Event<String>>()
val toastMessage: LiveData<Event<String>> = _toastMessage
fun signIn(email: String, password: String) {
addDisposable(
repo.signIn(email,password)
.subscribe({
_signInTaskEvent.postValue(Event(it))
_toastMessage.postValue(Event("로그인 성공"))
}, {
_toastMessage.postValue(Event("로그인 실패"))
Log.v(TAG, "signIn", it)
})
)
}
fun signUp(email: String, password: String, userName: String) {
addDisposable(
repo.signUp(email, password, userName)
.subscribe({
_signUpTaskEvent.postValue(Event(true))
_toastMessage.postValue(Event("회원가입 성공"))
}, {
_toastMessage.postValue(Event("회원가입 실패"))
Log.v(TAG, "signUp", it)
})
)
}
- SignInActivity
//로그인 버튼 클릭 시
viewModel.signIn(email,password)
//로그인 결과 처리
viewModel.signInTaskEvent.observe(this, EventObserver{
startMainActivity()
})
- SignUpActivity
//회원가입 버튼 클릭 시
viewModel.signUp(email, password, name)
//회원가입 결과 처리
viewModel.signUpTaskEvent.observe(this, EventObserver{ success ->
if(success){
finishActivityResult()
}
})
- https://reqres.in/의 LIST USERS 구현
주요 코드
- FriendService
interface FriendService {
@GET("/api/users")
fun getUsers(): Single<ResponseUsers>
}
- FriendViewModel
private var _friendList = MutableLiveData<List<Friend>>()
val friendList: LiveData<List<Friend>> = _friendList
fun getUsers() {
addDisposable(repo.getUsers()
.subscribe ({
_friendList.postValue(it)
}, {
Log.e(TAG, "getUsers", it)
})
)
}
- FriendFragment
// 데이터 가져온 후
viewModel.getUsers()
//recyclerview에 adapt
viewModel.friendList.observe(this, {
friendAdapter.data = it
})