diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreService.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreService.kt index 4271767f..ab2e4b1d 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreService.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreService.kt @@ -4,12 +4,20 @@ import com.sangdol.common.persistence.IDGenerator import com.sangdol.roomescape.admin.business.AdminService import com.sangdol.roomescape.common.types.AuditingInfo import com.sangdol.roomescape.region.business.RegionService +import com.sangdol.roomescape.store.dto.DetailStoreResponse +import com.sangdol.roomescape.store.dto.StoreNameListResponse +import com.sangdol.roomescape.store.dto.StoreInfoResponse +import com.sangdol.roomescape.store.dto.StoreRegisterRequest +import com.sangdol.roomescape.store.dto.StoreRegisterResponse +import com.sangdol.roomescape.store.dto.StoreUpdateRequest import com.sangdol.roomescape.store.exception.StoreErrorCode import com.sangdol.roomescape.store.exception.StoreException import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity import com.sangdol.roomescape.store.infrastructure.persistence.StoreRepository import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus -import com.sangdol.roomescape.store.web.* +import com.sangdol.roomescape.store.mapper.toDetailResponse +import com.sangdol.roomescape.store.mapper.toInfoResponse +import com.sangdol.roomescape.store.mapper.toSimpleListResponse import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KotlinLogging import org.springframework.stereotype.Service @@ -85,7 +93,7 @@ class StoreService( } @Transactional(readOnly = true) - fun getAllActiveStores(sidoCode: String?, sigunguCode: String?): SimpleStoreListResponse { + fun getAllActiveStores(sidoCode: String?, sigunguCode: String?): StoreNameListResponse { log.info { "[getAllActiveStores] 전체 매장 조회 시작" } val regionCode: String? = when { diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreValidator.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreValidator.kt index 65d5708e..3a9538e7 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreValidator.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreValidator.kt @@ -3,8 +3,8 @@ package com.sangdol.roomescape.store.business import com.sangdol.roomescape.store.exception.StoreErrorCode import com.sangdol.roomescape.store.exception.StoreException import com.sangdol.roomescape.store.infrastructure.persistence.StoreRepository -import com.sangdol.roomescape.store.web.StoreRegisterRequest -import com.sangdol.roomescape.store.web.StoreUpdateRequest +import com.sangdol.roomescape.store.dto.StoreRegisterRequest +import com.sangdol.roomescape.store.dto.StoreUpdateRequest import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KotlinLogging import org.springframework.stereotype.Component diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/docs/StoreAPI.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/docs/StoreAPI.kt index 20e93eb9..585e6ce6 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/store/docs/StoreAPI.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/docs/StoreAPI.kt @@ -5,7 +5,12 @@ import com.sangdol.roomescape.admin.infrastructure.persistence.AdminType import com.sangdol.roomescape.admin.infrastructure.persistence.Privilege import com.sangdol.roomescape.auth.web.support.AdminOnly import com.sangdol.roomescape.auth.web.support.Public -import com.sangdol.roomescape.store.web.* +import com.sangdol.roomescape.store.dto.DetailStoreResponse +import com.sangdol.roomescape.store.dto.StoreNameListResponse +import com.sangdol.roomescape.store.dto.StoreInfoResponse +import com.sangdol.roomescape.store.dto.StoreRegisterRequest +import com.sangdol.roomescape.store.dto.StoreRegisterResponse +import com.sangdol.roomescape.store.dto.StoreUpdateRequest import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.responses.ApiResponse import io.swagger.v3.oas.annotations.responses.ApiResponses @@ -53,7 +58,7 @@ interface PublicStoreAPI { fun getStores( @RequestParam(value = "sido", required = false) sidoCode: String?, @RequestParam(value = "sigungu", required = false) sigunguCode: String? - ): ResponseEntity> + ): ResponseEntity> @Public @Operation(summary = "특정 매장의 정보 조회") diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/dto/AdminStoreWriteDTO.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/dto/AdminStoreWriteDTO.kt new file mode 100644 index 00000000..35b03076 --- /dev/null +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/dto/AdminStoreWriteDTO.kt @@ -0,0 +1,22 @@ +package com.sangdol.roomescape.store.dto + +import com.sangdol.roomescape.common.types.AuditingInfo +import com.sangdol.roomescape.region.web.RegionInfoResponse + +data class StoreRegisterRequest( + val name: String, + val address: String, + val contact: String, + val businessRegNum: String, + val regionCode: String +) + +data class StoreRegisterResponse( + val id: Long +) + +data class StoreUpdateRequest( + val name: String? = null, + val address: String? = null, + val contact: String? = null, +) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/dto/StoreFindDTO.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/dto/StoreFindDTO.kt new file mode 100644 index 00000000..d2640261 --- /dev/null +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/dto/StoreFindDTO.kt @@ -0,0 +1,31 @@ +package com.sangdol.roomescape.store.dto + +import com.sangdol.roomescape.common.types.AuditingInfo +import com.sangdol.roomescape.region.web.RegionInfoResponse + +data class StoreNameResponse( + val id: Long, + val name: String +) + +data class StoreNameListResponse( + val stores: List +) + +data class StoreInfoResponse( + val id: Long, + val name: String, + val address: String, + val contact: String, + val businessRegNum: String +) + +data class DetailStoreResponse( + val id: Long, + val name: String, + val address: String, + val contact: String, + val businessRegNum: String, + val region: RegionInfoResponse, + val audit: AuditingInfo +) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/mapper/StoreMappingExtensions.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/mapper/StoreMappingExtensions.kt new file mode 100644 index 00000000..2b2f69e6 --- /dev/null +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/mapper/StoreMappingExtensions.kt @@ -0,0 +1,34 @@ +package com.sangdol.roomescape.store.mapper + +import com.sangdol.roomescape.common.types.AuditingInfo +import com.sangdol.roomescape.region.web.RegionInfoResponse +import com.sangdol.roomescape.store.dto.DetailStoreResponse +import com.sangdol.roomescape.store.dto.StoreInfoResponse +import com.sangdol.roomescape.store.dto.StoreNameListResponse +import com.sangdol.roomescape.store.dto.StoreNameResponse +import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity + +fun StoreEntity.toInfoResponse() = StoreInfoResponse( + id = this.id, + name = this.name, + address = this.address, + contact = this.contact, + businessRegNum = this.businessRegNum +) + +fun StoreEntity.toDetailResponse( + region: RegionInfoResponse, + audit: AuditingInfo +) = DetailStoreResponse( + id = this.id, + name = this.name, + address = this.address, + contact = this.contact, + businessRegNum = this.businessRegNum, + region = region, + audit = audit, +) + +fun List.toSimpleListResponse() = StoreNameListResponse( + stores = this.map { StoreNameResponse(id = it.id, name = it.name) } +) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/web/AdminStoreController.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/web/AdminStoreController.kt index f609043b..2074ae9f 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/store/web/AdminStoreController.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/web/AdminStoreController.kt @@ -3,6 +3,10 @@ package com.sangdol.roomescape.store.web import com.sangdol.common.types.web.CommonApiResponse import com.sangdol.roomescape.store.business.StoreService import com.sangdol.roomescape.store.docs.AdminStoreAPI +import com.sangdol.roomescape.store.dto.DetailStoreResponse +import com.sangdol.roomescape.store.dto.StoreRegisterRequest +import com.sangdol.roomescape.store.dto.StoreRegisterResponse +import com.sangdol.roomescape.store.dto.StoreUpdateRequest import jakarta.validation.Valid import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.* diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/web/AdminStoreDto.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/web/AdminStoreDto.kt deleted file mode 100644 index 193e719b..00000000 --- a/service/src/main/kotlin/com/sangdol/roomescape/store/web/AdminStoreDto.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.sangdol.roomescape.store.web - -import com.sangdol.roomescape.common.types.AuditingInfo -import com.sangdol.roomescape.region.web.RegionInfoResponse -import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity - -data class StoreRegisterRequest( - val name: String, - val address: String, - val contact: String, - val businessRegNum: String, - val regionCode: String -) - -data class StoreRegisterResponse( - val id: Long -) - -data class StoreUpdateRequest( - val name: String? = null, - val address: String? = null, - val contact: String? = null, -) - -data class DetailStoreResponse( - val id: Long, - val name: String, - val address: String, - val contact: String, - val businessRegNum: String, - val region: RegionInfoResponse, - val audit: AuditingInfo -) - -fun StoreEntity.toDetailResponse( - region: RegionInfoResponse, - audit: AuditingInfo -) = DetailStoreResponse( - id = this.id, - name = this.name, - address = this.address, - contact = this.contact, - businessRegNum = this.businessRegNum, - region = region, - audit = audit, -) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/web/StoreController.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/web/StoreController.kt index 5afac648..f72cf19e 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/store/web/StoreController.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/web/StoreController.kt @@ -3,6 +3,8 @@ package com.sangdol.roomescape.store.web import com.sangdol.common.types.web.CommonApiResponse import com.sangdol.roomescape.store.business.StoreService import com.sangdol.roomescape.store.docs.PublicStoreAPI +import com.sangdol.roomescape.store.dto.StoreNameListResponse +import com.sangdol.roomescape.store.dto.StoreInfoResponse import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable @@ -18,7 +20,7 @@ class StoreController( override fun getStores( @RequestParam(value = "sido", required = false) sidoCode: String?, @RequestParam(value = "sigungu", required = false) sigunguCode: String? - ): ResponseEntity> { + ): ResponseEntity> { val response = storeService.getAllActiveStores(sidoCode, sigunguCode) return ResponseEntity.ok(CommonApiResponse(response)) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/web/StoreDTO.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/web/StoreDTO.kt deleted file mode 100644 index 0e6e3934..00000000 --- a/service/src/main/kotlin/com/sangdol/roomescape/store/web/StoreDTO.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.sangdol.roomescape.store.web - -import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity - -data class SimpleStoreResponse( - val id: Long, - val name: String -) - -data class SimpleStoreListResponse( - val stores: List -) - -fun List.toSimpleListResponse() = SimpleStoreListResponse( - stores = this.map { SimpleStoreResponse(id = it.id, name = it.name) } -) - -data class StoreInfoResponse( - val id: Long, - val name: String, - val address: String, - val contact: String, - val businessRegNum: String -) - -fun StoreEntity.toInfoResponse() = StoreInfoResponse( - id = this.id, - name = this.name, - address = this.address, - contact = this.contact, - businessRegNum = this.businessRegNum -) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/theme/dto/UserThemeFindDTO.kt b/service/src/main/kotlin/com/sangdol/roomescape/theme/dto/ThemeFindDTO.kt similarity index 100% rename from service/src/main/kotlin/com/sangdol/roomescape/theme/dto/UserThemeFindDTO.kt rename to service/src/main/kotlin/com/sangdol/roomescape/theme/dto/ThemeFindDTO.kt diff --git a/service/src/test/kotlin/com/sangdol/roomescape/store/AdminStoreApiTest.kt b/service/src/test/kotlin/com/sangdol/roomescape/store/AdminStoreApiTest.kt index 9b1f77a8..03418739 100644 --- a/service/src/test/kotlin/com/sangdol/roomescape/store/AdminStoreApiTest.kt +++ b/service/src/test/kotlin/com/sangdol/roomescape/store/AdminStoreApiTest.kt @@ -9,7 +9,7 @@ import com.sangdol.roomescape.store.exception.StoreErrorCode import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity import com.sangdol.roomescape.store.infrastructure.persistence.StoreRepository import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus -import com.sangdol.roomescape.store.web.StoreUpdateRequest +import com.sangdol.roomescape.store.dto.StoreUpdateRequest import com.sangdol.roomescape.supports.* import io.kotest.assertions.assertSoftly import io.kotest.matchers.date.shouldBeAfter diff --git a/service/src/test/kotlin/com/sangdol/roomescape/supports/Fixtures.kt b/service/src/test/kotlin/com/sangdol/roomescape/supports/Fixtures.kt index 50145d77..48fcf989 100644 --- a/service/src/test/kotlin/com/sangdol/roomescape/supports/Fixtures.kt +++ b/service/src/test/kotlin/com/sangdol/roomescape/supports/Fixtures.kt @@ -16,7 +16,7 @@ import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity import com.sangdol.roomescape.schedule.web.ScheduleCreateRequest import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus -import com.sangdol.roomescape.store.web.StoreRegisterRequest +import com.sangdol.roomescape.store.dto.StoreRegisterRequest import com.sangdol.roomescape.theme.infrastructure.persistence.Difficulty import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeEntity import com.sangdol.roomescape.theme.dto.ThemeCreateRequest