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

#52 / 기념일 서버통신 & 로직 구현 완료 #66

Merged
merged 4 commits into from
Jul 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ package sopt.uni.data.repository.onboarding
interface OnBoardingRepository {

suspend fun patchNickName(nickname: String)

suspend fun postStartDate(startDate: String)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package sopt.uni.data.repository.onboarding

import sopt.uni.data.service.OnBoardingService
import sopt.uni.data.source.remote.request.RequestNickNameDto
import sopt.uni.data.source.remote.request.RequestStartDateDto
import javax.inject.Inject

class OnBoardingRepositoryImpl @Inject constructor(
Expand All @@ -11,4 +12,8 @@ class OnBoardingRepositoryImpl @Inject constructor(
override suspend fun patchNickName(nickname: String) {
onBoardingService.patchNickName(RequestNickNameDto(nickname))
}

override suspend fun postStartDate(startDate: String) {
onBoardingService.postStartDate(RequestStartDateDto(startDate))
}
}
8 changes: 8 additions & 0 deletions app/src/main/java/sopt/uni/data/service/OnBoardingService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,21 @@ package sopt.uni.data.service

import retrofit2.http.Body
import retrofit2.http.PATCH
import retrofit2.http.POST
import sopt.uni.data.source.remote.request.RequestNickNameDto
import sopt.uni.data.source.remote.request.RequestStartDateDto
import sopt.uni.data.source.remote.response.ResponseNickNameDto
import sopt.uni.data.source.remote.response.ResponseStartDateDto

interface OnBoardingService {

@PATCH("api/user")
suspend fun patchNickName(
@Body request: RequestNickNameDto,
): ResponseNickNameDto

@POST("api/couple")
suspend fun postStartDate(
@Body request: RequestStartDateDto,
): ResponseStartDateDto
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package sopt.uni.data.source.remote.request

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class RequestStartDateDto(
@SerialName("startDate")
val startDate: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package sopt.uni.data.source.remote.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ResponseStartDateDto(
@SerialName("heartToken")
val heartToken: Int,
@SerialName("id")
val id: Int,
@SerialName("inviteCode")
val inviteCode: String,
@SerialName("startDate")
val startDate: String,
)
8 changes: 7 additions & 1 deletion app/src/main/java/sopt/uni/presentation/SplashActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import sopt.uni.R
import sopt.uni.data.datasource.local.SparkleStorage
import sopt.uni.databinding.ActivitySplashBinding
import sopt.uni.presentation.invite.NickNameActivity
import sopt.uni.presentation.onboarding.OnBoardingActivity
import sopt.uni.util.binding.BindingActivity
import sopt.uni.util.extension.startActivity
Expand All @@ -19,7 +21,11 @@ class SplashActivity : BindingActivity<ActivitySplashBinding>(R.layout.activity_

lifecycleScope.launch {
delay(2000)
startActivity<OnBoardingActivity>()
if (SparkleStorage.accessToken != null) {
startActivity<NickNameActivity>()
} else {
startActivity<OnBoardingActivity>()
}
overridePendingTransition(0, 0)
finish()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ import sopt.uni.R

@BindingAdapter("setNicknameErrorMessage")
fun setNicknameErrorMessage(view: TextView, length: Int) {
if (length == 0) {
view.visibility = View.VISIBLE
} else if (length in 1..10) {
if (length in 0..10) {
view.visibility = View.INVISIBLE
} else {
view.text = "글자 수를 초과했어요"
Expand Down
17 changes: 17 additions & 0 deletions app/src/main/java/sopt/uni/presentation/invite/DdayActivity.kt
Original file line number Diff line number Diff line change
@@ -1,25 +1,37 @@
package sopt.uni.presentation.invite

import android.os.Bundle
import androidx.activity.viewModels
import dagger.hilt.android.AndroidEntryPoint
import sopt.uni.R
import sopt.uni.databinding.ActivityDDayBinding
import sopt.uni.util.DateUtil
import sopt.uni.util.binding.BindingActivity
import sopt.uni.util.extension.setOnSingleClickListener
import sopt.uni.util.extension.startActivity
import timber.log.Timber
import java.util.Calendar

@AndroidEntryPoint
class DdayActivity : BindingActivity<ActivityDDayBinding>(R.layout.activity_d_day) {
private val dDayViewModel by viewModels<DdayViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)

setMaxDate()
moveToShareInviteCode()
moveToPrevPage()
}

private fun moveToShareInviteCode() {
val formatedDate =
binding.dpDDay.year.toString() + "-" + DateUtil.formatedMonth(binding.dpDDay.month) + "-" + DateUtil.formatedDay(
binding.dpDDay.dayOfMonth,
)
Comment on lines +28 to +31
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

나중에 좋은거 있으면 유틸로 빼~

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

빼줘잉

binding.btnNext.setOnSingleClickListener {
Timber.e(formatedDate)
dDayViewModel.postStartDate(formatedDate)
startActivity<ShareInviteCodeActivity>()
}
}
Expand All @@ -29,4 +41,9 @@ class DdayActivity : BindingActivity<ActivityDDayBinding>(R.layout.activity_d_da
finish()
}
}

private fun setMaxDate() {
val calendar = Calendar.getInstance()
binding.dpDDay.maxDate = calendar.timeInMillis
}
}
27 changes: 27 additions & 0 deletions app/src/main/java/sopt/uni/presentation/invite/DdayViewModel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package sopt.uni.presentation.invite

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import sopt.uni.data.repository.onboarding.OnBoardingRepository
import timber.log.Timber
import javax.inject.Inject

@HiltViewModel
class DdayViewModel @Inject constructor(
private val onBoardingRepository: OnBoardingRepository,
) : ViewModel() {

fun postStartDate(startDate: String) {
viewModelScope.launch {
kotlin.runCatching {
onBoardingRepository.postStartDate(startDate = startDate)
}.fold({
Timber.d("기념일 갱신이 완료되었습니다.")
}, {
Timber.d("기념일 갱신이 실패했습니다.")
})
}
}
}
10 changes: 10 additions & 0 deletions app/src/main/java/sopt/uni/presentation/invite/NickNameActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.graphics.Rect
import android.os.Bundle
import android.view.MotionEvent
import android.view.MotionEvent.ACTION_DOWN
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import androidx.activity.viewModels
Expand All @@ -23,6 +24,7 @@ class NickNameActivity : BindingActivity<ActivityNicknameBinding>(R.layout.activ

binding.viewModel = nickNameViewModel

blockSpaceNickName()
moveToInviteHub()
moveToPrevPage()
}
Expand All @@ -40,6 +42,14 @@ class NickNameActivity : BindingActivity<ActivityNicknameBinding>(R.layout.activ
}
}

private fun blockSpaceNickName() {
if (nickNameViewModel.nickName.value.filterNot { it.isWhitespace() }.isEmpty()) {
binding.etNickname.background = getDrawable(R.drawable.bg_mypage_edit_text_error)
binding.tvNicknameErrorMessage.text = "공백으로 시작할 수 없어요"
binding.tvNicknameErrorMessage.visibility = View.VISIBLE
}
}

override fun dispatchTouchEvent(event: MotionEvent?): Boolean {
if (event?.action === ACTION_DOWN) {
val v = currentFocus
Expand Down
21 changes: 21 additions & 0 deletions app/src/main/java/sopt/uni/util/DateUtil.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package sopt.uni.util

object DateUtil {
fun formatedMonth(month: Int) =
if (month <= 0 || month > 12) {
throw IllegalArgumentException("month can not be less than equal 0")
} else if (month < 10) {
"0$month"
} else {
"$month"
}

fun formatedDay(day: Int) =
if (day <= 0 || day > 31) {
throw IllegalArgumentException("day can not be less than equal 0 or greater than 31")
} else if (day < 10) {
"0$day"
} else {
"$day"
}
}
8 changes: 5 additions & 3 deletions app/src/main/res/layout/activity_d_day.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<data>

Expand Down Expand Up @@ -45,15 +46,16 @@
app:layout_constraintTop_toBottomOf="@id/tv_d_day_title" />

<DatePicker
android:id="@+id/dp_d_day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:calendarViewShown="false"
android:datePickerMode="spinner"
android:maxDate="07/14/2023"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_d_day_description" />
app:layout_constraintTop_toBottomOf="@id/tv_d_day_description"
tools:maxDate="07/14/2023" />

<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_next"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/activity_nickname.xml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
setNicknameErrorMessage="@{viewModel.nickName.length()}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/mypage_profil_edit_errortext_zero"
android:text="@string/over_nickname"
android:textColor="@color/Red_500"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@+id/tv_nickname_count"
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -197,5 +197,6 @@
<!-- MissionRecord dialog -->
<string name="mission_record_cancel_dialog_title">승부를 이대로 중단하시나요?</string>
<string name="mission_record_cancel_dialog_body">소모된 하트는 다시 돌아오지 않아요</string>

<string name="over_nickname">글자수를 초과했어요</string>

</resources>
Loading