Skip to content

Commit

Permalink
Merge pull request #41 from depromeet/fix/#33-v3
Browse files Browse the repository at this point in the history
[BSVR-148/FEAT] 직관 후기 등록 서버 통신 2차 구현
  • Loading branch information
minju1459 authored Jul 29, 2024
2 parents b1c187e + ebd315d commit 88a6890
Show file tree
Hide file tree
Showing 30 changed files with 745 additions and 209 deletions.
2 changes: 1 addition & 1 deletion buildSrc/build/kotlin/buildSrcjar-classes.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/AndroidXDependencies.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/ClassPathPlugins.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/ComposeDependency.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/Constants.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/DependenciesKt.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/FirebaseDependencies.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/KaptDependencies.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/KotlinDependencies.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/MaterialDesignDependencies.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/TestDependencies.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/ThirdPartyDependencies.class:/Users/ssongsik/AndroidStudioProjects/SPOT-Android/buildSrc/build/classes/kotlin/main/Versions.class
/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/AndroidXDependencies.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/ClassPathPlugins.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/ComposeDependency.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/Constants.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/DependenciesKt.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/FirebaseDependencies.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/KaptDependencies.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/KotlinDependencies.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/MaterialDesignDependencies.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/TestDependencies.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/ThirdPartyDependencies.class:/Users/minju1459/DepromeetAndroid/buildSrc/build/classes/kotlin/main/Versions.class
Binary file modified buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin
Binary file not shown.
Binary file not shown.
Binary file modified buildSrc/build/libs/buildSrc.jar
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.depromeet.data.datasource

import com.depromeet.data.model.request.RequestSeatReviewDto
import com.depromeet.data.model.response.seatReview.ResponsePreSignedUrlDto
import com.depromeet.data.model.response.seatReview.ResponseSeatBlockDto
import com.depromeet.data.model.response.seatReview.ResponseSeatMaxDto
import com.depromeet.data.model.response.seatReview.ResponseSeatRangeDto
import com.depromeet.data.model.response.seatReview.ResponseStadiumNameDto
import com.depromeet.data.model.response.seatReview.ResponseStadiumSectionDto

Expand All @@ -18,12 +19,23 @@ interface SeatReviewDataSource {
sectionId: Int,
): List<ResponseSeatBlockDto>

suspend fun getSeatMaxData(
suspend fun getSeatRangeData(
stadiumId: Int,
sectionId: Int,
): ResponseSeatMaxDto
): List<ResponseSeatRangeDto>

suspend fun postImagePreSignedData(
fileExtension: String,
): ResponsePreSignedUrlDto

suspend fun putReviewImageData(
presignedUrl: String,
image: ByteArray,
)

suspend fun postSeatReviewData(
blockId: Int,
seatNumber: Int,
requestSeatReviewDto: RequestSeatReviewDto,
)
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package com.depromeet.data.datasource.remote

import com.depromeet.data.datasource.SeatReviewDataSource
import com.depromeet.data.model.request.RequestPreSignedUrlDto
import com.depromeet.data.model.request.RequestSeatReviewDto
import com.depromeet.data.model.response.seatReview.ResponsePreSignedUrlDto
import com.depromeet.data.model.response.seatReview.ResponseSeatBlockDto
import com.depromeet.data.model.response.seatReview.ResponseSeatMaxDto
import com.depromeet.data.model.response.seatReview.ResponseSeatRangeDto
import com.depromeet.data.model.response.seatReview.ResponseStadiumNameDto
import com.depromeet.data.model.response.seatReview.ResponseStadiumSectionDto
import com.depromeet.data.remote.SeatReviewService
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody
import javax.inject.Inject

class SeatReviewDataSourceImpl @Inject constructor(
Expand All @@ -29,14 +33,38 @@ class SeatReviewDataSourceImpl @Inject constructor(
return seatReviewService.getSeatBlock(stadiumId, sectionId)
}

override suspend fun getSeatMaxData(
override suspend fun getSeatRangeData(
stadiumId: Int,
sectionId: Int,
): ResponseSeatMaxDto {
return seatReviewService.getSeatMax(stadiumId, sectionId)
): List<ResponseSeatRangeDto> {
return seatReviewService.getSeatRange(stadiumId, sectionId)
}

override suspend fun postSeatReviewData(requestSeatReviewDto: RequestSeatReviewDto) {
return seatReviewService.postSeatReview(requestSeatReviewDto)
override suspend fun postImagePreSignedData(
fileExtension: String,
): ResponsePreSignedUrlDto {
return seatReviewService.postImagePreSignedUrl(
RequestPreSignedUrlDto(fileExtension),
)
}

override suspend fun putReviewImageData(
presignedUrl: String,
image: ByteArray,
) {
val mediaType = "image/*".toMediaTypeOrNull()
return seatReviewService.putProfileImage(presignedUrl, image.toRequestBody(mediaType))
}

override suspend fun postSeatReviewData(
blockId: Int,
seatNumber: Int,
requestSeatReviewDto: RequestSeatReviewDto,
) {
return seatReviewService.postSeatReview(
blockId,
seatNumber,
requestSeatReviewDto,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.depromeet.data.model.request

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

@Serializable
data class RequestPreSignedUrlDto(
@SerialName("fileExtension")
val fileExtension: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,21 @@ import kotlinx.serialization.Serializable

@Serializable
data class RequestSeatReviewDto(
@SerialName("stadiumId")
val stadiumId: Int,
@SerialName("blockId")
val blockId: Int,
@SerialName("rowId")
val rowId: Int,
@SerialName("seatNumber")
val seatNumber: Int,
@SerialName("images")
val images: List<String>,
@SerialName("date")
val date: String,
@SerialName("dateTime")
val dateTime: String,
@SerialName("good")
val good: List<String>,
@SerialName("bad")
val bad: List<String>,
@SerialName("content")
val content: String,
val content: String?,
)

fun SeatReviewModel.toSeatReview() = RequestSeatReviewDto(
stadiumId = stadiumId,
blockId = blockId,
rowId = rowId,
seatNumber = seatNumber,
images = images,
date = date,
dateTime = dateTime,
good = good,
bad = bad,
content = content,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.depromeet.data.model.response.seatReview

import com.depromeet.domain.entity.response.seatReview.ResponsePresignedUrlModel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ResponsePreSignedUrlDto(
@SerialName("presignedUrl")
val presignedUrl: String,
) {

fun toResponsePreSignedUrl(): ResponsePresignedUrlModel {
return ResponsePresignedUrlModel(presignedUrl)
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.depromeet.data.model.response.seatReview

import com.depromeet.domain.entity.response.seatReview.SeatMaxModel
import com.depromeet.domain.entity.response.seatReview.SeatRangeModel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ResponseSeatMaxDto(
data class ResponseSeatRangeDto(
@SerialName("id")
val id: Int,
@SerialName("code")
Expand All @@ -19,23 +19,20 @@ data class ResponseSeatMaxDto(
val id: Int,
@SerialName("number")
val number: Int,
@SerialName("minSeatNum")
val minSeatNum: Int,
@SerialName("maxSeatNum")
val maxSeatNum: Int,
@SerialName("seatNumList")
val seatNumList: List<Int>,
) {
fun toRowInfo(): SeatMaxModel.RowInfo {
return SeatMaxModel.RowInfo(
fun toRowInfo(): SeatRangeModel.RowInfo {
return SeatRangeModel.RowInfo(
id = id,
number = number,
minSeatNum = minSeatNum,
maxSeatNum = maxSeatNum,
seatNumList = seatNumList,
)
}
}

fun toSeatMax(): SeatMaxModel {
return SeatMaxModel(
fun toSeatRange(): SeatRangeModel {
return SeatRangeModel(
id = id,
code = code,
rowInfo = rowInfo.map { it.toRowInfo() },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,14 @@ data class ResponseStadiumNameDto(
val id: Int,
@SerialName("name")
val name: String,
@SerialName("isActive")
val isActive: Boolean,
) {
fun toStadiumName(): StadiumNameModel {
return StadiumNameModel(
id = id,
name = name,
isActive = isActive,
)
}
}
26 changes: 22 additions & 4 deletions data/src/main/java/com/depromeet/data/remote/SeatReviewService.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package com.depromeet.data.remote

import com.depromeet.data.model.request.RequestPreSignedUrlDto
import com.depromeet.data.model.request.RequestSeatReviewDto
import com.depromeet.data.model.response.seatReview.ResponsePreSignedUrlDto
import com.depromeet.data.model.response.seatReview.ResponseSeatBlockDto
import com.depromeet.data.model.response.seatReview.ResponseSeatMaxDto
import com.depromeet.data.model.response.seatReview.ResponseSeatRangeDto
import com.depromeet.data.model.response.seatReview.ResponseStadiumNameDto
import com.depromeet.data.model.response.seatReview.ResponseStadiumSectionDto
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.PUT
import retrofit2.http.Path
import retrofit2.http.Url

interface SeatReviewService {
@GET("/api/v1/stadiums/names")
Expand All @@ -26,13 +31,26 @@ interface SeatReviewService {
): List<ResponseSeatBlockDto>

@GET("/api/v1/stadiums/{stadiumId}/sections/{sectionId}/blocks/rows")
suspend fun getSeatMax(
suspend fun getSeatRange(
@Path("stadiumId") stadiumId: Int,
@Path("sectionId") sectionId: Int,
): ResponseSeatMaxDto
): List<ResponseSeatRangeDto>

@POST("/api/v1/reviews")
@POST("/api/v1/reviews/images")
suspend fun postImagePreSignedUrl(
@Body body: RequestPreSignedUrlDto,
): ResponsePreSignedUrlDto

@PUT
suspend fun putProfileImage(
@Url preSignedUrl: String,
@Body image: RequestBody,
)

@POST("/api/v1/blocks/{blockId}/seats/{seatNumber}/reviews")
suspend fun postSeatReview(
@Path("blockId") blockId: Int,
@Path("seatNumber") seatNumber: Int,
@Body requestPostSignupDto: RequestSeatReviewDto,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package com.depromeet.data.repository
import com.depromeet.data.datasource.SeatReviewDataSource
import com.depromeet.data.model.request.toSeatReview
import com.depromeet.domain.entity.request.SeatReviewModel
import com.depromeet.domain.entity.response.seatReview.ResponsePresignedUrlModel
import com.depromeet.domain.entity.response.seatReview.SeatBlockModel
import com.depromeet.domain.entity.response.seatReview.SeatMaxModel
import com.depromeet.domain.entity.response.seatReview.SeatRangeModel
import com.depromeet.domain.entity.response.seatReview.StadiumNameModel
import com.depromeet.domain.entity.response.seatReview.StadiumSectionModel
import com.depromeet.domain.repository.SeatReviewRepository
Expand Down Expand Up @@ -41,23 +42,47 @@ class SeatReviewRepositoryImpl @Inject constructor(
}
}

override suspend fun getSeatMax(
override suspend fun getSeatRange(
stadiumId: Int,
sectionId: Int,
): Result<SeatMaxModel?> {
): Result<List<SeatRangeModel>> {
return runCatching {
seatReviewDataSource.getSeatMaxData(
stadiumId,
sectionId,
).toSeatMax()
val response = seatReviewDataSource.getSeatRangeData(stadiumId, sectionId)
response.map { it.toSeatRange() }
}
}

override suspend fun postReviewImagePresigned(
fileExtension: String,
): Result<ResponsePresignedUrlModel> {
return runCatching {
seatReviewDataSource.postImagePreSignedData(
fileExtension,
).toResponsePreSignedUrl()
}
}

override suspend fun putImagePreSignedUrl(
presignedUrl: String,
image: ByteArray,
): Result<Unit> {
return runCatching {
seatReviewDataSource.putReviewImageData(
presignedUrl,
image,
)
}
}

override suspend fun postSeatReview(
blockId: Int,
seatNumber: Int,
seatReviewInfo: SeatReviewModel,
): Result<Unit> {
return runCatching {
seatReviewDataSource.postSeatReviewData(
blockId,
seatNumber,
seatReviewInfo.toSeatReview(),
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.depromeet.domain.entity.request

data class RequestUploadUrlModel(
val fileExtension: String,
)
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
package com.depromeet.domain.entity.request

data class SeatReviewModel(
val stadiumId: Int,
val blockId: Int,
val rowId: Int,
val seatNumber: Int,
val images: List<String>,
val date: String,
val dateTime: String,
val good: List<String>,
val bad: List<String>,
val content: String,
val content: String?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.depromeet.domain.entity.response.seatReview

data class ResponsePresignedUrlModel(
val presignedUrl: String = "",
)
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.depromeet.domain.entity.response.seatReview

data class SeatMaxModel(
data class SeatRangeModel(
val id: Int,
val code: String,
val rowInfo: List<RowInfo>,
) {
data class RowInfo(
val id: Int,
val number: Int,
val minSeatNum: Int,
val maxSeatNum: Int,
val seatNumList: List<Int>,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ package com.depromeet.domain.entity.response.seatReview
data class StadiumNameModel(
var id: Int,
val name: String,
val isActive: Boolean
)
Loading

0 comments on commit 88a6890

Please sign in to comment.