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

[FEAT/#80] 구매뷰 / 결제 관련 API 3개 구현 #81

Merged
merged 13 commits into from
Aug 19, 2024
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
12 changes: 12 additions & 0 deletions data/src/main/java/co/orange/data/dataSource/BuyDataSource.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
package co.orange.data.dataSource

import co.orange.data.dto.BaseResponse
import co.orange.data.dto.request.OrderRequestDto
import co.orange.data.dto.request.PayEndRequestDto
import co.orange.data.dto.request.PayStartRequestDto
import co.orange.data.dto.response.BuyProgressDto
import co.orange.data.dto.response.OrderIdDto
import co.orange.data.dto.response.PayEndDto
import co.orange.data.dto.response.PayStartDto

interface BuyDataSource {
suspend fun getBuyProgressData(productId: String): BaseResponse<BuyProgressDto>

suspend fun postPaymentStart(request: PayStartRequestDto): BaseResponse<PayStartDto>

suspend fun patchPaymentEnd(request: PayEndRequestDto): BaseResponse<PayEndDto>

suspend fun postToRequestOrder(request: OrderRequestDto): BaseResponse<OrderIdDto>
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ package co.orange.data.dataSourceImpl

import co.orange.data.dataSource.BuyDataSource
import co.orange.data.dto.BaseResponse
import co.orange.data.dto.request.OrderRequestDto
import co.orange.data.dto.request.PayEndRequestDto
import co.orange.data.dto.request.PayStartRequestDto
import co.orange.data.dto.response.BuyProgressDto
import co.orange.data.dto.response.OrderIdDto
import co.orange.data.dto.response.PayEndDto
import co.orange.data.dto.response.PayStartDto
import co.orange.data.service.BuyService
import javax.inject.Inject

Expand All @@ -12,4 +18,10 @@ data class BuyDataSourceImpl
private val buyService: BuyService,
) : BuyDataSource {
override suspend fun getBuyProgressData(productId: String): BaseResponse<BuyProgressDto> = buyService.getBuyProgressData(productId)

override suspend fun postPaymentStart(request: PayStartRequestDto): BaseResponse<PayStartDto> = buyService.postPaymentStart(request)

override suspend fun patchPaymentEnd(request: PayEndRequestDto): BaseResponse<PayEndDto> = buyService.patchPaymentEnd(request)

override suspend fun postToRequestOrder(request: OrderRequestDto): BaseResponse<OrderIdDto> = buyService.postToRequestOrder(request)
}
19 changes: 19 additions & 0 deletions data/src/main/java/co/orange/data/dto/request/OrderRequestDto.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package co.orange.data.dto.request

import co.orange.domain.entity.request.OrderRequestModel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class OrderRequestDto(
@SerialName("itemId")
val itemId: String,
@SerialName("paymentId")
val paymentId: String,
@SerialName("selectedOptionDetailIdList")
val selectedOptionDetailIdList: List<Long>,
) {
companion object {
fun OrderRequestModel.toDto() = OrderRequestDto(itemId, paymentId, selectedOptionDetailIdList)
}
}
17 changes: 17 additions & 0 deletions data/src/main/java/co/orange/data/dto/request/PayEndRequestDto.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package co.orange.data.dto.request

import co.orange.domain.entity.request.PayEndRequestModel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class PayEndRequestDto(
@SerialName("paymentId")
val paymentId: String,
@SerialName("payStatus")
val payStatus: String,
) {
companion object {
fun PayEndRequestModel.toDto() = PayEndRequestDto(paymentId, payStatus)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package co.orange.data.dto.request

import co.orange.domain.entity.request.PayStartRequestModel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class PayStartRequestDto(
@SerialName("itemId")
val itemId: String,
@SerialName("charge")
val charge: Int,
@SerialName("totalPrice")
val totalPrice: Int,
@SerialName("method")
val method: String,
) {
companion object {
fun PayStartRequestModel.toDto() = PayStartRequestDto(itemId, charge, totalPrice, method)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ data class BuyProgressDto(
val itemId: String,
@SerialName("productName")
val productName: String,
@SerialName("modifiedProductName")
val modifiedProductName: String,
@SerialName("imgUrl")
val imgUrl: String,
@SerialName("originPrice")
Expand All @@ -27,6 +29,7 @@ data class BuyProgressDto(
BuyProgressModel(
itemId,
productName,
modifiedProductName,
imgUrl,
originPrice,
addressInfo.toModel(),
Expand Down
13 changes: 13 additions & 0 deletions data/src/main/java/co/orange/data/dto/response/OrderIdDto.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package co.orange.data.dto.response

import co.orange.domain.entity.response.OrderIdModel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class OrderIdDto(
@SerialName("orderId")
val orderId: String,
) {
fun toModel() = OrderIdModel(orderId)
}
22 changes: 22 additions & 0 deletions data/src/main/java/co/orange/data/dto/response/PayEndDto.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package co.orange.data.dto.response

import co.orange.domain.entity.response.PayEndModel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class PayEndDto(
@SerialName("paymentId")
val paymentId: String,
@SerialName("payStatus")
val payStatus: String,
@SerialName("endedAt")
val endedAt: String,
) {
fun toModel() =
PayEndModel(
paymentId = paymentId,
payStatus = payStatus,
endedAt = endedAt,
)
}
22 changes: 22 additions & 0 deletions data/src/main/java/co/orange/data/dto/response/PayStartDto.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package co.orange.data.dto.response

import co.orange.domain.entity.response.PayStartModel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class PayStartDto(
@SerialName("paymentId")
val paymentId: String,
@SerialName("payStatus")
val payStatus: String,
@SerialName("startedAt")
val startedAt: String,
) {
fun toModel() =
PayStartModel(
paymentId = paymentId,
payStatus = payStatus,
startedAt = startedAt,
)
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
package co.orange.data.repositoryImpl

import co.orange.data.dataSource.BuyDataSource
import co.orange.data.dto.request.OrderRequestDto.Companion.toDto
import co.orange.data.dto.request.PayEndRequestDto.Companion.toDto
import co.orange.data.dto.request.PayStartRequestDto.Companion.toDto
import co.orange.domain.entity.request.OrderRequestModel
import co.orange.domain.entity.request.PayEndRequestModel
import co.orange.domain.entity.request.PayStartRequestModel
import co.orange.domain.entity.response.BuyProgressModel
import co.orange.domain.entity.response.OrderIdModel
import co.orange.domain.entity.response.PayEndModel
import co.orange.domain.entity.response.PayStartModel
import co.orange.domain.repository.BuyRepository
import javax.inject.Inject

Expand All @@ -14,4 +23,19 @@ class BuyRepositoryImpl
runCatching {
buyDataSource.getBuyProgressData(productId).data.toModel()
}

override suspend fun postPaymentStart(request: PayStartRequestModel): Result<PayStartModel> =
runCatching {
buyDataSource.postPaymentStart(request.toDto()).data.toModel()
}

override suspend fun patchPaymentEnd(request: PayEndRequestModel): Result<PayEndModel> =
runCatching {
buyDataSource.patchPaymentEnd(request.toDto()).data.toModel()
}

override suspend fun postToRequestOrder(request: OrderRequestModel): Result<OrderIdModel> =
runCatching {
buyDataSource.postToRequestOrder(request.toDto()).data.toModel()
}
}
24 changes: 24 additions & 0 deletions data/src/main/java/co/orange/data/service/BuyService.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,37 @@
package co.orange.data.service

import co.orange.data.dto.BaseResponse
import co.orange.data.dto.request.OrderRequestDto
import co.orange.data.dto.request.PayEndRequestDto
import co.orange.data.dto.request.PayStartRequestDto
import co.orange.data.dto.response.BuyProgressDto
import co.orange.data.dto.response.OrderIdDto
import co.orange.data.dto.response.PayEndDto
import co.orange.data.dto.response.PayStartDto
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.PATCH
import retrofit2.http.POST
import retrofit2.http.Path

interface BuyService {
@GET("/api/v1/order/product/{id}")
suspend fun getBuyProgressData(
@Path("id") productId: String,
): BaseResponse<BuyProgressDto>

@POST("/api/v1/payment/start")
suspend fun postPaymentStart(
@Body request: PayStartRequestDto,
): BaseResponse<PayStartDto>

@PATCH("/api/v1/payment/end")
suspend fun patchPaymentEnd(
@Body request: PayEndRequestDto,
): BaseResponse<PayEndDto>

@POST("/api/v1/order")
suspend fun postToRequestOrder(
@Body request: OrderRequestDto,
): BaseResponse<OrderIdDto>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package co.orange.domain.entity.request

data class OrderRequestModel(
val itemId: String,
val paymentId: String,
val selectedOptionDetailIdList: List<Long>,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package co.orange.domain.entity.request

data class PayEndRequestModel(
val paymentId: String,
val payStatus: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package co.orange.domain.entity.request

data class PayStartRequestModel(
val itemId: String,
val charge: Int,
val totalPrice: Int,
val method: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package co.orange.domain.entity.response
data class BuyProgressModel(
val itemId: String,
val productName: String,
val modifiedProductName: String,
val imgUrl: String,
val originPrice: Int,
val addressInfo: AddressInfoModel,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package co.orange.domain.entity.response

data class OrderIdModel(
val orderId: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package co.orange.domain.entity.response

data class PayEndModel(
val paymentId: String,
val payStatus: String,
val endedAt: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package co.orange.domain.entity.response

data class PayStartModel(
val paymentId: String,
val payStatus: String,
val startedAt: String,
)
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
package co.orange.domain.repository

import co.orange.domain.entity.request.OrderRequestModel
import co.orange.domain.entity.request.PayEndRequestModel
import co.orange.domain.entity.request.PayStartRequestModel
import co.orange.domain.entity.response.BuyProgressModel
import co.orange.domain.entity.response.OrderIdModel
import co.orange.domain.entity.response.PayEndModel
import co.orange.domain.entity.response.PayStartModel

interface BuyRepository {
suspend fun getBuyProgressData(productId: String): Result<BuyProgressModel>

suspend fun postPaymentStart(request: PayStartRequestModel): Result<PayStartModel>

suspend fun patchPaymentEnd(request: PayEndRequestModel): Result<PayEndModel>

suspend fun postToRequestOrder(request: OrderRequestModel): Result<OrderIdModel>
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class BuyFinishedActivity :
}

private fun getIntentInfo() {
viewModel.productId = intent.getStringExtra(EXTRA_PRODUCT_ID).orEmpty()
viewModel.productId = intent.getStringExtra(EXTRA_ORDER_ID).orEmpty()
}

private fun setIntentUi(item: BuyInfoModel) {
Expand All @@ -65,30 +65,31 @@ class BuyFinishedActivity :
tvFinishedDeliveryName.text = item.addressInfo[0].recipient
tvFinishedDeliveryAddress.text =
getString(
R.string.address_format,
R.string.address_short_format,
item.addressInfo[0].zipCode,
item.addressInfo[0].address,
).breakLines()
tvFinishedDeliveryPhone.text = item.addressInfo[0].recipientPhone
tvFinishedTransactionMethod.text = item.paymentInfo[0].method
tvFinishedTransactionDate.text = item.paymentInfo[0].completedAt
tvFinishedPayMoney.text = item.originPrice.setNumberForm()
tvFinishedPayDiscount.text = getString(R.string.add_minus, item.discountPrice.setNumberForm())
tvFinishedPayDiscount.text =
getString(R.string.add_minus, item.discountPrice.setNumberForm())
tvFinishedPayCharge.text = getString(R.string.add_plus, item.charge.setNumberForm())
tvFinishedPayTotal.text = item.totalPrice.setNumberForm()
}
}

companion object {
private const val EXTRA_PRODUCT_ID = "EXTRA_PRODUCT_ID"
private const val EXTRA_ORDER_ID = "EXTRA_ORDER_ID"

@JvmStatic
fun createIntent(
context: Context,
productId: String,
orderId: String,
): Intent =
Intent(context, BuyFinishedActivity::class.java).apply {
putExtra(EXTRA_PRODUCT_ID, productId)
putExtra(EXTRA_ORDER_ID, orderId)
}
}
}
Loading
Loading