커뮤니티 게시글 등록

- 유료 게시글 등록을 위해 가격 설정 추가
This commit is contained in:
2024-05-23 00:05:35 +09:00
parent 6fac6ecd4d
commit 5d42e2b16e
4 changed files with 225 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ import com.google.gson.annotations.SerializedName
data class CreateCommunityPostRequest(
@SerializedName("content") val content: String,
@SerializedName("price") val price: Int,
@SerializedName("isAdult") val isAdult: Boolean,
@SerializedName("isCommentAvailable") val isCommentAvailable: Boolean
)

View File

@@ -101,6 +101,8 @@ class CreatorCommunityWriteActivity : BaseActivity<ActivityCreatorCommunityWrite
binding.llCommentNo.setOnClickListener { viewModel.setAvailableComment(false) }
binding.llCommentYes.setOnClickListener { viewModel.setAvailableComment(true) }
binding.llPricePaid.setOnClickListener { viewModel.setPriceFree(false) }
binding.llPriceFree.setOnClickListener { viewModel.setPriceFree(true) }
binding.tvCancel.setOnClickListener { finish() }
binding.tvUpload.setOnClickListener {
viewModel.createCommunityPost { finish() }
@@ -140,6 +142,24 @@ class CreatorCommunityWriteActivity : BaseActivity<ActivityCreatorCommunityWrite
}
)
compositeDisposable.add(
binding.etPrice.textChanges().skip(1)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
val price = it.toString().toIntOrNull()
if (price != null) {
viewModel.price = price.toInt()
} else {
viewModel.price = 0
if (it.isNotBlank()) {
binding.etPrice.setText(it.substring(0, it.length - 1))
binding.etPrice.setSelection(it.length - 1)
}
}
}
)
viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() }
}
@@ -195,6 +215,14 @@ class CreatorCommunityWriteActivity : BaseActivity<ActivityCreatorCommunityWrite
}
}
viewModel.isPriceFreeLiveData.observe(this) {
if (it) {
checkPriceFree()
} else {
checkPricePaid()
}
}
if (SharedPreferenceManager.isAuth) {
binding.llAgeAll.setOnClickListener {
viewModel.setAdult(false)
@@ -245,4 +273,54 @@ class CreatorCommunityWriteActivity : BaseActivity<ActivityCreatorCommunityWrite
}
}
}
private fun checkPriceFree() {
viewModel.price = 0
binding.etPrice.setText("0")
binding.rlPrice.visibility = View.GONE
binding.ivPriceFree.visibility = View.VISIBLE
binding.tvPriceFree.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_eeeeee
)
)
binding.llPriceFree.setBackgroundResource(R.drawable.bg_round_corner_6_7_3bb9f1)
binding.ivPricePaid.visibility = View.GONE
binding.tvPricePaid.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_3bb9f1
)
)
binding.llPricePaid.setBackgroundResource(
R.drawable.bg_round_corner_6_7_13181b
)
}
private fun checkPricePaid() {
binding.rlPrice.visibility = View.VISIBLE
binding.ivPricePaid.visibility = View.VISIBLE
binding.tvPricePaid.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_eeeeee
)
)
binding.llPricePaid.setBackgroundResource(R.drawable.bg_round_corner_6_7_3bb9f1)
binding.ivPriceFree.visibility = View.GONE
binding.tvPriceFree.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_3bb9f1
)
)
binding.llPriceFree.setBackgroundResource(
R.drawable.bg_round_corner_6_7_13181b
)
}
}

View File

@@ -18,8 +18,9 @@ import okhttp3.RequestBody.Companion.toRequestBody
import okio.BufferedSink
import java.io.File
class CreatorCommunityWriteViewModel(private val repository: CreatorCommunityRepository
): BaseViewModel() {
class CreatorCommunityWriteViewModel(
private val repository: CreatorCommunityRepository
) : BaseViewModel() {
private val _toastLiveData = MutableLiveData<String?>()
val toastLiveData: LiveData<String?>
get() = _toastLiveData
@@ -36,8 +37,13 @@ class CreatorCommunityWriteViewModel(private val repository: CreatorCommunityRep
val isAvailableCommentLiveData: LiveData<Boolean>
get() = _isAvailableCommentLiveData
private val _isPriceFreeLiveData = MutableLiveData(true)
val isPriceFreeLiveData: LiveData<Boolean>
get() = _isPriceFreeLiveData
lateinit var getRealPathFromURI: (Uri) -> String?
var price = 0
var content = ""
var imageUri: Uri? = null
@@ -49,12 +55,17 @@ class CreatorCommunityWriteViewModel(private val repository: CreatorCommunityRep
_isAvailableCommentLiveData.postValue(isAvailableComment)
}
fun setPriceFree(isPriceFree: Boolean) {
_isPriceFreeLiveData.postValue(isPriceFree)
}
fun createCommunityPost(onSuccess: () -> Unit) {
if (!_isLoading.value!! && validateData()) {
_isLoading.postValue(true)
val request = CreateCommunityPostRequest(
content = content,
price = price,
isAdult = _isAdultLiveData.value!!,
isCommentAvailable = _isAvailableCommentLiveData.value!!
)
@@ -131,6 +142,16 @@ class CreatorCommunityWriteViewModel(private val repository: CreatorCommunityRep
return false
}
try {
if (!isPriceFreeLiveData.value!! && price < 5) {
_toastLiveData.postValue("최소금액은 5캔 입니다.")
return false
}
} catch (e: Exception) {
_toastLiveData.postValue("가격은 숫자만 입력 가능 합니다.")
return false
}
return true
}
}