From 8be3180472bc223a2287d56ea552be46bf490bef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=80=E1=85=B5=E1=84=92?= =?UTF-8?q?=E1=85=A7=E1=86=AB?= Date: Sun, 20 Apr 2025 02:30:07 +0900 Subject: [PATCH 1/9] =?UTF-8?q?refactor/#117:=20Admin=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EB=A0=88=EC=9D=B4=EC=96=B4=20DTO=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=20=EB=B0=8F=20Params=20=EA=B0=9D=EC=B2=B4=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RepositoryImpl/AdminRepositoryImpl.swift | 189 +++++++++--------- .../Domain/UseCaseImpl/AdminUseCaseImpl.swift | 44 ++-- .../Entity/AdminResponse/AdminStore.swift | 8 + .../AdminResponse/AdminStoreDetail.swift | 26 +++ .../AdminResponse/Params/AdminParams.swift | 49 +++++ .../Repository/AdminRepository.swift | 21 +- .../UseCase/AdminUseCase.swift | 22 +- .../Scene/Admin/AdminReactor.swift | 12 +- .../PopUpStoreRegisterReactor.swift | 67 +++---- .../Scene/Admin/AdminViewController.swift | 66 ++++-- .../Scene/MyPage/Main/MyPageReactor.swift | 11 +- 11 files changed, 305 insertions(+), 210 deletions(-) create mode 100644 Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift create mode 100644 Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift create mode 100644 Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/Params/AdminParams.swift diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift index 71de6881..46cf88d8 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift @@ -1,5 +1,4 @@ import Foundation - import Alamofire import RxSwift @@ -15,7 +14,7 @@ final class AdminRepositoryImpl: AdminRepository { } // MARK: - Store Methods - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable { + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> { let endpoint = AdminAPIEndpoint.fetchStoreList( query: query, page: page, @@ -25,131 +24,135 @@ final class AdminRepositoryImpl: AdminRepository { with: endpoint, interceptor: tokenInterceptor ) + .map { response in + response.popUpStoreList?.map { + AdminStore(id: $0.id, name: $0.name, categoryName: $0.categoryName, mainImageUrl: $0.mainImageUrl) + } ?? [] + } } - func fetchStoreDetail(id: Int64) -> Observable { + func fetchStoreDetail(id: Int64) -> Observable { let endpoint = AdminAPIEndpoint.fetchStoreDetail(id: id) return provider.requestData( with: endpoint, interceptor: tokenInterceptor ) + .map { dto in + AdminStoreDetail( + id: dto.id, + name: dto.name, + categoryId: dto.categoryId, + categoryName: dto.categoryName, + description: dto.desc, + address: dto.address, + startDate: dto.startDate, + endDate: dto.endDate, + createUserId: dto.createUserId, + createDateTime: dto.createDateTime, + mainImageUrl: dto.mainImageUrl, + bannerYn: dto.bannerYn, + images: dto.imageList.map { + AdminStoreDetail.StoreImage( + id: $0.id, + imageUrl: $0.imageUrl + ) + }, + latitude: dto.latitude, + longitude: dto.longitude, + markerTitle: dto.markerTitle, + markerSnippet: dto.markerSnippet + ) + } .catch { error in if case .responseSerializationFailed = error as? AFError { - // 빈 데이터 응답시 기본값 반환 - return Observable.just(GetAdminPopUpStoreDetailResponseDTO.empty) + return Observable.empty() } throw error } } - func createStore(request: CreatePopUpStoreRequestDTO) -> Observable { - Logger.log(message: "createStore API 호출 시작", category: .info) - let endpoint = AdminAPIEndpoint.createStore(request: request) - Logger.log(message: "Request URL: \(endpoint.baseURL + endpoint.path)", category: .info) - Logger.log(message: "Request Body: \(request)", category: .info) - - return provider.requestData( - with: endpoint, - interceptor: tokenInterceptor - ) - .catch { error -> Observable in - if case .responseSerializationFailed(let reason) = error as? AFError, - case .inputDataNilOrZeroLength = reason { - // 빈 응답 데이터일 경우 성공으로 간주 - Logger.log(message: "빈 응답 데이터 처리: 성공으로 간주", category: .info) - return Observable.just(EmptyResponse()) - } - throw error - } - .do( - onNext: { _ in - Logger.log(message: "createStore API 호출 성공", category: .info) - }, - onError: { error in - Logger.log(message: "createStore API 호출 실패: \(error)", category: .error) - } + func createStore(params: CreateStoreParams) -> Completable { + let dto = CreatePopUpStoreRequestDTO( + name: params.name, + categoryId: params.categoryId, + desc: params.desc, + address: params.address, + startDate: params.startDate, + endDate: params.endDate, + mainImageUrl: params.mainImageUrl, + imageUrlList: params.imageUrlList, + latitude: params.latitude, + longitude: params.longitude, + markerTitle: params.markerTitle, + markerSnippet: params.markerSnippet, + startDateBeforeEndDate: params.startDateBeforeEndDate ) + let endpoint = AdminAPIEndpoint.createStore(request: dto) + return provider.request(with: endpoint, interceptor: tokenInterceptor) } - func updateStore(request: UpdatePopUpStoreRequestDTO) -> Observable { - let endpoint = AdminAPIEndpoint.updateStore(request: request) - - Logger.log(message: """ - Store Update 요청: - URL: \(endpoint.baseURL + endpoint.path) - Method: PUT - Request: \(request) - """, category: .debug) - - return provider.requestData( - with: endpoint, - interceptor: tokenInterceptor + func updateStore(params: UpdateStoreParams) -> Completable { + let dto = UpdatePopUpStoreRequestDTO( + popUpStore: UpdatePopUpStoreRequestDTO.PopUpStore( + id: params.id, + name: params.name, + categoryId: params.categoryId, + desc: params.desc, + address: params.address, + startDate: params.startDate, + endDate: params.endDate, + mainImageUrl: params.mainImageUrl, + bannerYn: !params.mainImageUrl.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty, + imageUrl: params.imageUrlList.compactMap { $0 }, + startDateBeforeEndDate: params.startDateBeforeEndDate + ), + location: UpdatePopUpStoreRequestDTO.Location( + latitude: params.latitude, + longitude: params.longitude, + markerTitle: params.markerTitle, + markerSnippet: params.markerSnippet + ), + imagesToAdd: params.imageUrlList.compactMap { $0 }, + imagesToDelete: params.imagesToDelete ) - .catch { error -> Observable in - Logger.log(message: "Update Store Error 발생: \(error)", category: .error) - - if let afError = error as? AFError { - switch afError { - case .responseSerializationFailed(let reason): - Logger.log(message: "Serialization 실패 reason: \(reason)", category: .error) - if case .inputDataNilOrZeroLength = reason { - Logger.log(message: "빈 응답 데이터 - 성공으로 처리", category: .info) - return Observable.just(EmptyResponse()) - } - default: - Logger.log(message: "기타 AFError: \(afError)", category: .error) - } - } - - throw error - } - .do(onNext: { _ in - Logger.log(message: "Store Update 성공", category: .info) - }, onError: { error in - Logger.log(message: "Store Update 최종 실패: \(error)", category: .error) - }) + let endpoint = AdminAPIEndpoint.updateStore(request: dto) + return provider.request(with: endpoint, interceptor: tokenInterceptor) } - func deleteStore(id: Int64) -> Observable { - Logger.log(message: "deleteStore API 호출 시작", category: .info) + func deleteStore(id: Int64) -> Completable { let endpoint = AdminAPIEndpoint.deleteStore(id: id) return provider.request(with: endpoint, interceptor: tokenInterceptor) - .andThen(Observable.just(EmptyResponse())) - .do( - onNext: { _ in - Logger.log(message: "deleteStore API 호출 성공", category: .info) - }, - onError: { error in - Logger.log(message: "deleteStore API 호출 실패: \(error)", category: .error) - } - ) } // MARK: - Notice Methods - func createNotice(request: CreateNoticeRequestDTO) -> Observable { - let endpoint = AdminAPIEndpoint.createNotice(request: request) - return provider.requestData( - with: endpoint, - interceptor: tokenInterceptor + func createNotice(params: CreateNoticeParams) -> Completable { + let dto = CreateNoticeRequestDTO( + title: params.title, + content: params.content, + imageUrlList: params.imageUrlList ) + let endpoint = AdminAPIEndpoint.createNotice(request: dto) + return provider.request(with: endpoint, interceptor: tokenInterceptor) } - func updateNotice(id: Int64, request: UpdateNoticeRequestDTO) -> Observable { - let endpoint = AdminAPIEndpoint.updateNotice(id: id, request: request) - return provider.requestData( - with: endpoint, - interceptor: tokenInterceptor + func updateNotice(params: UpdateNoticeParams) -> Completable { + let dto = UpdateNoticeRequestDTO( + title: params.title, + content: params.content, + imageUrlList: params.imageUrlList, + imagesToDelete: params.imagesToDelete ) + let endpoint = AdminAPIEndpoint.updateNotice(id: params.id, request: dto) + return provider.request(with: endpoint, interceptor: tokenInterceptor) } - func deleteNotice(id: Int64) -> Observable { + func deleteNotice(id: Int64) -> Completable { let endpoint = AdminAPIEndpoint.deleteNotice(id: id) - return provider.requestData( - with: endpoint, - interceptor: tokenInterceptor - ) + return provider.request(with: endpoint, interceptor: tokenInterceptor) } } + +// Helper extension - keeping this for utility purposes extension GetAdminPopUpStoreDetailResponseDTO { static var empty: GetAdminPopUpStoreDetailResponseDTO { return GetAdminPopUpStoreDetailResponseDTO( diff --git a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift index 77097ed2..1f11e19f 100644 --- a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift +++ b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift @@ -1,5 +1,4 @@ import Foundation - import RxSwift final class AdminUseCaseImpl: AdminUseCase { @@ -10,53 +9,52 @@ final class AdminUseCaseImpl: AdminUseCase { self.repository = repository } - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable { + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> { return repository.fetchStoreList(query: query, page: page, size: size) } - func fetchStoreDetail(id: Int64) -> Observable { + func fetchStoreDetail(id: Int64) -> Observable { return repository.fetchStoreDetail(id: id) } - func createStore(request: CreatePopUpStoreRequestDTO) -> Observable { - Logger.log(message: "createStore 호출 - 요청 데이터: \(request)", category: .debug) - return repository.createStore(request: request) - .do(onNext: { _ in - Logger.log(message: "createStore 성공", category: .info) - }, onError: { error in + func createStore(params: CreateStoreParams) -> Completable { + Logger.log(message: "createStore 호출 - 스토어명: \(params.name)", category: .debug) + return repository.createStore(params: params) + .do(onError: { error in Logger.log(message: "createStore 실패 - Error: \(error)", category: .error) + }, onCompleted: { + Logger.log(message: "createStore 성공", category: .info) }) } - func updateStore(request: UpdatePopUpStoreRequestDTO) -> Observable { + func updateStore(params: UpdateStoreParams) -> Completable { Logger.log(message: """ Updating store with location: - Latitude: \(request.location.latitude) - Longitude: \(request.location.longitude) + Latitude: \(params.latitude) + Longitude: \(params.longitude) """, category: .debug) - - return repository.updateStore(request: request) - .do(onNext: { _ in - Logger.log(message: "Store update successful", category: .debug) - }, onError: { error in + return repository.updateStore(params: params) + .do(onError: { error in Logger.log(message: "Store update failed: \(error)", category: .error) + }, onCompleted: { + Logger.log(message: "Store update successful", category: .debug) }) } - func deleteStore(id: Int64) -> Observable { + func deleteStore(id: Int64) -> Completable { return repository.deleteStore(id: id) } // Notice - func createNotice(request: CreateNoticeRequestDTO) -> Observable { - return repository.createNotice(request: request) + func createNotice(params: CreateNoticeParams) -> Completable { + return repository.createNotice(params: params) } - func updateNotice(id: Int64, request: UpdateNoticeRequestDTO) -> Observable { - return repository.updateNotice(id: id, request: request) + func updateNotice(params: UpdateNoticeParams) -> Completable { + return repository.updateNotice(params: params) } - func deleteNotice(id: Int64) -> Observable { + func deleteNotice(id: Int64) -> Completable { return repository.deleteNotice(id: id) } } diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift new file mode 100644 index 00000000..58db4f63 --- /dev/null +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift @@ -0,0 +1,8 @@ +import Foundation + +struct AdminStore { + let id: Int64 + let name: String + let categoryName: String + let mainImageUrl: String +} diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift new file mode 100644 index 00000000..dc8f91ef --- /dev/null +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift @@ -0,0 +1,26 @@ +import Foundation + +struct AdminStoreDetail { + let id: Int64 + let name: String + let categoryId: Int64 + let categoryName: String + let description: String + let address: String + let startDate: String + let endDate: String + let createUserId: String + let createDateTime: String + let mainImageUrl: String + let bannerYn: Bool + let images: [StoreImage] + let latitude: Double + let longitude: Double + let markerTitle: String + let markerSnippet: String + + struct StoreImage { + let id: Int64 + let imageUrl: String + } +} diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/Params/AdminParams.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/Params/AdminParams.swift new file mode 100644 index 00000000..8f5a9d7e --- /dev/null +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/Params/AdminParams.swift @@ -0,0 +1,49 @@ +import Foundation + +struct CreateStoreParams { + let name: String + let categoryId: Int64 + let desc: String + let address: String + let startDate: String + let endDate: String + let mainImageUrl: String + let imageUrlList: [String?] + let latitude: Double + let longitude: Double + let markerTitle: String + let markerSnippet: String + let startDateBeforeEndDate: Bool +} + +struct UpdateStoreParams { + let id: Int64 + let name: String + let categoryId: Int64 + let desc: String + let address: String + let startDate: String + let endDate: String + let mainImageUrl: String + let imageUrlList: [String?] + let imagesToDelete: [Int64] + let latitude: Double + let longitude: Double + let markerTitle: String + let markerSnippet: String + let startDateBeforeEndDate: Bool +} + +struct CreateNoticeParams { + let title: String + let content: String + let imageUrlList: [String] +} + +struct UpdateNoticeParams { + let id: Int64 + let title: String + let content: String + let imageUrlList: [String] + let imagesToDelete: [Int64] +} diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift index da4112ec..8f87a343 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift @@ -3,13 +3,16 @@ import Foundation import RxSwift protocol AdminRepository { - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable - func fetchStoreDetail(id: Int64) -> Observable - func createStore(request: CreatePopUpStoreRequestDTO) -> Observable - func updateStore(request: UpdatePopUpStoreRequestDTO) -> Observable - func deleteStore(id: Int64) -> Observable - - func createNotice(request: CreateNoticeRequestDTO) -> Observable - func updateNotice(id: Int64, request: UpdateNoticeRequestDTO) -> Observable - func deleteNotice(id: Int64) -> Observable + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> + func fetchStoreDetail(id: Int64) -> Observable + + func createStore(params: CreateStoreParams) -> Completable + + func updateStore(params: UpdateStoreParams) -> Completable + + func deleteStore(id: Int64) -> Completable + + func createNotice(params: CreateNoticeParams) -> Completable + func updateNotice(params: UpdateNoticeParams) -> Completable + func deleteNotice(id: Int64) -> Completable } diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift index 390c45fb..08c59b15 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift @@ -1,16 +1,18 @@ import Foundation - import RxSwift protocol AdminUseCase { - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable - func fetchStoreDetail(id: Int64) -> Observable - func createStore(request: CreatePopUpStoreRequestDTO) -> Observable - func updateStore(request: UpdatePopUpStoreRequestDTO) -> Observable - func deleteStore(id: Int64) -> Observable - // Notice - func createNotice(request: CreateNoticeRequestDTO) -> Observable - func updateNotice(id: Int64, request: UpdateNoticeRequestDTO) -> Observable - func deleteNotice(id: Int64) -> Observable + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> + func fetchStoreDetail(id: Int64) -> Observable + + func createStore(params: CreateStoreParams) -> Completable + + func updateStore(params: UpdateStoreParams) -> Completable + + func deleteStore(id: Int64) -> Completable + + func createNotice(params: CreateNoticeParams) -> Completable + func updateNotice(params: UpdateNoticeParams) -> Completable + func deleteNotice(id: Int64) -> Completable } diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift index e258e6df..12382108 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift @@ -14,18 +14,18 @@ final class AdminReactor: Reactor { } enum Mutation { - case setStores([GetAdminPopUpStoreListResponseDTO.PopUpStore]) + case setStores([AdminStore]) case setIsLoading(Bool) case navigateToRegister(Bool) - case navigateToEdit(GetAdminPopUpStoreListResponseDTO.PopUpStore) // ✅ 수정 데이터 추가 + case navigateToEdit(AdminStore) // ✅ 수정 데이터 추가 } struct State { - var storeList: [GetAdminPopUpStoreListResponseDTO.PopUpStore] = [] + var storeList: [AdminStore] = [] var isLoading: Bool = false var shouldNavigateToRegister: Bool = false - var selectedStoreForEdit: GetAdminPopUpStoreListResponseDTO.PopUpStore? // ✅ 추가 + var selectedStoreForEdit: AdminStore? // ✅ 추가 } @@ -44,7 +44,7 @@ final class AdminReactor: Reactor { return .concat([ .just(.setIsLoading(true)), useCase.fetchStoreList(query: nil, page: 0, size: 100) - .map { .setStores($0.popUpStoreList ?? []) }, // ✅ nil 방지 + .map { .setStores($0) }, // ✅ nil 방지 .just(.setIsLoading(false)) ]) @@ -57,7 +57,7 @@ final class AdminReactor: Reactor { }, onError: { error in Logger.log(message: "조회 실패 - 에러: \(error.localizedDescription)", category: .error) }) - .map { .setStores($0.popUpStoreList ?? []) }, // ✅ nil 방지 + .map { .setStores($0) }, // ✅ nil 방지 .just(.setIsLoading(false)) ]) diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift index e2c6cb67..ab03c402 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift @@ -85,7 +85,7 @@ final class PopUpStoreRegisterReactor: Reactor { case addDeletedImage(id: Int64, path: String) // 기존 스토어 데이터 설정 - case setStoreDetail(GetAdminPopUpStoreDetailResponseDTO) + case setStoreDetail(AdminStoreDetail) case setOriginalImageIds([String: Int64]) // UI 상태 관리 @@ -357,7 +357,7 @@ final class PopUpStoreRegisterReactor: Reactor { newState.address = storeDetail.address newState.lat = String(storeDetail.latitude) newState.lon = String(storeDetail.longitude) - newState.description = storeDetail.desc + newState.description = storeDetail.description // 날짜 파싱 let isoFormatter = ISO8601DateFormatter() @@ -615,7 +615,7 @@ final class PopUpStoreRegisterReactor: Reactor { // 이미지 ID 매핑 초기화 및 설정 var originalImageIds: [String: Int64] = [:] - for image in storeDetail.imageList { + for image in storeDetail.images { originalImageIds[image.imageUrl] = image.id } @@ -629,7 +629,7 @@ final class PopUpStoreRegisterReactor: Reactor { let dispatchGroup = DispatchGroup() let imageObservable = Observable.create { observer in - for imageData in storeDetail.imageList { + for imageData in storeDetail.images { // 중복 이미지 건너뛰기 if loadedImageUrls.contains(imageData.imageUrl) { continue @@ -742,7 +742,7 @@ final class PopUpStoreRegisterReactor: Reactor { return false } ?? imagePaths.first ?? "" - let request = CreatePopUpStoreRequestDTO( + let params = CreateStoreParams( name: state.name, categoryId: state.categoryId, desc: state.description, @@ -758,8 +758,8 @@ final class PopUpStoreRegisterReactor: Reactor { startDateBeforeEndDate: true ) - return self.adminUseCase.createStore(request: request) - .map { _ in .setSuccess(true) } + return self.adminUseCase.createStore(params: params) + .andThen(Observable.just(.setSuccess(true))) } } @@ -856,43 +856,26 @@ final class PopUpStoreRegisterReactor: Reactor { mainImage = "" } - // 업데이트 요청 생성 - let request = UpdatePopUpStoreRequestDTO( - popUpStore: .init( - id: storeId, - name: state.name, - categoryId: state.categoryId, - desc: state.description, - address: state.address, - startDate: dates.startDate, - endDate: dates.endDate, - mainImageUrl: mainImage, - bannerYn: !mainImage.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty, - imageUrl: allPaths, - startDateBeforeEndDate: true - ), - location: .init( - latitude: Double(state.lat) ?? 0, - longitude: Double(state.lon) ?? 0, - markerTitle: state.markerTitle, - markerSnippet: state.markerSnippet - ), - imagesToAdd: newImagePaths ?? [], - imagesToDelete: state.deletedImageIds + let params = UpdateStoreParams( + id: storeId, + name: state.name, + categoryId: state.categoryId, + desc: state.description, + address: state.address, + startDate: dates.startDate, + endDate: dates.endDate, + mainImageUrl: mainImage, + imageUrlList: allPaths, + imagesToDelete: state.deletedImageIds, + latitude: Double(state.lat) ?? 0, + longitude: Double(state.lon) ?? 0, + markerTitle: state.markerTitle, + markerSnippet: state.markerSnippet, + startDateBeforeEndDate: true ) - // 서버에 스토어 정보 업데이트 요청 - return adminUseCase.updateStore(request: request) - .flatMap { [weak self] _ -> Observable in - guard let self = self else { return .empty() } - - // S3에서 삭제된 이미지 제거 - if !state.deletedImagePaths.isEmpty { - self.deleteImagesFromS3(state.deletedImagePaths) - } - - return .just(.setSuccess(true)) - } + return self.adminUseCase.updateStore(params: params) + .andThen(Observable.just(.setSuccess(true))) } } diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift index b38efef8..993b0cd2 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift @@ -16,7 +16,7 @@ final class AdminViewController: BaseViewController, View { private let adminUseCase: AdminUseCase // MARK: - Init - init(nickname: String, adminUseCase: AdminUseCase = AdminUseCaseImpl(repository: AdminRepositoryImpl(provider: ProviderImpl()))) { + init(nickname: String, adminUseCase: AdminUseCase) { self.nickname = nickname self.adminUseCase = adminUseCase self.mainView = AdminView(frame: .zero) @@ -122,7 +122,6 @@ final class AdminViewController: BaseViewController, View { alert.addAction(UIAlertAction(title: "취소", style: .cancel)) - // iPad support if let popoverController = alert.popoverPresentationController { popoverController.sourceView = mainView.menuButton popoverController.sourceRect = mainView.menuButton.bounds @@ -151,7 +150,7 @@ final class AdminViewController: BaseViewController, View { present(alert, animated: true) } - private func showDeleteConfirmation(for store: GetAdminPopUpStoreListResponseDTO.PopUpStore) { + private func showDeleteConfirmation(for store: AdminStore) { let alert = UIAlertController( title: "삭제 확인", message: "\(store.name)을(를) 삭제하시겠습니까?", @@ -166,22 +165,43 @@ final class AdminViewController: BaseViewController, View { present(alert, animated: true) } - private func editStore(_ store: GetAdminPopUpStoreListResponseDTO.PopUpStore) { - let registerVC = PopUpStoreRegisterViewController( - nickname: nickname, - adminUseCase: adminUseCase, - editingStore: store - ) - - // 수정할 때도 completionHandler 추가 - registerVC.completionHandler = { [weak self] in - self?.reactor?.action.onNext(.reloadData) - } - - navigationController?.pushViewController(registerVC, animated: true) + private func editStore(_ store: AdminStore) { + adminUseCase.fetchStoreDetail(id: store.id) + .observe(on: MainScheduler.instance) + .subscribe( + onNext: { [weak self] storeDetail in + guard let self = self else { return } + let updateParams = UpdateStoreParams( + id: storeDetail.id, + name: storeDetail.name, + categoryId: storeDetail.categoryId, + desc: storeDetail.description, + address: storeDetail.address, + startDate: storeDetail.startDate, + endDate: storeDetail.endDate, + mainImageUrl: storeDetail.mainImageUrl, + imageUrlList: storeDetail.images.map { $0.imageUrl }, + imagesToDelete: [], + latitude: storeDetail.latitude, + longitude: storeDetail.longitude, + markerTitle: storeDetail.markerTitle, + markerSnippet: storeDetail.markerSnippet, + startDateBeforeEndDate: true + ) + let registerVC = PopUpStoreRegisterViewController( + nickname: self.nickname, + adminUseCase: self.adminUseCase + ) + self.navigationController?.pushViewController(registerVC, animated: true) + }, + onError: { [weak self] error in + self?.showErrorAlert(message: "스토어 정보 조회 실패: \(error.localizedDescription)") + } + ) + .disposed(by: disposeBag) } - private func deleteStore(_ store: GetAdminPopUpStoreListResponseDTO.PopUpStore) { + private func deleteStore(_ store: AdminStore) { // 먼저 스토어 상세 정보를 가져와 모든 이미지 URL을 확인 adminUseCase.fetchStoreDetail(id: store.id) .observe(on: MainScheduler.instance) @@ -194,7 +214,7 @@ final class AdminViewController: BaseViewController, View { allImageUrls.append(storeDetail.mainImageUrl) // 다른 모든 이미지 URL 추가 - let otherImageUrls = storeDetail.imageList.map { $0.imageUrl } + let otherImageUrls = storeDetail.images.map { $0.imageUrl } allImageUrls.append(contentsOf: otherImageUrls) allImageUrls = Array(Set(allImageUrls)) @@ -206,7 +226,7 @@ final class AdminViewController: BaseViewController, View { .andThen(self.adminUseCase.deleteStore(id: store.id)) .observe(on: MainScheduler.instance) .subscribe( - onNext: { [weak self] _ in + onCompleted: { [weak self] in self?.reactor?.action.onNext(.reloadData) ToastMaker.createToast(message: "삭제되었습니다") }, @@ -277,7 +297,13 @@ final class AdminViewController: BaseViewController, View { cellIdentifier: AdminStoreCell.identifier, cellType: AdminStoreCell.self )) { _, item, cell in - cell.configure(with: item) + let dto = GetAdminPopUpStoreListResponseDTO.PopUpStore( + id: item.id, + name: item.name, + categoryName: item.categoryName, + mainImageUrl: item.mainImageUrl + ) + cell.configure(with: dto) } .disposed(by: disposeBag) } diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/MyPage/Main/MyPageReactor.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/MyPage/Main/MyPageReactor.swift index 3777f7e1..1b271497 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/MyPage/Main/MyPageReactor.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/MyPage/Main/MyPageReactor.swift @@ -263,21 +263,18 @@ final class MyPageReactor: Reactor { let navigationController = UINavigationController(rootViewController: nextController) navigationController.modalPresentationStyle = .fullScreen controller.present(navigationController, animated: true) - case .moveToMyCommentScene(let controller): let nextController = MyCommentController() nextController.reactor = MyCommentReactor() controller.navigationController?.pushViewController(nextController, animated: true) - case .moveToAdminScene(let controller): // 관리자 VC let nickname = profileSection.inputDataList.first?.nickName ?? "" - let adminVC = AdminViewController(nickname: nickname) - adminVC.reactor = AdminReactor( - useCase: AdminUseCaseImpl( - repository: AdminRepositoryImpl(provider: ProviderImpl()) - ) + let adminUseCase = AdminUseCaseImpl( + repository: AdminRepositoryImpl(provider: ProviderImpl()) ) + let adminVC = AdminViewController(nickname: nickname, adminUseCase: adminUseCase) + adminVC.reactor = AdminReactor(useCase: adminUseCase) controller.navigationController?.pushViewController(adminVC, animated: true) } From 0d32c2658da4012a331e7f12fe88a84f068de2f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=80=E1=85=B5=E1=84=92?= =?UTF-8?q?=E1=85=A7=E1=86=AB?= Date: Sun, 20 Apr 2025 03:00:08 +0900 Subject: [PATCH 2/9] =?UTF-8?q?refactor/#117:=20Map=20API=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20DTO=EC=A0=9C=EA=B1=B0=20=EB=B9=8C=EB=93=9C=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RepositoryImpl/MapRepositoryImpl.swift | 58 ++++++++++++++----- .../Domain/UseCaseImpl/MapUseCaseImpl.swift | 42 ++++++++------ .../Repository/MapRepository.swift | 4 +- 3 files changed, 70 insertions(+), 34 deletions(-) diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift index c78a6af6..2ce6dbeb 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift @@ -2,9 +2,8 @@ import Foundation import RxSwift -// MARK: - Implementation final class MapRepositoryImpl: MapRepository { - + private let provider: Provider init(provider: Provider) { @@ -17,7 +16,7 @@ final class MapRepositoryImpl: MapRepository { southWestLat: Double, southWestLon: Double, categories: [Int64] - ) -> Observable<[MapPopUpStoreDTO]> { + ) -> Observable<[MapPopUpStore]> { return provider.requestData( with: MapAPIEndpoint.locations_fetchStoresInBounds( northEastLat: northEastLat, @@ -29,12 +28,30 @@ final class MapRepositoryImpl: MapRepository { interceptor: TokenInterceptor() ) .map { $0.popUpStoreList } + .map { dtoList in + dtoList.map { dto -> MapPopUpStore in + return MapPopUpStore( + id: dto.id, + category: dto.categoryName, + name: dto.name, + address: dto.address, + startDate: dto.startDate, + endDate: dto.endDate, + latitude: dto.latitude, + longitude: dto.longitude, + markerId: dto.id, + markerTitle: dto.markerTitle ?? dto.name, + markerSnippet: dto.markerSnippet ?? "", + mainImageUrl: dto.mainImageUrl + ) + } + } } func searchStores( query: String, categories: [Int64] - ) -> Observable<[MapPopUpStoreDTO]> { + ) -> Observable<[MapPopUpStore]> { return provider.requestData( with: MapAPIEndpoint.locations_searchStores( query: query, @@ -43,10 +60,28 @@ final class MapRepositoryImpl: MapRepository { interceptor: TokenInterceptor() ) .map { $0.popUpStoreList } + .map { dtoList in + dtoList.map { dto -> MapPopUpStore in + return MapPopUpStore( + id: dto.id, + category: dto.categoryName, + name: dto.name, + address: dto.address, + startDate: dto.startDate, + endDate: dto.endDate, + latitude: dto.latitude, + longitude: dto.longitude, + markerId: dto.id, + markerTitle: dto.markerTitle ?? dto.name, + markerSnippet: dto.markerSnippet ?? "", + mainImageUrl: dto.mainImageUrl + ) + } + } } func fetchCategories() -> Observable<[CategoryResponse]> { - Logger.log(message: "카테고리 매핑 요청을 시작합니다.", category: .network) + Logger.log(message: "카테고리 목록 요청을 시작합니다.", category: .network) return provider.requestData( with: SignUpAPIEndpoint.signUp_getCategoryList(), @@ -54,26 +89,19 @@ final class MapRepositoryImpl: MapRepository { ) .do(onNext: { responseDTO in Logger.log( - message: """ - 카테고리 매핑 응답: - - Response: \(responseDTO) - - categoryResponseList: \(responseDTO.categoryResponseList) - """, + message: "카테고리 목록 응답 성공", category: .debug ) }) .map { responseDTO in - let categories = responseDTO.categoryResponseList.map { $0.toDomain() } - Logger.log(message: "매핑된 카테고리 데이터: \(categories)", category: .debug) - return categories + responseDTO.categoryResponseList.map { $0.toDomain() } } .catch { error in Logger.log( - message: "카테고리 매핑 요청 실패: \(error.localizedDescription)", + message: "카테고리 목록 요청 실패: \(error.localizedDescription)", category: .error ) throw error } } - } diff --git a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/MapUseCaseImpl.swift b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/MapUseCaseImpl.swift index f06968c0..7ffd64c2 100644 --- a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/MapUseCaseImpl.swift +++ b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/MapUseCaseImpl.swift @@ -21,15 +21,18 @@ final class MapUseCaseImpl: MapUseCase { southWestLon: Double, categories: [Int64] ) -> Observable<[MapPopUpStore]> { - return repository.fetchStoresInBounds( northEastLat: northEastLat, northEastLon: northEastLon, southWestLat: southWestLat, southWestLon: southWestLon, - categories: categories // ← 그대로 넘긴다 + categories: categories ) - .map { $0.map { $0.toDomain() } } + .do(onNext: { stores in + Logger.log(message: "맵 범위 내 스토어 \(stores.count)개 로드됨", category: .debug) + }, onError: { error in + Logger.log(message: "맵 범위 내 스토어 로드 실패: \(error)", category: .error) + }) } func searchStores( @@ -38,23 +41,28 @@ final class MapUseCaseImpl: MapUseCase { ) -> Observable<[MapPopUpStore]> { return repository.searchStores( query: query, - categories: categories.map { Int64($0) ?? 0 } + categories: categories ) - .map { $0.map { $0.toDomain() } } + .do(onNext: { stores in + Logger.log(message: "'\(query)' 검색 결과 \(stores.count)개 로드됨", category: .debug) + }, onError: { error in + Logger.log(message: "스토어 검색 실패: \(error)", category: .error) + }) } + func filterStoresByLocation(_ stores: [MapPopUpStore], selectedRegions: [String]) -> [MapPopUpStore] { - guard !selectedRegions.isEmpty else { return stores } + guard !selectedRegions.isEmpty else { return stores } - return stores.filter { store in - let components = store.address.components(separatedBy: " ") - guard components.count >= 2 else { return false } + return stores.filter { store in + let components = store.address.components(separatedBy: " ") + guard components.count >= 2 else { return false } - let mainRegion = components[0].replacingOccurrences(of: "특별시", with: "") - .replacingOccurrences(of: "광역시", with: "") - let subRegion = components[1] + let mainRegion = components[0].replacingOccurrences(of: "특별시", with: "") + .replacingOccurrences(of: "광역시", with: "") + let subRegion = components[1] - return selectedRegions.contains("\(mainRegion)전체") || - selectedRegions.contains(subRegion) - } - } - } + return selectedRegions.contains("\(mainRegion)전체") || + selectedRegions.contains(subRegion) + } + } +} diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/MapRepository.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/MapRepository.swift index 6f613828..cfdb4f65 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/MapRepository.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/MapRepository.swift @@ -17,12 +17,12 @@ protocol MapRepository { southWestLat: Double, southWestLon: Double, categories: [Int64] - ) -> Observable<[MapPopUpStoreDTO]> + ) -> Observable<[MapPopUpStore]> func searchStores( query: String, categories: [Int64] - ) -> Observable<[MapPopUpStoreDTO]> + ) -> Observable<[MapPopUpStore]> func fetchCategories() -> Observable<[CategoryResponse]> } From 22a0571d8945a758c74797c1ad41d8079d6dbbd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=80=E1=85=B5=E1=84=92?= =?UTF-8?q?=E1=85=A7=E1=86=AB?= Date: Sun, 20 Apr 2025 06:34:39 +0900 Subject: [PATCH 3/9] =?UTF-8?q?refactor/#117:=20MapPopUpStore=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EB=AA=A8=EB=8D=B8=EC=97=90=EC=84=9C=20=20?= =?UTF-8?q?=ED=94=84=EB=A0=88=EC=9E=84=EC=9B=8C=ED=81=AC=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entity/MapResponse/MapPopUpStore.swift | 26 ------------------- .../Scene/Map/MapView/MapViewController.swift | 24 +++++++++++++++-- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/MapResponse/MapPopUpStore.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/MapResponse/MapPopUpStore.swift index 2be1694e..65fc7ebb 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/MapResponse/MapPopUpStore.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/MapResponse/MapPopUpStore.swift @@ -1,5 +1,4 @@ import Foundation -import NMapsMap struct MapPopUpStore: Equatable { let id: Int64 @@ -14,29 +13,4 @@ struct MapPopUpStore: Equatable { let markerTitle: String let markerSnippet: String let mainImageUrl: String? - - var nmgCoordinate: NMGLatLng { - NMGLatLng(lat: latitude, lng: longitude) - } - - func toMarkerInput() -> MapMarker.Input { - return MapMarker.Input( - isSelected: false, - isCluster: false, - regionName: self.markerTitle, - count: 0 - ) - } - - func toStoreItem() -> StoreItem { - return StoreItem( - id: id, - thumbnailURL: mainImageUrl ?? "", - category: category, - title: name, - location: address, - dateRange: "\(startDate) ~ \(endDate)", - isBookmarked: false - ) - } } diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Map/MapView/MapViewController.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Map/MapView/MapViewController.swift index e327b463..d8653307 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Map/MapView/MapViewController.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Map/MapView/MapViewController.swift @@ -501,7 +501,17 @@ class MapViewController: BaseViewController, View, CLLocationManagerDelegate, NM self.addMarkers(for: results) // 스토어 리스트 업데이트 - let storeItems = results.map { $0.toStoreItem() } + let storeItems = results.map { store in + StoreItem( + id: store.id, + thumbnailURL: store.mainImageUrl ?? "", + category: store.category, + title: store.name, + location: store.address, + dateRange: "\(store.startDate) ~ \(store.endDate)", + isBookmarked: false + ) + } self.storeListViewController.reactor?.action.onNext(.setStores(storeItems)) // 캐러셀 업데이트 @@ -1044,7 +1054,17 @@ class MapViewController: BaseViewController, View, CLLocationManagerDelegate, NM } private func updateListView(with results: [MapPopUpStore]) { // MapPopUpStore 배열을 StoreItem 배열로 변환 - let storeItems = results.map { $0.toStoreItem() } + let storeItems = results.map { store in + StoreItem( + id: store.id, + thumbnailURL: store.mainImageUrl ?? "", + category: store.category, + title: store.name, + location: store.address, + dateRange: "\(store.startDate) ~ \(store.endDate)", + isBookmarked: false + ) + } storeListViewController.reactor?.action.onNext(.setStores(storeItems)) } From 9edf78542f6dd638770680d6c34fb2622e29c675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=80=E1=85=B5=E1=84=92?= =?UTF-8?q?=E1=85=A7=E1=86=AB?= Date: Sun, 20 Apr 2025 06:35:08 +0900 Subject: [PATCH 4/9] =?UTF-8?q?refactor/#117:=20DTO=20->=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EB=AA=A8=EB=8D=B8=20=EB=B3=80=ED=99=98=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20MapDomainModelConverter=EB=A1=9C?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MapAPI/ResponseDTO/MapPopUpStoreDTO.swift | 18 --------- .../Converter/MapDomainModelConverter.swift | 22 ++++++++++ .../RepositoryImpl/MapRepositoryImpl.swift | 40 +------------------ 3 files changed, 24 insertions(+), 56 deletions(-) create mode 100644 Poppool/Poppool/DataLayer/RepositoryImpl/Converter/MapDomainModelConverter.swift diff --git a/Poppool/Poppool/DataLayer/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift b/Poppool/Poppool/DataLayer/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift index cd7bb5de..12d4916f 100644 --- a/Poppool/Poppool/DataLayer/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift +++ b/Poppool/Poppool/DataLayer/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift @@ -14,24 +14,6 @@ struct MapPopUpStoreDTO: Codable { let markerSnippet: String let mainImageUrl: String? let bookmarkYn: Bool? - - func toDomain() -> MapPopUpStore { - return MapPopUpStore( - id: id, - category: categoryName, - name: name, - address: address, - startDate: startDate, - endDate: endDate, - latitude: latitude, - longitude: longitude, - markerId: markerId, - markerTitle: markerTitle, - markerSnippet: markerSnippet, - mainImageUrl: mainImageUrl - - ) - } } struct GetViewBoundPopUpStoreListResponse: Decodable { diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/Converter/MapDomainModelConverter.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/Converter/MapDomainModelConverter.swift new file mode 100644 index 00000000..fb53ddab --- /dev/null +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/Converter/MapDomainModelConverter.swift @@ -0,0 +1,22 @@ +import Foundation + +struct MapDomainModelConverter { + /// MapPopUpStoreDTO + /// → MapPopUpStore 도메인 모델로 변환 + static func convert(_ dto: MapPopUpStoreDTO) -> MapPopUpStore { + return MapPopUpStore( + id: dto.id, + category: dto.categoryName, + name: dto.name, + address: dto.address, + startDate: dto.startDate, + endDate: dto.endDate, + latitude: dto.latitude, + longitude: dto.longitude, + markerId: dto.markerId, + markerTitle: dto.markerTitle, + markerSnippet: dto.markerSnippet, + mainImageUrl: dto.mainImageUrl + ) + } +} diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift index 2ce6dbeb..45973865 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift @@ -27,25 +27,7 @@ final class MapRepositoryImpl: MapRepository { ), interceptor: TokenInterceptor() ) - .map { $0.popUpStoreList } - .map { dtoList in - dtoList.map { dto -> MapPopUpStore in - return MapPopUpStore( - id: dto.id, - category: dto.categoryName, - name: dto.name, - address: dto.address, - startDate: dto.startDate, - endDate: dto.endDate, - latitude: dto.latitude, - longitude: dto.longitude, - markerId: dto.id, - markerTitle: dto.markerTitle ?? dto.name, - markerSnippet: dto.markerSnippet ?? "", - mainImageUrl: dto.mainImageUrl - ) - } - } + .map { $0.popUpStoreList.map(MapDomainModelConverter.convert) } } func searchStores( @@ -59,25 +41,7 @@ final class MapRepositoryImpl: MapRepository { ), interceptor: TokenInterceptor() ) - .map { $0.popUpStoreList } - .map { dtoList in - dtoList.map { dto -> MapPopUpStore in - return MapPopUpStore( - id: dto.id, - category: dto.categoryName, - name: dto.name, - address: dto.address, - startDate: dto.startDate, - endDate: dto.endDate, - latitude: dto.latitude, - longitude: dto.longitude, - markerId: dto.id, - markerTitle: dto.markerTitle ?? dto.name, - markerSnippet: dto.markerSnippet ?? "", - mainImageUrl: dto.mainImageUrl - ) - } - } + .map { $0.popUpStoreList.map(MapDomainModelConverter.convert) } } func fetchCategories() -> Observable<[CategoryResponse]> { From 0e85d9b477269b0b868444acbd17cef2f9f3228f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=80=E1=85=B5=E1=84=92?= =?UTF-8?q?=E1=85=A7=E1=86=AB?= Date: Sun, 20 Apr 2025 06:43:26 +0900 Subject: [PATCH 5/9] =?UTF-8?q?refactor/#117:=20Auth=20API=20DomainLayer?= =?UTF-8?q?=20DTO=20=EC=A0=9C=EA=B1=B0=20=EB=B9=8C=EB=93=9C=ED=99=95?= =?UTF-8?q?=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataLayer/RepositoryImpl/AuthAPIRepositoryImpl.swift | 6 ++++-- .../DomainLayer/Domain/UseCaseImpl/AuthAPIUseCaseImpl.swift | 4 +--- .../DomainInterface/Repository/AuthAPIRepository.swift | 3 +-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/AuthAPIRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/AuthAPIRepositoryImpl.swift index a0847bd2..c1f27826 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/AuthAPIRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/AuthAPIRepositoryImpl.swift @@ -1,5 +1,4 @@ import Foundation - import RxSwift final class AuthAPIRepositoryImpl: AuthAPIRepository { @@ -20,8 +19,11 @@ final class AuthAPIRepositoryImpl: AuthAPIRepository { } } - func postTokenReissue() -> Observable { + func postTokenReissue() -> Observable { let endPoint = AuthAPIEndPoint.postTokenReissue() return provider.requestData(with: endPoint, interceptor: tokenInterceptor) + .map { responseDTO in + return responseDTO.toDomain() + } } } diff --git a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AuthAPIUseCaseImpl.swift b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AuthAPIUseCaseImpl.swift index 841a4034..258cb9e0 100644 --- a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AuthAPIUseCaseImpl.swift +++ b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AuthAPIUseCaseImpl.swift @@ -1,5 +1,4 @@ import Foundation - import RxSwift final class AuthAPIUseCaseImpl: AuthAPIUseCase { @@ -15,7 +14,6 @@ final class AuthAPIUseCaseImpl: AuthAPIUseCase { } func postTokenReissue() -> Observable { - let endPoint = AuthAPIEndPoint.postTokenReissue() - return repository.postTokenReissue().map { $0.toDomain() } + return repository.postTokenReissue() } } diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AuthAPIRepository.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AuthAPIRepository.swift index 630c801b..ba9ae29f 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AuthAPIRepository.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AuthAPIRepository.swift @@ -1,8 +1,7 @@ import Foundation - import RxSwift protocol AuthAPIRepository { func tryLogIn(userCredential: Encodable, socialType: String) -> Observable - func postTokenReissue() -> Observable + func postTokenReissue() -> Observable } From 1f4ce4867a9cbd328ae99002c634a4ddaa59975a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=80=E1=85=B5=E1=84=92?= =?UTF-8?q?=E1=85=A7=E1=86=AB?= Date: Sun, 20 Apr 2025 08:29:35 +0900 Subject: [PATCH 6/9] =?UTF-8?q?refactor/#117:=20Comment=20API=20=EB=A0=88?= =?UTF-8?q?=ED=8F=AC=EC=A7=80=ED=86=A0=EB=A6=AC=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=EC=97=90=EC=84=9C=20DTO=20=ED=8C=8C?= =?UTF-8?q?=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20?= =?UTF-8?q?=EC=9E=84=ED=94=8C=EC=97=90=EC=84=9C=20=EB=A7=A4=ED=95=91=20?= =?UTF-8?q?=EB=B9=8C=EB=93=9C=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommentAPIRepositoryImpl.swift | 15 +++++++------ .../UseCaseImpl/CommentAPIUseCaseImpl.swift | 8 +++---- .../Repository/CommentAPIRepository.swift | 21 ++++++++++++++++--- .../UseCase/CommentAPIUseCase.swift | 2 +- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/CommentAPIRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/CommentAPIRepositoryImpl.swift index 22ae8766..6fa51907 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/CommentAPIRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/CommentAPIRepositoryImpl.swift @@ -11,18 +11,21 @@ final class CommentAPIRepositoryImpl: CommentAPIRepository { self.provider = provider } - func postCommentAdd(request: PostCommentRequestDTO) -> Completable { - let endPoint = CommentAPIEndPoint.postCommentAdd(request: request) + func postCommentAdd(popUpStoreId: Int64, content: String?, commentType: String?, imageUrlList: [String?]) -> Completable { + let requestDTO = PostCommentRequestDTO(popUpStoreId: popUpStoreId, content: content, commentType: commentType, imageUrlList: imageUrlList) + let endPoint = CommentAPIEndPoint.postCommentAdd(request: requestDTO) return provider.request(with: endPoint, interceptor: tokenInterceptor) } - func deleteComment(request: DeleteCommentRequestDTO) -> Completable { - let endPoint = CommentAPIEndPoint.deleteComment(request: request) + func deleteComment(popUpStoreId: Int64, commentId: Int64) -> Completable { + let requestDTO = DeleteCommentRequestDTO(popUpStoreId: popUpStoreId, commentId: commentId) + let endPoint = CommentAPIEndPoint.deleteComment(request: requestDTO) return provider.request(with: endPoint, interceptor: tokenInterceptor) } - func editComment(request: PutCommentRequestDTO) -> Completable { - let endPoint = CommentAPIEndPoint.editComment(request: request) + func editComment(popUpStoreId: Int64, commentId: Int64, content: String?, imageUrlList: [PutCommentImageDataRequestDTO]?) -> Completable { + let requestDTO = PutCommentRequestDTO(popUpStoreId: popUpStoreId, commentId: commentId, content: content, imageUrlList: imageUrlList) + let endPoint = CommentAPIEndPoint.editComment(request: requestDTO) return provider.request(with: endPoint, interceptor: tokenInterceptor) } } diff --git a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/CommentAPIUseCaseImpl.swift b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/CommentAPIUseCaseImpl.swift index c7a31242..9086e118 100644 --- a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/CommentAPIUseCaseImpl.swift +++ b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/CommentAPIUseCaseImpl.swift @@ -3,7 +3,7 @@ import Foundation import RxSwift final class CommentAPIUseCaseImpl: CommentAPIUseCase { - + private let repository: CommentAPIRepository init(repository: CommentAPIRepository) { @@ -11,14 +11,14 @@ final class CommentAPIUseCaseImpl: CommentAPIUseCase { } func postCommentAdd(popUpStoreId: Int64, content: String?, commentType: String?, imageUrlList: [String?]) -> Completable { - return repository.postCommentAdd(request: .init(popUpStoreId: popUpStoreId, content: content, commentType: commentType, imageUrlList: imageUrlList)) + return repository.postCommentAdd(popUpStoreId: popUpStoreId, content: content, commentType: commentType, imageUrlList: imageUrlList) } func deleteComment(popUpStoreId: Int64, commentId: Int64) -> Completable { - return repository.deleteComment(request: .init(popUpStoreId: popUpStoreId, commentId: commentId)) + return repository.deleteComment(popUpStoreId: popUpStoreId, commentId: commentId) } func editComment(popUpStoreId: Int64, commentId: Int64, content: String?, imageUrlList: [PutCommentImageDataRequestDTO]?) -> Completable { - return repository.editComment(request: .init(popUpStoreId: popUpStoreId, commentId: commentId, content: content, imageUrlList: imageUrlList)) + return repository.editComment(popUpStoreId: popUpStoreId, commentId: commentId, content: content, imageUrlList: imageUrlList) } } diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/CommentAPIRepository.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/CommentAPIRepository.swift index bd079fc8..e353e65c 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/CommentAPIRepository.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/CommentAPIRepository.swift @@ -3,7 +3,22 @@ import Foundation import RxSwift protocol CommentAPIRepository { - func postCommentAdd(request: PostCommentRequestDTO) -> Completable - func deleteComment(request: DeleteCommentRequestDTO) -> Completable - func editComment(request: PutCommentRequestDTO) -> Completable + func postCommentAdd( + popUpStoreId: Int64, + content: String?, + commentType: String?, + imageUrlList: [String?] + ) -> Completable + + func deleteComment( + popUpStoreId: Int64, + commentId: Int64 + ) -> Completable + + func editComment( + popUpStoreId: Int64, + commentId: Int64, + content: String?, + imageUrlList: [PutCommentImageDataRequestDTO]? + ) -> Completable } diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/CommentAPIUseCase.swift b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/CommentAPIUseCase.swift index be737e40..021c842a 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/CommentAPIUseCase.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/CommentAPIUseCase.swift @@ -5,5 +5,5 @@ import RxSwift protocol CommentAPIUseCase { func postCommentAdd(popUpStoreId: Int64, content: String?, commentType: String?, imageUrlList: [String?]) -> Completable func deleteComment(popUpStoreId: Int64, commentId: Int64) -> Completable - func editComment(popUpStoreId: Int64, commentId: Int64, content: String?, imageUrlList: [PutCommentImageDataRequestDTO]?) -> Completable + func editComment(popUpStoreId: Int64, commentId: Int64, content: String?, imageUrlList: [String?]?) -> Completable } From ca1ddb797bdd9fe4a5b854f480f1eff566a71252 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 20 Apr 2025 00:22:17 +0000 Subject: [PATCH 7/9] style/#117: Apply SwiftLint autocorrect --- .../DataLayer/RepositoryImpl/AdminRepositoryImpl.swift | 2 +- .../DataLayer/RepositoryImpl/MapDirectionRepositoryImpl.swift | 2 +- .../Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift | 2 +- .../DomainInterface/Repository/MapRepository.swift | 1 - .../DomainLayer/DomainInterface/UseCase/MapUseCase.swift | 1 - .../DomainInterface/UseCase/SignUpAPIUseCase.swift | 4 ++-- 6 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift index 46cf88d8..5856ca40 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift @@ -1,5 +1,5 @@ -import Foundation import Alamofire +import Foundation import RxSwift final class AdminRepositoryImpl: AdminRepository { diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/MapDirectionRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/MapDirectionRepositoryImpl.swift index 8d0fa37c..25a7791f 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/MapDirectionRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/MapDirectionRepositoryImpl.swift @@ -3,7 +3,7 @@ import Foundation import RxSwift final class MapDirectionRepositoryImpl: MapDirectionRepository { - + private let provider: Provider private let tokenInterceptor = TokenInterceptor() diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift index 45973865..2a519f4b 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift @@ -51,7 +51,7 @@ final class MapRepositoryImpl: MapRepository { with: SignUpAPIEndpoint.signUp_getCategoryList(), interceptor: TokenInterceptor() ) - .do(onNext: { responseDTO in + .do(onNext: { _ in Logger.log( message: "카테고리 목록 응답 성공", category: .debug diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/MapRepository.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/MapRepository.swift index cfdb4f65..4e6c1a19 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/MapRepository.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/MapRepository.swift @@ -5,7 +5,6 @@ // Created by 송영훈 on 4/14/25. // - import Foundation import RxSwift diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/MapUseCase.swift b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/MapUseCase.swift index 9eb687da..c2944362 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/MapUseCase.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/MapUseCase.swift @@ -5,7 +5,6 @@ // Created by 송영훈 on 4/14/25. // - import Foundation import RxSwift diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/SignUpAPIUseCase.swift b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/SignUpAPIUseCase.swift index e0dfeb36..8711e4a7 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/SignUpAPIUseCase.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/SignUpAPIUseCase.swift @@ -12,8 +12,8 @@ protocol SignUpAPIUseCase { interests: [Int64], appleAuthorizationCode: String? ) -> Completable - + func checkNickName(nickName: String) -> Observable - + func fetchCategoryList() -> Observable<[CategoryResponse]> } From 0eb1045f65c71d08cd5f813da4cbbee32442de26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=80=E1=85=B5=E1=84=92?= =?UTF-8?q?=E1=85=A7=E1=86=AB?= Date: Sun, 20 Apr 2025 17:10:17 +0900 Subject: [PATCH 8/9] =?UTF-8?q?refactor/#117:=20AdminVC=20DTO=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=20=EC=A0=9C=EA=B1=B0=20,=20Params=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=EC=97=90=20=EB=A7=9E=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RepositoryImpl/AdminRepositoryImpl.swift | 10 +++++----- .../Domain/UseCaseImpl/AdminUseCaseImpl.swift | 4 ++-- ...StoreDetail.swift => StoreDetailResponse.swift} | 2 +- .../{AdminStore.swift => StoreResponse.swift} | 2 +- .../Repository/AdminRepository.swift | 4 ++-- .../DomainInterface/UseCase/AdminUseCase.swift | 4 ++-- .../DomainInterface/UseCase/MapUseCase.swift | 7 ------- .../Presentation/Scene/Admin/AdminReactor.swift | 8 ++++---- .../AdminRegister/PopUpStoreRegisterReactor.swift | 2 +- .../Presentation/Scene/Admin/AdminStoreCell.swift | 3 +-- .../Scene/Admin/AdminViewController.swift | 14 ++++---------- 11 files changed, 23 insertions(+), 37 deletions(-) rename Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/{AdminStoreDetail.swift => StoreDetailResponse.swift} (94%) rename Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/{AdminStore.swift => StoreResponse.swift} (83%) diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift index 5856ca40..1edf2d41 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift @@ -14,7 +14,7 @@ final class AdminRepositoryImpl: AdminRepository { } // MARK: - Store Methods - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> { + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[StoreResponse]> { let endpoint = AdminAPIEndpoint.fetchStoreList( query: query, page: page, @@ -26,19 +26,19 @@ final class AdminRepositoryImpl: AdminRepository { ) .map { response in response.popUpStoreList?.map { - AdminStore(id: $0.id, name: $0.name, categoryName: $0.categoryName, mainImageUrl: $0.mainImageUrl) + StoreResponse(id: $0.id, name: $0.name, categoryName: $0.categoryName, mainImageUrl: $0.mainImageUrl) } ?? [] } } - func fetchStoreDetail(id: Int64) -> Observable { + func fetchStoreDetail(id: Int64) -> Observable { let endpoint = AdminAPIEndpoint.fetchStoreDetail(id: id) return provider.requestData( with: endpoint, interceptor: tokenInterceptor ) .map { dto in - AdminStoreDetail( + StoreDetailResponse( id: dto.id, name: dto.name, categoryId: dto.categoryId, @@ -52,7 +52,7 @@ final class AdminRepositoryImpl: AdminRepository { mainImageUrl: dto.mainImageUrl, bannerYn: dto.bannerYn, images: dto.imageList.map { - AdminStoreDetail.StoreImage( + StoreDetailResponse.StoreImage( id: $0.id, imageUrl: $0.imageUrl ) diff --git a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift index 1f11e19f..3dfcb67f 100644 --- a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift +++ b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift @@ -9,11 +9,11 @@ final class AdminUseCaseImpl: AdminUseCase { self.repository = repository } - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> { + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[StoreResponse]> { return repository.fetchStoreList(query: query, page: page, size: size) } - func fetchStoreDetail(id: Int64) -> Observable { + func fetchStoreDetail(id: Int64) -> Observable { return repository.fetchStoreDetail(id: id) } diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreDetailResponse.swift similarity index 94% rename from Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift rename to Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreDetailResponse.swift index dc8f91ef..352b7f9f 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreDetailResponse.swift @@ -1,6 +1,6 @@ import Foundation -struct AdminStoreDetail { +struct StoreDetailResponse { let id: Int64 let name: String let categoryId: Int64 diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreResponse.swift similarity index 83% rename from Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift rename to Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreResponse.swift index 58db4f63..2e7913aa 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreResponse.swift @@ -1,6 +1,6 @@ import Foundation -struct AdminStore { +struct StoreResponse { let id: Int64 let name: String let categoryName: String diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift index 8f87a343..a30695e0 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift @@ -3,8 +3,8 @@ import Foundation import RxSwift protocol AdminRepository { - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> - func fetchStoreDetail(id: Int64) -> Observable + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[StoreResponse]> + func fetchStoreDetail(id: Int64) -> Observable func createStore(params: CreateStoreParams) -> Completable diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift index 08c59b15..b9a8161f 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift @@ -3,8 +3,8 @@ import RxSwift protocol AdminUseCase { - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> - func fetchStoreDetail(id: Int64) -> Observable + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[StoreResponse]> + func fetchStoreDetail(id: Int64) -> Observable func createStore(params: CreateStoreParams) -> Completable diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/MapUseCase.swift b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/MapUseCase.swift index c2944362..f425adf0 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/MapUseCase.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/MapUseCase.swift @@ -1,10 +1,3 @@ -// -// MapUseCase.swift -// Poppool -// -// Created by 송영훈 on 4/14/25. -// - import Foundation import RxSwift diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift index 4e9d8bc9..8ca61403 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift @@ -14,18 +14,18 @@ final class AdminReactor: Reactor { } enum Mutation { - case setStores([AdminStore]) + case setStores([StoreResponse]) case setIsLoading(Bool) case navigateToRegister(Bool) - case navigateToEdit(AdminStore) // ✅ 수정 데이터 추가 + case navigateToEdit(StoreResponse) // ✅ 수정 데이터 추가 } struct State { - var storeList: [AdminStore] = [] + var storeList: [StoreResponse] = [] var isLoading: Bool = false var shouldNavigateToRegister: Bool = false - var selectedStoreForEdit: AdminStore? // ✅ 추가 + var selectedStoreForEdit: StoreResponse? // ✅ 추가 } diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift index 6989d910..7ef8fb60 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift @@ -89,7 +89,7 @@ final class PopUpStoreRegisterReactor: Reactor { case addDeletedImage(id: Int64, path: String) // 기존 스토어 데이터 설정 - case setStoreDetail(AdminStoreDetail) + case setStoreDetail(StoreDetailResponse) case setOriginalImageIds([String: Int64]) // UI 상태 관리 diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminStoreCell.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminStoreCell.swift index a29c4ee6..e7468603 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminStoreCell.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminStoreCell.swift @@ -75,14 +75,13 @@ final class AdminStoreCell: UITableViewCell { } // MARK: - Configure - func configure(with store: GetAdminPopUpStoreListResponseDTO.PopUpStore) { + func configure(with store: StoreResponse) { Logger.log(message: "셀 데이터 바인딩: \(store)", category: .debug) titleLabel.text = store.name categoryLabel.text = store.categoryName statusChip.text = "운영" - // mainImageUrl에서 baseURL 부분 제거 let imagePath = store.mainImageUrl.replacingOccurrences(of: Secrets.popPoolS3BaseURL, with: "") Logger.log(message: "이미지 경로: \(imagePath)", category: .debug) storeImageView.setPPImage(path: imagePath) diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift index aa85097f..108773ee 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift @@ -153,7 +153,7 @@ final class AdminViewController: BaseViewController, View { present(alert, animated: true) } - private func showDeleteConfirmation(for store: AdminStore) { + private func showDeleteConfirmation(for store: StoreResponse) { let alert = UIAlertController( title: "삭제 확인", message: "\(store.name)을(를) 삭제하시겠습니까?", @@ -168,7 +168,7 @@ final class AdminViewController: BaseViewController, View { present(alert, animated: true) } - private func editStore(_ store: AdminStore) { + private func editStore(_ store: StoreResponse) { adminUseCase.fetchStoreDetail(id: store.id) .observe(on: MainScheduler.instance) .subscribe( @@ -201,7 +201,7 @@ final class AdminViewController: BaseViewController, View { .disposed(by: disposeBag) } - private func deleteStore(_ store: AdminStore) { + private func deleteStore(_ store: StoreResponse) { // 먼저 스토어 상세 정보를 가져와 모든 이미지 URL을 확인 adminUseCase.fetchStoreDetail(id: store.id) .observe(on: MainScheduler.instance) @@ -294,13 +294,7 @@ final class AdminViewController: BaseViewController, View { cellIdentifier: AdminStoreCell.identifier, cellType: AdminStoreCell.self )) { _, store, cell in - let dto = GetAdminPopUpStoreListResponseDTO.PopUpStore( - id: store.id, - name: store.name, - categoryName: store.categoryName, - mainImageUrl: store.mainImageUrl - ) - cell.configure(with: dto) + cell.configure(with: store) } .disposed(by: disposeBag) } From 11a86206182d151fc00f2d134e4d47b1a528d5f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=80=E1=85=B5=E1=84=92?= =?UTF-8?q?=E1=85=A7=E1=86=AB?= Date: Sun, 20 Apr 2025 19:10:36 +0900 Subject: [PATCH 9/9] =?UTF-8?q?refactor/#117:=20=ED=8C=9D=EC=97=85?= =?UTF-8?q?=EB=A0=88=EC=A7=80=EC=8A=A4=ED=84=B0=20=EB=B7=B0=EC=BB=A8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20DTO=20=EC=A0=9C=EA=B1=B0=20=EB=B9=8C?= =?UTF-8?q?=EB=93=9C=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Network/API/MapAPI/MapAPIEndpoint.swift | 1 - .../MapAPI/ResponseDTO/MapPopUpStoreDTO.swift | 18 ++++++++++++++- .../RepositoryImpl/AdminRepositoryImpl.swift | 10 ++++----- .../Converter/MapDomainModelConverter.swift | 22 ------------------- .../RepositoryImpl/MapRepositoryImpl.swift | 4 ++-- .../Domain/UseCaseImpl/AdminUseCaseImpl.swift | 4 ++-- .../{StoreResponse.swift => AdminStore.swift} | 2 +- ...lResponse.swift => AdminStoreDetail.swift} | 2 +- .../Repository/AdminRepository.swift | 4 ++-- .../UseCase/AdminUseCase.swift | 4 ++-- .../Scene/Admin/AdminReactor.swift | 8 +++---- .../PopUpStoreRegisterReactor.swift | 4 ++-- .../PopUpStoreRegisterViewController.swift | 2 +- .../Scene/Admin/AdminStoreCell.swift | 2 +- .../Scene/Admin/AdminViewController.swift | 6 ++--- 15 files changed, 43 insertions(+), 50 deletions(-) delete mode 100644 Poppool/Poppool/DataLayer/RepositoryImpl/Converter/MapDomainModelConverter.swift rename Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/{StoreResponse.swift => AdminStore.swift} (83%) rename Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/{StoreDetailResponse.swift => AdminStoreDetail.swift} (94%) diff --git a/Poppool/Poppool/DataLayer/Network/API/MapAPI/MapAPIEndpoint.swift b/Poppool/Poppool/DataLayer/Network/API/MapAPI/MapAPIEndpoint.swift index da8bc4fd..334067a5 100644 --- a/Poppool/Poppool/DataLayer/Network/API/MapAPI/MapAPIEndpoint.swift +++ b/Poppool/Poppool/DataLayer/Network/API/MapAPI/MapAPIEndpoint.swift @@ -52,7 +52,6 @@ struct MapAPIEndpoint { } } -// MARK: - Query DTOs struct BoundQueryDTO: Encodable { let northEastLat: Double let northEastLon: Double diff --git a/Poppool/Poppool/DataLayer/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift b/Poppool/Poppool/DataLayer/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift index 12d4916f..7f356980 100644 --- a/Poppool/Poppool/DataLayer/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift +++ b/Poppool/Poppool/DataLayer/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift @@ -14,8 +14,24 @@ struct MapPopUpStoreDTO: Codable { let markerSnippet: String let mainImageUrl: String? let bookmarkYn: Bool? -} + func toDomain() -> MapPopUpStore { + return MapPopUpStore( + id: id, + category: categoryName, + name: name, + address: address, + startDate: startDate, + endDate: endDate, + latitude: latitude, + longitude: longitude, + markerId: markerId, + markerTitle: markerTitle, + markerSnippet: markerSnippet, + mainImageUrl: mainImageUrl + ) + } +} struct GetViewBoundPopUpStoreListResponse: Decodable { let popUpStoreList: [MapPopUpStoreDTO] } diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift index 1edf2d41..5856ca40 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/AdminRepositoryImpl.swift @@ -14,7 +14,7 @@ final class AdminRepositoryImpl: AdminRepository { } // MARK: - Store Methods - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[StoreResponse]> { + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> { let endpoint = AdminAPIEndpoint.fetchStoreList( query: query, page: page, @@ -26,19 +26,19 @@ final class AdminRepositoryImpl: AdminRepository { ) .map { response in response.popUpStoreList?.map { - StoreResponse(id: $0.id, name: $0.name, categoryName: $0.categoryName, mainImageUrl: $0.mainImageUrl) + AdminStore(id: $0.id, name: $0.name, categoryName: $0.categoryName, mainImageUrl: $0.mainImageUrl) } ?? [] } } - func fetchStoreDetail(id: Int64) -> Observable { + func fetchStoreDetail(id: Int64) -> Observable { let endpoint = AdminAPIEndpoint.fetchStoreDetail(id: id) return provider.requestData( with: endpoint, interceptor: tokenInterceptor ) .map { dto in - StoreDetailResponse( + AdminStoreDetail( id: dto.id, name: dto.name, categoryId: dto.categoryId, @@ -52,7 +52,7 @@ final class AdminRepositoryImpl: AdminRepository { mainImageUrl: dto.mainImageUrl, bannerYn: dto.bannerYn, images: dto.imageList.map { - StoreDetailResponse.StoreImage( + AdminStoreDetail.StoreImage( id: $0.id, imageUrl: $0.imageUrl ) diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/Converter/MapDomainModelConverter.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/Converter/MapDomainModelConverter.swift deleted file mode 100644 index fb53ddab..00000000 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/Converter/MapDomainModelConverter.swift +++ /dev/null @@ -1,22 +0,0 @@ -import Foundation - -struct MapDomainModelConverter { - /// MapPopUpStoreDTO - /// → MapPopUpStore 도메인 모델로 변환 - static func convert(_ dto: MapPopUpStoreDTO) -> MapPopUpStore { - return MapPopUpStore( - id: dto.id, - category: dto.categoryName, - name: dto.name, - address: dto.address, - startDate: dto.startDate, - endDate: dto.endDate, - latitude: dto.latitude, - longitude: dto.longitude, - markerId: dto.markerId, - markerTitle: dto.markerTitle, - markerSnippet: dto.markerSnippet, - mainImageUrl: dto.mainImageUrl - ) - } -} diff --git a/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift b/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift index 2a519f4b..08ffdbee 100644 --- a/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift +++ b/Poppool/Poppool/DataLayer/RepositoryImpl/MapRepositoryImpl.swift @@ -27,7 +27,7 @@ final class MapRepositoryImpl: MapRepository { ), interceptor: TokenInterceptor() ) - .map { $0.popUpStoreList.map(MapDomainModelConverter.convert) } + .map { $0.popUpStoreList.map { $0.toDomain() } } } func searchStores( @@ -41,7 +41,7 @@ final class MapRepositoryImpl: MapRepository { ), interceptor: TokenInterceptor() ) - .map { $0.popUpStoreList.map(MapDomainModelConverter.convert) } + .map { $0.popUpStoreList.map { $0.toDomain() } } } func fetchCategories() -> Observable<[CategoryResponse]> { diff --git a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift index 3dfcb67f..1f11e19f 100644 --- a/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift +++ b/Poppool/Poppool/DomainLayer/Domain/UseCaseImpl/AdminUseCaseImpl.swift @@ -9,11 +9,11 @@ final class AdminUseCaseImpl: AdminUseCase { self.repository = repository } - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[StoreResponse]> { + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> { return repository.fetchStoreList(query: query, page: page, size: size) } - func fetchStoreDetail(id: Int64) -> Observable { + func fetchStoreDetail(id: Int64) -> Observable { return repository.fetchStoreDetail(id: id) } diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreResponse.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift similarity index 83% rename from Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreResponse.swift rename to Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift index 2e7913aa..58db4f63 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreResponse.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStore.swift @@ -1,6 +1,6 @@ import Foundation -struct StoreResponse { +struct AdminStore { let id: Int64 let name: String let categoryName: String diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreDetailResponse.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift similarity index 94% rename from Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreDetailResponse.swift rename to Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift index 352b7f9f..dc8f91ef 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/StoreDetailResponse.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift @@ -1,6 +1,6 @@ import Foundation -struct StoreDetailResponse { +struct AdminStoreDetail { let id: Int64 let name: String let categoryId: Int64 diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift index a30695e0..8f87a343 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/Repository/AdminRepository.swift @@ -3,8 +3,8 @@ import Foundation import RxSwift protocol AdminRepository { - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[StoreResponse]> - func fetchStoreDetail(id: Int64) -> Observable + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> + func fetchStoreDetail(id: Int64) -> Observable func createStore(params: CreateStoreParams) -> Completable diff --git a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift index b9a8161f..08c59b15 100644 --- a/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift +++ b/Poppool/Poppool/DomainLayer/DomainInterface/UseCase/AdminUseCase.swift @@ -3,8 +3,8 @@ import RxSwift protocol AdminUseCase { - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[StoreResponse]> - func fetchStoreDetail(id: Int64) -> Observable + func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> + func fetchStoreDetail(id: Int64) -> Observable func createStore(params: CreateStoreParams) -> Completable diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift index 8ca61403..4e9d8bc9 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminReactor.swift @@ -14,18 +14,18 @@ final class AdminReactor: Reactor { } enum Mutation { - case setStores([StoreResponse]) + case setStores([AdminStore]) case setIsLoading(Bool) case navigateToRegister(Bool) - case navigateToEdit(StoreResponse) // ✅ 수정 데이터 추가 + case navigateToEdit(AdminStore) // ✅ 수정 데이터 추가 } struct State { - var storeList: [StoreResponse] = [] + var storeList: [AdminStore] = [] var isLoading: Bool = false var shouldNavigateToRegister: Bool = false - var selectedStoreForEdit: StoreResponse? // ✅ 추가 + var selectedStoreForEdit: AdminStore? // ✅ 추가 } diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift index 7ef8fb60..fd4b5088 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift @@ -19,7 +19,7 @@ final class PopUpStoreRegisterReactor: Reactor { init( adminUseCase: AdminUseCase, presignedService: PreSignedService, - editingStore: GetAdminPopUpStoreListResponseDTO.PopUpStore? = nil + editingStore: AdminStore? = nil ) { self.adminUseCase = adminUseCase self.presignedService = presignedService @@ -89,7 +89,7 @@ final class PopUpStoreRegisterReactor: Reactor { case addDeletedImage(id: Int64, path: String) // 기존 스토어 데이터 설정 - case setStoreDetail(StoreDetailResponse) + case setStoreDetail(AdminStoreDetail) case setOriginalImageIds([String: Int64]) // UI 상태 관리 diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift index ed6fd4d0..3a33d18e 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift @@ -20,7 +20,7 @@ final class PopUpStoreRegisterViewController: BaseViewController { // MARK: - Initializer init( nickname: String, - editingStore: GetAdminPopUpStoreListResponseDTO.PopUpStore? = nil + editingStore: AdminStore? = nil ) { self.nickname = nickname self.mainView = PopUpRegisterView() diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminStoreCell.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminStoreCell.swift index e7468603..1789ce87 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminStoreCell.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminStoreCell.swift @@ -75,7 +75,7 @@ final class AdminStoreCell: UITableViewCell { } // MARK: - Configure - func configure(with store: StoreResponse) { + func configure(with store: AdminStore) { Logger.log(message: "셀 데이터 바인딩: \(store)", category: .debug) titleLabel.text = store.name diff --git a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift index 108773ee..29c8b765 100644 --- a/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift +++ b/Poppool/Poppool/PresentationLayer/Presentation/Scene/Admin/AdminViewController.swift @@ -153,7 +153,7 @@ final class AdminViewController: BaseViewController, View { present(alert, animated: true) } - private func showDeleteConfirmation(for store: StoreResponse) { + private func showDeleteConfirmation(for store: AdminStore) { let alert = UIAlertController( title: "삭제 확인", message: "\(store.name)을(를) 삭제하시겠습니까?", @@ -168,7 +168,7 @@ final class AdminViewController: BaseViewController, View { present(alert, animated: true) } - private func editStore(_ store: StoreResponse) { + private func editStore(_ store: AdminStore) { adminUseCase.fetchStoreDetail(id: store.id) .observe(on: MainScheduler.instance) .subscribe( @@ -201,7 +201,7 @@ final class AdminViewController: BaseViewController, View { .disposed(by: disposeBag) } - private func deleteStore(_ store: StoreResponse) { + private func deleteStore(_ store: AdminStore) { // 먼저 스토어 상세 정보를 가져와 모든 이미지 URL을 확인 adminUseCase.fetchStoreDetail(id: store.id) .observe(on: MainScheduler.instance)