Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

소셜 연동/해제 추가 #376

Merged
merged 11 commits into from
Nov 10, 2024
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.wafflestudio.snutt2.data.user

import com.wafflestudio.snutt2.lib.network.dto.GetUserFacebookResults
import com.wafflestudio.snutt2.lib.network.dto.GetSocialProvidersResults
import com.wafflestudio.snutt2.lib.network.dto.core.UserDto
import com.wafflestudio.snutt2.model.TableLectureCustom
import com.wafflestudio.snutt2.model.TableLectureCustomOptions
Expand All @@ -26,13 +26,6 @@ interface UserRepository {
// login with local id
suspend fun postSignIn(id: String, password: String)

// login with facebook id
suspend fun postLoginFacebook(facebookToken: String)

suspend fun postLoginGoogle(googleAccessToken: String)

suspend fun postLoginKakao(kakaoAccessToken: String)

suspend fun postSignUp(id: String, password: String, email: String)

suspend fun fetchUserInfo()
Expand All @@ -43,19 +36,9 @@ interface UserRepository {

suspend fun putUserPassword(oldPassword: String, newPassword: String)

suspend fun getUserFacebook(): GetUserFacebookResults

// 새로운 local_id 추가
suspend fun postUserPassword(id: String, password: String)

suspend fun deleteUserFacebook()

// facebook 계정 연동
suspend fun postUserFacebook(
facebookId: String,
facebookToken: String,
)

suspend fun postFeedback(email: String, detail: String)

suspend fun deleteFirebaseToken()
Expand Down Expand Up @@ -109,4 +92,33 @@ interface UserRepository {
clientId: String,
clientSecret: String,
): String?

/**
* 소셜 로그인 관련.
*
* postLogin: 로그인
*
* postUser: 연동
*
* deleteUser: 연동 해제
*/
suspend fun getSocialProviders(): GetSocialProvidersResults

suspend fun postLoginFacebook(facebookToken: String)

suspend fun postUserFacebook(facebookToken: String)

suspend fun deleteUserFacebook()

suspend fun postLoginGoogle(googleAccessToken: String)

suspend fun postUserGoogle(googleAccessToken: String)

suspend fun deleteUserGoogle()

suspend fun postLoginKakao(kakaoAccessToken: String)

suspend fun postUserKakao(kakaoAccessToken: String)

suspend fun deleteUserKakao()
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,24 +55,6 @@ class UserRepositoryImpl @Inject constructor(
storage.accessToken.update(response.token)
}

override suspend fun postLoginFacebook(facebookToken: String) {
val response = api._postLoginFacebook(PostSocialLoginParams(facebookToken))
storage.prefKeyUserId.update(response.userId.toOptional())
storage.accessToken.update(response.token)
}

override suspend fun postLoginGoogle(googleAccessToken: String) {
val response = api._postLoginGoogle(PostSocialLoginParams(googleAccessToken))
storage.prefKeyUserId.update(response.userId.toOptional())
storage.accessToken.update(response.token)
}

override suspend fun postLoginKakao(kakaoAccessToken: String) {
val response = api._postLoginKakao(PostSocialLoginParams(kakaoAccessToken))
storage.prefKeyUserId.update(response.userId.toOptional())
storage.accessToken.update(response.token)
}

override suspend fun postSignUp(id: String, password: String, email: String) {
val response = api._postSignUp(PostSignUpParams(id, password, email))
storage.prefKeyUserId.update(response.userId.toOptional())
Expand Down Expand Up @@ -107,10 +89,6 @@ class UserRepositoryImpl @Inject constructor(
storage.accessToken.update(response.token)
}

override suspend fun getUserFacebook(): GetUserFacebookResults {
return api._getUserFacebook()
}

override suspend fun postUserPassword(id: String, password: String) {
val response = api._postUserPassword(
PostUserPasswordParams(
Expand All @@ -121,24 +99,6 @@ class UserRepositoryImpl @Inject constructor(
storage.accessToken.update(response.token)
}

override suspend fun deleteUserFacebook() {
val response = api._deleteUserFacebook()
storage.accessToken.update(response.token)
}

override suspend fun postUserFacebook(
facebookId: String,
facebookToken: String,
) {
val response = api._postUserFacebook(
PostUserFacebookParams(
facebookId = facebookId,
facebookToken = facebookToken,
),
)
storage.accessToken.update(response.token)
}

override suspend fun postFeedback(email: String, detail: String) {
api._postFeedback(PostFeedbackParams(email = email, message = detail))
}
Expand Down Expand Up @@ -305,6 +265,73 @@ class UserRepositoryImpl @Inject constructor(
).accessToken
}

/**
* 소셜 로그인 관련.
*
* postLogin: 로그인
*
* postUser: 연동
*
* deleteUser: 연동 해제
*/
override suspend fun getSocialProviders(): GetSocialProvidersResults {
return api._getSocialProviders()
}

override suspend fun postLoginFacebook(facebookToken: String) {
val response = api._postLoginFacebook(PostSocialLoginParams(facebookToken))
storage.prefKeyUserId.update(response.userId.toOptional())
storage.accessToken.update(response.token)
}

override suspend fun postUserFacebook(
facebookToken: String,
) {
val response = api._postUserFacebook(PostSocialLoginParams(facebookToken))
storage.accessToken.update(response.token)
}

override suspend fun deleteUserFacebook() {
val response = api._deleteUserFacebook()
storage.accessToken.update(response.token)
}

override suspend fun postLoginGoogle(googleAccessToken: String) {
val response = api._postLoginGoogle(PostSocialLoginParams(googleAccessToken))
storage.prefKeyUserId.update(response.userId.toOptional())
storage.accessToken.update(response.token)
}

override suspend fun postUserGoogle(
googleAccessToken: String,
) {
val response = api._postUserGoogle(PostSocialLoginParams(googleAccessToken))
storage.accessToken.update(response.token)
}

override suspend fun deleteUserGoogle() {
val response = api._deleteUserGoogle()
storage.accessToken.update(response.token)
}

override suspend fun postLoginKakao(kakaoAccessToken: String) {
val response = api._postLoginKakao(PostSocialLoginParams(kakaoAccessToken))
storage.prefKeyUserId.update(response.userId.toOptional())
storage.accessToken.update(response.token)
}

override suspend fun postUserKakao(
kakaoAccessToken: String,
) {
val response = api._postUserKakao(PostSocialLoginParams(kakaoAccessToken))
storage.accessToken.update(response.token)
}

override suspend fun deleteUserKakao() {
val response = api._deleteUserKakao()
storage.accessToken.update(response.token)
}

private suspend fun getFirebaseToken(): String {
return suspendCoroutine { cont ->
FirebaseMessaging.getInstance().token.addOnCompleteListener(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ suspend fun facebookLogin(
}

override fun onCancel() {
context.toast(context.getString(R.string.sign_up_facebook_login_failed_toast))
context.toast(context.getString(R.string.sign_in_facebook_failed_cancelled))
continuation.cancel()
}

override fun onError(error: FacebookException) {
context.toast(context.getString(R.string.sign_up_facebook_login_failed_toast))
context.toast(context.getString(R.string.sign_in_facebook_failed_unknown))
continuation.cancel(error)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,21 +121,6 @@ interface SNUTTRestApi {
@Body body: PostSignInParams,
): PostSignInResults

@POST("/v1/auth/login/facebook")
suspend fun _postLoginFacebook(
@Body body: PostSocialLoginParams,
): PostSocialLoginResults

@POST("/v1/auth/login/google")
suspend fun _postLoginGoogle(
@Body body: PostSocialLoginParams,
): PostSocialLoginResults

@POST("/v1/auth/login/kakao")
suspend fun _postLoginKakao(
@Body body: PostSocialLoginParams,
): PostSocialLoginResults

@POST("/v1/auth/logout")
suspend fun _postForceLogout(
@Body body: PostForceLogoutParams,
Expand Down Expand Up @@ -194,17 +179,6 @@ interface SNUTTRestApi {
@Body body: PostUserPasswordParams,
): PostUserPasswordResults

@POST("/v1/user/facebook")
suspend fun _postUserFacebook(
@Body body: PostUserFacebookParams,
): PostUserFacebookResults

@DELETE("/v1/user/facebook")
suspend fun _deleteUserFacebook(): DeleteUserFacebookResults

@GET("/v1/user/facebook")
suspend fun _getUserFacebook(): GetUserFacebookResults

@POST("/v1/user/device/{registration_id}")
suspend fun _registerFirebaseToken(
@Path("registration_id") id: String,
Expand Down Expand Up @@ -302,4 +276,55 @@ interface SNUTTRestApi {
suspend fun _getLectureReviewSummary(
@Path("lectureId") lectureId: String,
): GetLectureReviewSummaryResult

/**
* 소셜 로그인 관련.
*
* POST /auth/login: 로그인
*
* POST /user: 연동
*
* DELETE /user: 연동 해제
*/
@GET("/v1/users/me/social_providers")
suspend fun _getSocialProviders(): GetSocialProvidersResults

@POST("/v1/auth/login/facebook")
suspend fun _postLoginFacebook(
@Body body: PostSocialLoginParams,
): PostSocialLoginResults

@POST("/v1/user/facebook")
suspend fun _postUserFacebook(
@Body body: PostSocialLoginParams,
): PostSocialLinkResults

@DELETE("/v1/user/facebook")
suspend fun _deleteUserFacebook(): DeleteSocialLinkResults

@POST("/v1/auth/login/google")
suspend fun _postLoginGoogle(
@Body body: PostSocialLoginParams,
): PostSocialLoginResults

@POST("/v1/user/google")
suspend fun _postUserGoogle(
@Body body: PostSocialLoginParams,
): PostSocialLinkResults

@DELETE("/v1/user/google")
suspend fun _deleteUserGoogle(): DeleteSocialLinkResults

@POST("/v1/auth/login/kakao")
suspend fun _postLoginKakao(
@Body body: PostSocialLoginParams,
): PostSocialLoginResults

@POST("/v1/user/kakao")
suspend fun _postUserKakao(
@Body body: PostSocialLoginParams,
): PostSocialLinkResults

@DELETE("/v1/user/kakao")
suspend fun _deleteUserKakao(): DeleteSocialLinkResults
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass

@JsonClass(generateAdapter = true)
data class PostUserFacebookResults(
data class DeleteSocialLinkResults(
@Json(name = "token") val token: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.wafflestudio.snutt2.lib.network.dto

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass

@JsonClass(generateAdapter = true)
data class GetSocialProvidersResults(
@Json(name = "local") val local: Boolean,
@Json(name = "facebook") val facebook: Boolean,
@Json(name = "google") val google: Boolean,
@Json(name = "kakao") val kakao: Boolean,
@Json(name = "apple") val apple: Boolean,
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass

@JsonClass(generateAdapter = true)
data class DeleteUserFacebookResults(
data class PostSocialLinkResults(
@Json(name = "token") val token: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ import com.squareup.moshi.JsonClass

@JsonClass(generateAdapter = true)
data class PostSocialLoginParams(
@Json(name = "token") val facebookToken: String,
@Json(name = "token") val token: String,
)

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.wafflestudio.snutt2.model

enum class SocialLoginType {
FACEBOOK,
KAKAO,
GOOGLE,
NONE,
}

fun SocialLoginType.getString(): String {
return when (this) {
SocialLoginType.NONE -> ""
SocialLoginType.FACEBOOK -> "페이스북"
SocialLoginType.GOOGLE -> "구글"
SocialLoginType.KAKAO -> "카카오"
}
}

This file was deleted.

Loading
Loading