Skip to content

Latest commit

 

History

History
254 lines (174 loc) · 4.63 KB

6주차.md

File metadata and controls

254 lines (174 loc) · 4.63 KB

6주차 과제

필수 과제 성장 과제 1
img

필수 과제

  • 로그인/회원가입 서버 연동

📋 API 명세서

POSTMAN 테스트

  • 로그인 테스트

img

  • 회원가입 테스트

img

주요 코드

  • 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()
            }
        })

성장 과제1

주요 코드

  • 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
})