diff --git a/Poppool/CoreLayer/Infrastructure/Infrastructure.xcodeproj/project.pbxproj b/Poppool/CoreLayer/Infrastructure/Infrastructure.xcodeproj/project.pbxproj new file mode 100644 index 00000000..d5ab556c --- /dev/null +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure.xcodeproj/project.pbxproj @@ -0,0 +1,443 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 0522C1D72DB67B4F00B141FF /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0522C1D62DB67B4F00B141FF /* RxSwift */; }; + 05EC93D92DB6605100771CB3 /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 05EC93D82DB6605100771CB3 /* RxCocoa */; }; + 05EC93DE2DB6612100771CB3 /* RxGesture in Frameworks */ = {isa = PBXBuildFile; productRef = 05EC93DD2DB6612100771CB3 /* RxGesture */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 0512596C2DB5629C001342A2 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 058CC9182DB5383C0084221A /* Infrastructure.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Infrastructure.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 058CC91A2DB5383C0084221A /* Infrastructure */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = Infrastructure; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 058CC9152DB5383C0084221A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0522C1D72DB67B4F00B141FF /* RxSwift in Frameworks */, + 05EC93DE2DB6612100771CB3 /* RxGesture in Frameworks */, + 05EC93D92DB6605100771CB3 /* RxCocoa in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 05125B6A2DB56C32001342A2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; + 058CC90E2DB5383C0084221A = { + isa = PBXGroup; + children = ( + 058CC91A2DB5383C0084221A /* Infrastructure */, + 05125B6A2DB56C32001342A2 /* Frameworks */, + 058CC9192DB5383C0084221A /* Products */, + ); + sourceTree = ""; + }; + 058CC9192DB5383C0084221A /* Products */ = { + isa = PBXGroup; + children = ( + 058CC9182DB5383C0084221A /* Infrastructure.framework */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 058CC9132DB5383C0084221A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 058CC9172DB5383C0084221A /* Infrastructure */ = { + isa = PBXNativeTarget; + buildConfigurationList = 058CC91F2DB5383C0084221A /* Build configuration list for PBXNativeTarget "Infrastructure" */; + buildPhases = ( + 058CC9132DB5383C0084221A /* Headers */, + 058CC9142DB5383C0084221A /* Sources */, + 058CC9152DB5383C0084221A /* Frameworks */, + 058CC9162DB5383C0084221A /* Resources */, + 0512596C2DB5629C001342A2 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 058CC91A2DB5383C0084221A /* Infrastructure */, + ); + name = Infrastructure; + packageProductDependencies = ( + 05EC93D82DB6605100771CB3 /* RxCocoa */, + 05EC93DD2DB6612100771CB3 /* RxGesture */, + 0522C1D62DB67B4F00B141FF /* RxSwift */, + ); + productName = Infrastructure; + productReference = 058CC9182DB5383C0084221A /* Infrastructure.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 058CC90F2DB5383C0084221A /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1630; + LastUpgradeCheck = 1630; + TargetAttributes = { + 058CC9172DB5383C0084221A = { + CreatedOnToolsVersion = 16.3; + }; + }; + }; + buildConfigurationList = 058CC9122DB5383C0084221A /* Build configuration list for PBXProject "Infrastructure" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 058CC90E2DB5383C0084221A; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 05C1D82E2DB53CE300508FFD /* XCRemoteSwiftPackageReference "RxSwift" */, + 05EC93DC2DB6612100771CB3 /* XCRemoteSwiftPackageReference "RxGesture" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 058CC9192DB5383C0084221A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 058CC9172DB5383C0084221A /* Infrastructure */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 058CC9162DB5383C0084221A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 058CC9142DB5383C0084221A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 058CC91D2DB5383C0084221A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 058CC91E2DB5383C0084221A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 058CC9202DB5383C0084221A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.Infrastructure; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + 058CC9212DB5383C0084221A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.Infrastructure; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 058CC9122DB5383C0084221A /* Build configuration list for PBXProject "Infrastructure" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 058CC91D2DB5383C0084221A /* Debug */, + 058CC91E2DB5383C0084221A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 058CC91F2DB5383C0084221A /* Build configuration list for PBXNativeTarget "Infrastructure" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 058CC9202DB5383C0084221A /* Debug */, + 058CC9212DB5383C0084221A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 05C1D82E2DB53CE300508FFD /* XCRemoteSwiftPackageReference "RxSwift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ReactiveX/RxSwift"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 6.9.0; + }; + }; + 05EC93DC2DB6612100771CB3 /* XCRemoteSwiftPackageReference "RxGesture" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/RxSwiftCommunity/RxGesture"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.0.4; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 0522C1D62DB67B4F00B141FF /* RxSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 05C1D82E2DB53CE300508FFD /* XCRemoteSwiftPackageReference "RxSwift" */; + productName = RxSwift; + }; + 05EC93D82DB6605100771CB3 /* RxCocoa */ = { + isa = XCSwiftPackageProductDependency; + package = 05C1D82E2DB53CE300508FFD /* XCRemoteSwiftPackageReference "RxSwift" */; + productName = RxCocoa; + }; + 05EC93DD2DB6612100771CB3 /* RxGesture */ = { + isa = XCSwiftPackageProductDependency; + package = 05EC93DC2DB6612100771CB3 /* XCRemoteSwiftPackageReference "RxGesture" */; + productName = RxGesture; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 058CC90F2DB5383C0084221A /* Project object */; +} diff --git a/Poppool/CoreLayer/Infrastructure/Infrastructure/DIContainer/DIContainer.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/DIContainer/DIContainer.swift new file mode 100644 index 00000000..66b3e1ef --- /dev/null +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/DIContainer/DIContainer.swift @@ -0,0 +1,66 @@ +import Foundation + +/// 의존성 주입 컨테이너 +/// +/// 이 컨테이너는 타입 기반으로 의존성을 등록하고 어디서든 안전하게 꺼내 쓸 수 있도록 도와줍니다. +/// +/// 앱 시작 시점에 필요한 구현체를 `register(_:_: )`를 통해 등록하고, +/// 이후에는 `resolve(_:)` 메서드를 통해 원하는 타입의 인스턴스를 꺼낼 수 있습니다. +/// +/// ## 등록 예시 +/// ```swift +/// DIContainer.register(SampleProtocol.self) { +/// SampleImpl() +/// } +/// ``` +/// +/// ## 사용 예시 +/// ```swift +/// // DIContainer의 resolve 메서드를 사용하는 방식 +/// let sample: SampleProtocol = DIContainer.resolve(SampleProtocol.self) +/// ``` +public final class DIContainer { + private static let container = DIContainer() + + private var registrations: [ObjectIdentifier: () -> Any] = [:] + + private let resolveQueue = DispatchQueue(label: "resolveQueue") + + private init() {} + + /// 의존성을 등록합니다. + /// - Parameters: + /// - type: 등록할 프로토콜 또는 클래스 타입 + /// - implementation: 해당 타입에 대응되는 구현체를 생성하는 클로저 + public static func register( + _ type: T.Type, + _ implementation: @escaping () -> T + ) { + container.register(type, implementation) + } + + /// 의존성을 꺼내옵니다. + /// - Parameter type: 요청할 타입 + /// - Returns: 등록된 타입의 인스턴스 + public static func resolve(_ type: T.Type) -> T { + return container.resolve(type) + } + + private func register( + _ type: T.Type, + _ implementation: @escaping () -> T + ) { + let key = ObjectIdentifier(type) + registrations[key] = { implementation() } + } + + private func resolve(_ type: T.Type) -> T { + let key = ObjectIdentifier(type) + + guard let registration = registrations[key], + let instance = registration() as? T + else { fatalError("\(type) does not registered") } + + return instance + } +} diff --git a/Poppool/CoreLayer/Infrastructure/Infrastructure/DIContainer/DependencyWrapper.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/DIContainer/DependencyWrapper.swift new file mode 100644 index 00000000..7096c486 --- /dev/null +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/DIContainer/DependencyWrapper.swift @@ -0,0 +1,28 @@ +import Foundation + +/// 의존성 자동 주입을 위한 프로퍼티 래퍼 +/// +/// 사용하는 곳에서 `@Dependency`만 붙이면 등록된 구현체가 자동으로 주입됩니다. +/// +/// Swift의 프로퍼티 래퍼 특성상 `var`로 선언해야 하지만, 실제 인스턴스는 외부에서 변경할 수 없도록 `private(set)`으로 보호되어 불변성을 유지합니다. +/// +/// 사용 예시: +/// ```swift +/// class MyViewModel { +/// @Dependency var sample: SampleProtocol +/// +/// func run() { +/// sample.doSomething() +/// } +/// } +/// ``` +@propertyWrapper +public final class Dependency { + /// DIContainer에서 꺼내온 실제 인스턴스 + public private(set) var wrappedValue: T + + /// DIContainer로부터 자동으로 인스턴스를 꺼내와 초기화합니다. + public init() { + self.wrappedValue = DIContainer.resolve(T.self) + } +} diff --git a/Poppool/Poppool/Presentation/Extension/Date?+.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/Date?+.swift similarity index 90% rename from Poppool/Poppool/Presentation/Extension/Date?+.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/Date?+.swift index 550cd427..c0a294a2 100644 --- a/Poppool/Poppool/Presentation/Extension/Date?+.swift +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/Date?+.swift @@ -1,13 +1,6 @@ -// -// Date+.swift -// Poppool -// -// Created by SeoJunYoung on 11/30/24. -// - import Foundation -extension Optional where Wrapped == Date { +public extension Optional where Wrapped == Date { /// `yyyy. MM. dd` 형식으로 날짜를 문자열로 변환합니다. /// - Parameter defaultString: 날짜가 nil일 경우 반환할 기본 문자열 (기본값: 빈 문자열 "") /// - Returns: 형식화된 날짜 문자열 또는 기본 문자열 diff --git a/Poppool/Poppool/Presentation/Extension/Reactive+.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/Reactive+.swift similarity index 87% rename from Poppool/Poppool/Presentation/Extension/Reactive+.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/Reactive+.swift index 74665b05..68a22b6c 100644 --- a/Poppool/Poppool/Presentation/Extension/Reactive+.swift +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/Reactive+.swift @@ -1,16 +1,9 @@ -// -// Reactive+.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/26/24. -// - import UIKit import RxCocoa import RxSwift -extension Reactive where Base: UIViewController { +public extension Reactive where Base: UIViewController { var viewDidLoad: ControlEvent { let source = self.methodInvoked(#selector(Base.viewDidLoad)).map( { _ in }) diff --git a/Poppool/Poppool/Presentation/Extension/String?+.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/String?+.swift similarity index 95% rename from Poppool/Poppool/Presentation/Extension/String?+.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/String?+.swift index 5e7c7831..c6bb485a 100644 --- a/Poppool/Poppool/Presentation/Extension/String?+.swift +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/String?+.swift @@ -1,6 +1,6 @@ import UIKit -extension Optional where Wrapped == String { +public extension Optional where Wrapped == String { /// ISO 8601 형식의 문자열을 `Date`로 변환하는 메서드 func toDate() -> Date? { guard let self = self else { return nil } // 옵셔널 해제 @@ -41,7 +41,7 @@ extension String { } extension String { /// ISO 8601 형식의 문자열을 `Date`로 변환하는 메서드 - func toDate() -> Date? { + public func toDate() -> Date? { let dateFormatter = DateFormatter() dateFormatter.locale = Locale(identifier: "en_US_POSIX") diff --git a/Poppool/Poppool/Presentation/Extension/UIImage+.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/UIImage+.swift similarity index 97% rename from Poppool/Poppool/Presentation/Extension/UIImage+.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/UIImage+.swift index dfeb7e32..cb0bce59 100644 --- a/Poppool/Poppool/Presentation/Extension/UIImage+.swift +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/UIImage+.swift @@ -8,7 +8,7 @@ import UIKit // UIImage를 색상으로 생성하는 Helper Extension -extension UIImage { +public extension UIImage { convenience init(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) { UIGraphicsBeginImageContext(size) UIGraphicsGetCurrentContext()?.setFillColor(color.cgColor) @@ -19,7 +19,7 @@ extension UIImage { } } -extension UIImage { +public extension UIImage { func isBright(threshold: CGFloat = 0.5) -> Bool? { guard let cgImage = self.cgImage else { return nil } diff --git a/Poppool/Poppool/Presentation/Extension/UIImageView+.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/UIImageView+.swift similarity index 89% rename from Poppool/Poppool/Presentation/Extension/UIImageView+.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/UIImageView+.swift index bd1738d3..cacd212c 100644 --- a/Poppool/Poppool/Presentation/Extension/UIImageView+.swift +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/Extension/UIImageView+.swift @@ -1,12 +1,12 @@ import UIKit -extension UIImageView { +public extension UIImageView { func setPPImage(path: String?) { guard let path = path else { self.image = UIImage(named: "image_default") return } - let imageURLString = KeyPath.popPoolS3BaseURL + path + let imageURLString = Secrets.popPoolS3BaseURL + path if let cenvertimageURL = imageURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) { ImageLoader.shared.loadImage(with: cenvertimageURL, defaultImage: UIImage(named: "image_default"), imageQuality: .origin) { [weak self] image in DispatchQueue.main.async { @@ -22,7 +22,7 @@ extension UIImageView { completion() return } - let imageURLString = KeyPath.popPoolS3BaseURL + path + let imageURLString = Secrets.popPoolS3BaseURL + path if let cenvertimageURL = imageURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) { let imageURL = URL(string: cenvertimageURL) ImageLoader.shared.loadImage(with: cenvertimageURL, defaultImage: UIImage(named: "image_default"), imageQuality: .origin) { [weak self] image in diff --git a/Poppool/Poppool/Infrastructure/ImageLoader/DiskStorage.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/ImageLoader/DiskStorage.swift similarity index 100% rename from Poppool/Poppool/Infrastructure/ImageLoader/DiskStorage.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/ImageLoader/DiskStorage.swift diff --git a/Poppool/Poppool/Infrastructure/ImageLoader/ImageLoader.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/ImageLoader/ImageLoader.swift similarity index 100% rename from Poppool/Poppool/Infrastructure/ImageLoader/ImageLoader.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/ImageLoader/ImageLoader.swift diff --git a/Poppool/Poppool/Infrastructure/ImageLoader/MemoryStorage.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/ImageLoader/MemoryStorage.swift similarity index 100% rename from Poppool/Poppool/Infrastructure/ImageLoader/MemoryStorage.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/ImageLoader/MemoryStorage.swift diff --git a/Poppool/Poppool/Infrastructure/Logger/Logger.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/Logger/Logger.swift similarity index 88% rename from Poppool/Poppool/Infrastructure/Logger/Logger.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/Logger/Logger.swift index 9ad233b2..16360c15 100644 --- a/Poppool/Poppool/Infrastructure/Logger/Logger.swift +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/Logger/Logger.swift @@ -1,14 +1,7 @@ -// -// Logger.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/9/24. -// - import Foundation -struct Logger { - enum Level { +public struct Logger { + public enum Level { case info case debug case network @@ -55,12 +48,10 @@ struct Logger { static var isShowLine: Bool = false static var isShowLog: Bool = true - static private let noInputText = "Input is not found" - - static func log( + public static func log( message: Any, category: Level, - fileName: String = noInputText, + fileName: String = "Input is not found", line: Int? = nil ) { if isShowLog { diff --git a/Poppool/Poppool/Resource/KeyPath.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/Secrets.swift similarity index 68% rename from Poppool/Poppool/Resource/KeyPath.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/Secrets.swift index 4bc23b90..80a48514 100644 --- a/Poppool/Poppool/Resource/KeyPath.swift +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/Secrets.swift @@ -1,23 +1,23 @@ import Foundation -enum KeyPath { - static var kakaoAuthAppKey: String { +public enum Secrets { + public static var kakaoAuthAppKey: String { return getValue(forKey: "KAKAO_AUTH_APP_KEY") } - static var popPoolBaseURL: String { + public static var popPoolBaseURL: String { return getValue(forKey: "POPPOOL_BASE_URL") } - static var popPoolS3BaseURL: String { + public static var popPoolS3BaseURL: String { return getValue(forKey: "POPPOOL_S3_BASE_URL") } - static var popPoolAPIKey: String { + public static var popPoolAPIKey: String { return getValue(forKey: "POPPOOL_API_KEY") } - static var naverMapClientID: String { + public static var naverMapClientID: String { return getValue(forKey: "NAVER_MAP_CLIENT_ID") } diff --git a/Poppool/Poppool/Infrastructure/KeyChainService.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/Service/KeyChainService.swift similarity index 93% rename from Poppool/Poppool/Infrastructure/KeyChainService.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/Service/KeyChainService.swift index ebcfcb70..bc44ded4 100644 --- a/Poppool/Poppool/Infrastructure/KeyChainService.swift +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/Service/KeyChainService.swift @@ -1,16 +1,9 @@ -// -// KeyChainService.swift -// MomsVillage -// -// Created by SeoJunYoung on 9/2/24. -// - import Foundation import Security import RxSwift -final class KeyChainService { +public final class KeyChainService { // KeyChain에서 발생할 수 있는 오류를 정의 enum KeyChainError: Error { @@ -22,10 +15,12 @@ final class KeyChainService { // KeyChain 서비스 이름 private let service = "keyChain" + public init() { } + /// KeyChain에서 특정 타입의 토큰을 가져오는 메서드 /// - Parameter type: 가져오려는 토큰의 타입 (`accessToken` 또는 `refreshToken`) /// - Returns: 가져온 토큰을 담은 `Single` - func fetchToken(type: TokenType) -> Result { + public func fetchToken(type: TokenType) -> Result { // 1. query 작성 let keyChainQuery: NSDictionary = [ kSecClass: kSecClassGenericPassword, @@ -67,7 +62,7 @@ final class KeyChainService { /// - Parameter type: 저장하려는 토큰의 타입 (`accessToken` 또는 `refreshToken`) /// - Parameter value: 저장할 토큰의 값 /// - Returns: 완료 시 `Completable` - func saveToken(type: TokenType, value: String) -> Result { + public func saveToken(type: TokenType, value: String) -> Result { // allowLossyConversion은 인코딩 과정에서 손실이 되는 것을 허용할 것인지 설정 guard let convertValue = value.data(using: .utf8, allowLossyConversion: false) else { return .failure(KeyChainError.dataConversionError(message: "Failed to convert value to Data.")) @@ -103,7 +98,7 @@ final class KeyChainService { /// KeyChain에서 특정 타입의 토큰을 삭제하는 메서드 /// - Parameter type: 삭제하려는 토큰의 타입 (`accessToken` 또는 `refreshToken`) /// - Returns: 완료 시 `Completable` - func deleteToken(type: TokenType) -> Result { + public func deleteToken(type: TokenType) -> Result { // 1. query 작성 let keyChainQuery: NSDictionary = [ kSecClass: kSecClassGenericPassword, @@ -128,7 +123,7 @@ final class KeyChainService { } } -enum TokenType: String { +public enum TokenType: String { case accessToken // 액세스 토큰 case refreshToken // 리프레시 토큰 } diff --git a/Poppool/Poppool/Infrastructure/UserDefaultService.swift b/Poppool/CoreLayer/Infrastructure/Infrastructure/Service/UserDefaultService.swift similarity index 86% rename from Poppool/Poppool/Infrastructure/UserDefaultService.swift rename to Poppool/CoreLayer/Infrastructure/Infrastructure/Service/UserDefaultService.swift index ff64c2a6..d3ef879b 100644 --- a/Poppool/Poppool/Infrastructure/UserDefaultService.swift +++ b/Poppool/CoreLayer/Infrastructure/Infrastructure/Service/UserDefaultService.swift @@ -9,7 +9,9 @@ import Foundation import RxSwift -final class UserDefaultService { +public final class UserDefaultService { + + public init() { } /// Userdefault 데이터 저장 메서드 /// - Parameters: @@ -17,7 +19,7 @@ final class UserDefaultService { /// - value: 저장하는 데이터 값 i.e) access token 등 /// - to: 로컬 데이터베이스 타입 - DatabaseType /// - Returns: 별도 안내 없음 - func save(key: String, value: String) { + public func save(key: String, value: String) { UserDefaults.standard.set(value, forKey: key) } @@ -27,7 +29,7 @@ final class UserDefaultService { /// - value: 저장하는 데이터 값 i.e) access token 등 /// - to: 로컬 데이터베이스 타입 - DatabaseType /// - Returns: 별도 안내 없음 - func save(key: String, value: [String]) { + public func save(key: String, value: [String]) { UserDefaults.standard.set(value, forKey: key) } @@ -36,7 +38,7 @@ final class UserDefaultService { /// - key: 찾는 데이터의 키 값 i.e) 유저 id 등 /// - from: 로컬 데이터베이스 타입 - DatabaseType /// - Returns: 찾은 데이터 - String 타입 - func fetch(key: String) -> String? { + public func fetch(key: String) -> String? { if let token = UserDefaults.standard.string(forKey: key) { return token } @@ -48,7 +50,7 @@ final class UserDefaultService { /// - key: 찾는 데이터의 키 값 i.e) 유저 id 등 /// - from: 로컬 데이터베이스 타입 - DatabaseType /// - Returns: 찾은 데이터 - String 타입 - func fetchArray(key: String) -> [String]? { + public func fetchArray(key: String) -> [String]? { if let token = UserDefaults.standard.array(forKey: key) as? [String] { return token } @@ -60,7 +62,7 @@ final class UserDefaultService { /// - key: 삭제하는 데이터의 키 값 i.e) 유저 id 등 /// - from: 로컬 데이터베이스 타입 - DatabaseType /// - Returns: 별도 안내 없음 - func delete(key: String) { + public func delete(key: String) { UserDefaults.standard.removeObject(forKey: key) } } diff --git a/Poppool/DataLayer/Data/Data.xcodeproj/project.pbxproj b/Poppool/DataLayer/Data/Data.xcodeproj/project.pbxproj new file mode 100644 index 00000000..84c04464 --- /dev/null +++ b/Poppool/DataLayer/Data/Data.xcodeproj/project.pbxproj @@ -0,0 +1,499 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 0522C1DB2DB67C6100B141FF /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0522C1DA2DB67C6100B141FF /* RxSwift */; }; + 05BDD3DC2DB66EB500C1E192 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 05BDD3DB2DB66EB500C1E192 /* Alamofire */; }; + 05C1D6172DB53A5600508FFD /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D6152DB53A5600508FFD /* DomainInterface.framework */; }; + 05C1D6192DB53A5600508FFD /* Infrastructure.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D6162DB53A5600508FFD /* Infrastructure.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 058CC8DC2DB5376A0084221A /* Data.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Data.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D6152DB53A5600508FFD /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D6162DB53A5600508FFD /* Infrastructure.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Infrastructure.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 05C1D67A2DB53AB000508FFD /* Exceptions for "Data" folder in "Data" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Network/API/AdminAPI/AdminAPIEndpoint.swift, + Network/API/AdminAPI/ResponseDTO/AdminResponseDTO.swift, + Network/API/AdminAPI/ResponseDTO/GetAdminPopUpStoreListResponseDTO.swift, + Network/API/AuthAPI/AuthAPIEndPoint.swift, + Network/API/AuthAPI/ResponseDTO/LoginResponseDTO.swift, + Network/API/AuthAPI/ResponseDTO/PostTokenReissueResponseDTO.swift, + Network/API/CommentAPI/CommentAPIEndPoint.swift, + Network/API/CommentAPI/RequestDTO/DeleteCommentRequestDTO.swift, + Network/API/CommentAPI/RequestDTO/PostCommentRequestDTO.swift, + Network/API/CommentAPI/RequestDTO/PutCommentRequestDTO.swift, + Network/API/HomeAPI/HomeAPIEndpoint.swift, + Network/API/HomeAPI/RequestDTO/HomeSortedRequestDTO.swift, + Network/API/HomeAPI/ResponseDTO/BannerPopUpStoreDTO.swift, + Network/API/HomeAPI/ResponseDTO/GetHomeInfoResponseDTO.swift, + Network/API/HomeAPI/ResponseDTO/PopUpStoreResponseDTO.swift, + Network/API/MapAPI/FindDirectionEndPoint.swift, + Network/API/MapAPI/MapAPIEndpoint.swift, + Network/API/MapAPI/ResponseDTO/GetPopUpDirectionResponseDTO.swift, + Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift, + Network/API/PopUpAPI/PopUpAPIEndPoint.swift, + Network/API/PopUpAPI/RequestDTO/GetPopUpCommentRequestDTO.swift, + Network/API/PopUpAPI/RequestDTO/GetPopUpDetailRequestDTO.swift, + Network/API/PopUpAPI/RequestDTO/GetSearchPopUpListRequestDTO.swift, + Network/API/PopUpAPI/ResponseDTO/GetClosePopUpListResponseDTO.swift, + Network/API/PopUpAPI/ResponseDTO/GetOpenPopUpListResponseDTO.swift, + Network/API/PopUpAPI/ResponseDTO/GetPopUpCommentResponseDTO.swift, + Network/API/PopUpAPI/ResponseDTO/GetPopUpDetailResponseDTO.swift, + Network/API/PopUpAPI/ResponseDTO/GetSearchPopUpListResponseDTO.swift, + Network/API/PreSignedAPI/PreSignedAPIEndPoint.swift, + Network/API/PreSignedAPI/RequestDTO/PresignedURLRequestDTO.swift, + Network/API/PreSignedAPI/ResponseDTO/PreSignedURLDTO.swift, + Network/API/PreSignedAPI/ResponseDTO/PreSignedURLResponseDTO.swift, + Network/API/SignUpAPI/RequestDTO/CheckNickNameRequestDTO.swift, + Network/API/SignUpAPI/RequestDTO/SignUpRequestDTO.swift, + Network/API/SignUpAPI/ResponseDTO/GetCategoryListResponseDTO.swift, + Network/API/SignUpAPI/SignUpAPIEndpoint.swift, + Network/API/UserAPI/RequesetDTO/CommentLikeRequestDTO.swift, + Network/API/UserAPI/RequesetDTO/GetMyCommentRequestDTO.swift, + Network/API/UserAPI/RequesetDTO/GetOtherUserCommentListRequestDTO.swift, + Network/API/UserAPI/RequesetDTO/PostBookmarkPopUpRequestDTO.swift, + Network/API/UserAPI/RequesetDTO/PostUserBlockRequestDTO.swift, + Network/API/UserAPI/RequesetDTO/PutUserCategoryRequestDTO.swift, + Network/API/UserAPI/RequesetDTO/PutUserProfileRequestDTO.swift, + Network/API/UserAPI/RequesetDTO/PutUserTailoredInfoRequestDTO.swift, + Network/API/UserAPI/RequesetDTO/UserSortedRequestDTO.swift, + Network/API/UserAPI/ResponseDTO/GetBlockUserListResponseDTO.swift, + Network/API/UserAPI/ResponseDTO/GetMyCommentedPopUpResponseDTO.swift, + Network/API/UserAPI/ResponseDTO/GetMyPageResponseDTO.swift, + Network/API/UserAPI/ResponseDTO/GetMyProfileResponseDTO.swift, + Network/API/UserAPI/ResponseDTO/GetNoticeDetailResponseDTO.swift, + Network/API/UserAPI/ResponseDTO/GetNoticeListResponseDTO.swift, + Network/API/UserAPI/ResponseDTO/GetOtherUserCommentedPopUpListResponseDTO.swift, + Network/API/UserAPI/ResponseDTO/GetRecentPopUpResponseDTO.swift, + Network/API/UserAPI/ResponseDTO/GetWithdrawlListResponseDTO.swift, + Network/API/UserAPI/UserAPIEndPoint.swift, + Network/Common/NetworkError.swift, + Network/Common/Requestable.swift, + Network/Common/Responsable.swift, + Network/EndPoint/Endpoint.swift, + Network/EndPoint/MultipartEndPoint.swift, + Network/EndPoint/RequestEndpoint.swift, + Network/Interceptor/TokenInterceptor.swift, + Network/Provider/Provider.swift, + Network/Provider/ProviderImpl.swift, + Network/Service/PreSignedService.swift, + RepositoryImpl/AdminRepositoryImpl.swift, + RepositoryImpl/AuthAPIRepositoryImpl.swift, + RepositoryImpl/CommentAPIRepositoryImpl.swift, + RepositoryImpl/HomeAPIRepositoryImpl.swift, + RepositoryImpl/MapDirectionRepositoryImpl.swift, + RepositoryImpl/MapRepositoryImpl.swift, + RepositoryImpl/PopUpAPIRepositoryImpl.swift, + RepositoryImpl/PreSignedRepositoryImpl.swift, + RepositoryImpl/SignUpRepositoryImpl.swift, + RepositoryImpl/UserAPIRepositoryImpl.swift, + ); + target = 058CC8DB2DB5376A0084221A /* Data */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 05C1D05C2DB5387500508FFD /* Data */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 05C1D67A2DB53AB000508FFD /* Exceptions for "Data" folder in "Data" target */, + ); + path = Data; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 058CC8D92DB5376A0084221A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 05BDD3DC2DB66EB500C1E192 /* Alamofire in Frameworks */, + 05C1D6172DB53A5600508FFD /* DomainInterface.framework in Frameworks */, + 0522C1DB2DB67C6100B141FF /* RxSwift in Frameworks */, + 05C1D6192DB53A5600508FFD /* Infrastructure.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 058CC8D22DB5376A0084221A = { + isa = PBXGroup; + children = ( + 05C1D05C2DB5387500508FFD /* Data */, + 05C1D6142DB53A5600508FFD /* Frameworks */, + 058CC8DD2DB5376A0084221A /* Products */, + ); + sourceTree = ""; + }; + 058CC8DD2DB5376A0084221A /* Products */ = { + isa = PBXGroup; + children = ( + 058CC8DC2DB5376A0084221A /* Data.framework */, + ); + name = Products; + sourceTree = ""; + }; + 05C1D6142DB53A5600508FFD /* Frameworks */ = { + isa = PBXGroup; + children = ( + 05C1D6152DB53A5600508FFD /* DomainInterface.framework */, + 05C1D6162DB53A5600508FFD /* Infrastructure.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 058CC8D72DB5376A0084221A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 058CC8DB2DB5376A0084221A /* Data */ = { + isa = PBXNativeTarget; + buildConfigurationList = 058CC8E32DB5376A0084221A /* Build configuration list for PBXNativeTarget "Data" */; + buildPhases = ( + 058CC8D72DB5376A0084221A /* Headers */, + 058CC8D82DB5376A0084221A /* Sources */, + 058CC8D92DB5376A0084221A /* Frameworks */, + 058CC8DA2DB5376A0084221A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Data; + packageProductDependencies = ( + 05BDD3DB2DB66EB500C1E192 /* Alamofire */, + 0522C1DA2DB67C6100B141FF /* RxSwift */, + ); + productName = Data; + productReference = 058CC8DC2DB5376A0084221A /* Data.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 058CC8D32DB5376A0084221A /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1630; + LastUpgradeCheck = 1630; + TargetAttributes = { + 058CC8DB2DB5376A0084221A = { + CreatedOnToolsVersion = 16.3; + }; + }; + }; + buildConfigurationList = 058CC8D62DB5376A0084221A /* Build configuration list for PBXProject "Data" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 058CC8D22DB5376A0084221A; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 08B2A3532DB66B1D00E57EFA /* XCRemoteSwiftPackageReference "Alamofire" */, + 05BDD5DA2DB6786900C1E192 /* XCRemoteSwiftPackageReference "RxSwift" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 058CC8DD2DB5376A0084221A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 058CC8DB2DB5376A0084221A /* Data */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 058CC8DA2DB5376A0084221A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 058CC8D82DB5376A0084221A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 058CC8E12DB5376A0084221A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 058CC8E22DB5376A0084221A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 058CC8E42DB5376A0084221A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.Data; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 058CC8E52DB5376A0084221A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.Data; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 058CC8D62DB5376A0084221A /* Build configuration list for PBXProject "Data" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 058CC8E12DB5376A0084221A /* Debug */, + 058CC8E22DB5376A0084221A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 058CC8E32DB5376A0084221A /* Build configuration list for PBXNativeTarget "Data" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 058CC8E42DB5376A0084221A /* Debug */, + 058CC8E52DB5376A0084221A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 05BDD5DA2DB6786900C1E192 /* XCRemoteSwiftPackageReference "RxSwift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ReactiveX/RxSwift"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 6.9.0; + }; + }; + 08B2A3532DB66B1D00E57EFA /* XCRemoteSwiftPackageReference "Alamofire" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Alamofire/Alamofire.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.10.2; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 0522C1DA2DB67C6100B141FF /* RxSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 05BDD5DA2DB6786900C1E192 /* XCRemoteSwiftPackageReference "RxSwift" */; + productName = RxSwift; + }; + 05BDD3DB2DB66EB500C1E192 /* Alamofire */ = { + isa = XCSwiftPackageProductDependency; + package = 08B2A3532DB66B1D00E57EFA /* XCRemoteSwiftPackageReference "Alamofire" */; + productName = Alamofire; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 058CC8D32DB5376A0084221A /* Project object */; +} diff --git a/Poppool/Poppool/Data/Network/AdminAPI/AdminAPIEndpoint.swift b/Poppool/DataLayer/Data/Data/Network/API/AdminAPI/AdminAPIEndpoint.swift similarity index 84% rename from Poppool/Poppool/Data/Network/AdminAPI/AdminAPIEndpoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/AdminAPI/AdminAPIEndpoint.swift index b5ba885d..1b7175d1 100644 --- a/Poppool/Poppool/Data/Network/AdminAPI/AdminAPIEndpoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/AdminAPI/AdminAPIEndpoint.swift @@ -1,5 +1,9 @@ import Foundation +import Infrastructure + +struct EmptyResponse: Decodable {} + struct AdminAPIEndpoint { // MARK: - Store List @@ -14,7 +18,7 @@ struct AdminAPIEndpoint { size: size ) return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/admin/popup-stores/list", method: .get, queryParameters: params @@ -26,7 +30,7 @@ struct AdminAPIEndpoint { id: Int64 ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/admin/popup-stores", method: .get, queryParameters: ["popUpStoreId": id] @@ -38,7 +42,7 @@ struct AdminAPIEndpoint { request: CreatePopUpStoreRequestDTO ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/admin/popup-stores", method: .post, bodyParameters: request @@ -50,7 +54,7 @@ struct AdminAPIEndpoint { request: UpdatePopUpStoreRequestDTO ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/admin/popup-stores", method: .put, bodyParameters: request @@ -62,7 +66,7 @@ struct AdminAPIEndpoint { id: Int64 ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/admin/popup-stores", method: .delete, queryParameters: ["popUpStoreId": id] @@ -74,7 +78,7 @@ struct AdminAPIEndpoint { request: CreateNoticeRequestDTO ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/admin/notice", method: .post, bodyParameters: request @@ -86,7 +90,7 @@ struct AdminAPIEndpoint { request: UpdateNoticeRequestDTO ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/admin/notice/\(id)", method: .put, bodyParameters: request @@ -97,7 +101,7 @@ struct AdminAPIEndpoint { id: Int64 ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/admin/notice/\(id)", method: .delete ) diff --git a/Poppool/Poppool/Data/Network/AdminAPI/ResponseDTO/AdminResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/AdminAPI/ResponseDTO/AdminResponseDTO.swift similarity index 93% rename from Poppool/Poppool/Data/Network/AdminAPI/ResponseDTO/AdminResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/AdminAPI/ResponseDTO/AdminResponseDTO.swift index 329934c5..338ec553 100644 --- a/Poppool/Poppool/Data/Network/AdminAPI/ResponseDTO/AdminResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/AdminAPI/ResponseDTO/AdminResponseDTO.swift @@ -40,6 +40,3 @@ struct GetAdminPopUpStoreDetailResponseDTO: Decodable { let imageUrl: String } } - -// MARK: - Empty Response -struct EmptyResponse: Decodable {} diff --git a/Poppool/Poppool/Data/Network/AdminAPI/ResponseDTO/GetAdminPopUpStoreListResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/AdminAPI/ResponseDTO/GetAdminPopUpStoreListResponseDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/AdminAPI/ResponseDTO/GetAdminPopUpStoreListResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/AdminAPI/ResponseDTO/GetAdminPopUpStoreListResponseDTO.swift diff --git a/Poppool/Poppool/Data/Network/AuthAPI/AuthAPIEndPoint.swift b/Poppool/DataLayer/Data/Data/Network/API/AuthAPI/AuthAPIEndPoint.swift similarity index 81% rename from Poppool/Poppool/Data/Network/AuthAPI/AuthAPIEndPoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/AuthAPI/AuthAPIEndPoint.swift index 4647490b..5d52d9b6 100644 --- a/Poppool/Poppool/Data/Network/AuthAPI/AuthAPIEndPoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/AuthAPI/AuthAPIEndPoint.swift @@ -1,12 +1,7 @@ -// -// AuthAPIEndPoint.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - import Foundation +import Infrastructure + struct AuthAPIEndPoint { // MARK: - Auth API @@ -18,7 +13,7 @@ struct AuthAPIEndPoint { /// - Returns: Endpoint static func auth_tryLogin(with userCredential: Encodable, path: String) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/auth/\(path)", method: .post, bodyParameters: userCredential, @@ -28,7 +23,7 @@ struct AuthAPIEndPoint { static func postTokenReissue() -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/auth/token/reissue", method: .post ) diff --git a/Poppool/Poppool/Data/Network/AuthAPI/ResponseDTO/LoginResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/AuthAPI/ResponseDTO/LoginResponseDTO.swift similarity index 89% rename from Poppool/Poppool/Data/Network/AuthAPI/ResponseDTO/LoginResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/AuthAPI/ResponseDTO/LoginResponseDTO.swift index 198eccd0..d88322d6 100644 --- a/Poppool/Poppool/Data/Network/AuthAPI/ResponseDTO/LoginResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/AuthAPI/ResponseDTO/LoginResponseDTO.swift @@ -1,12 +1,7 @@ -// -// LoginResponseDTO.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - import Foundation +import DomainInterface + struct LoginResponseDTO: Decodable { var userId: String var grantType: String diff --git a/Poppool/Poppool/Data/Network/AuthAPI/ResponseDTO/PostTokenReissueResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/AuthAPI/ResponseDTO/PostTokenReissueResponseDTO.swift similarity index 84% rename from Poppool/Poppool/Data/Network/AuthAPI/ResponseDTO/PostTokenReissueResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/AuthAPI/ResponseDTO/PostTokenReissueResponseDTO.swift index 3640caf4..73ccf5ea 100644 --- a/Poppool/Poppool/Data/Network/AuthAPI/ResponseDTO/PostTokenReissueResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/AuthAPI/ResponseDTO/PostTokenReissueResponseDTO.swift @@ -1,12 +1,7 @@ -// -// PostTokenReissueResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 1/16/25. -// - import Foundation +import DomainInterface + struct PostTokenReissueResponseDTO: Decodable { var accessToken: String? var refreshToken: String? diff --git a/Poppool/Poppool/Data/Network/CommentAPI/CommentAPIEndPoint.swift b/Poppool/DataLayer/Data/Data/Network/API/CommentAPI/CommentAPIEndPoint.swift similarity index 76% rename from Poppool/Poppool/Data/Network/CommentAPI/CommentAPIEndPoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/CommentAPI/CommentAPIEndPoint.swift index 02f4d689..558686aa 100644 --- a/Poppool/Poppool/Data/Network/CommentAPI/CommentAPIEndPoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/CommentAPI/CommentAPIEndPoint.swift @@ -1,19 +1,14 @@ -// -// CommentAPIEndPoint.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - import Foundation +import Infrastructure + import RxSwift struct CommentAPIEndPoint { static func postCommentAdd(request: PostCommentRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/comments", method: .post, bodyParameters: request @@ -22,7 +17,7 @@ struct CommentAPIEndPoint { static func deleteComment(request: DeleteCommentRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/comments", method: .delete, queryParameters: request @@ -31,7 +26,7 @@ struct CommentAPIEndPoint { static func editComment(request: PutCommentRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/comments", method: .put, bodyParameters: request diff --git a/Poppool/Poppool/Data/Network/CommentAPI/RequestDTO/DeleteCommentRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/CommentAPI/RequestDTO/DeleteCommentRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/CommentAPI/RequestDTO/DeleteCommentRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/CommentAPI/RequestDTO/DeleteCommentRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/CommentAPI/RequestDTO/PostCommentRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/CommentAPI/RequestDTO/PostCommentRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/CommentAPI/RequestDTO/PostCommentRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/CommentAPI/RequestDTO/PostCommentRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/CommentAPI/RequestDTO/PutCommentRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/CommentAPI/RequestDTO/PutCommentRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/CommentAPI/RequestDTO/PutCommentRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/CommentAPI/RequestDTO/PutCommentRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/HomeAPI/HomeAPIEndpoint.swift b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/HomeAPIEndpoint.swift similarity index 70% rename from Poppool/Poppool/Data/Network/HomeAPI/HomeAPIEndpoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/HomeAPI/HomeAPIEndpoint.swift index 30e19486..82dd7985 100644 --- a/Poppool/Poppool/Data/Network/HomeAPI/HomeAPIEndpoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/HomeAPIEndpoint.swift @@ -1,19 +1,14 @@ -// -// HomeRepositoryImpl.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - import Foundation +import Infrastructure + struct HomeAPIEndpoint { static func fetchHome( - request: SortedRequestDTO + request: HomeSortedRequestDTO ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/home", method: .get, queryParameters: request @@ -21,10 +16,10 @@ struct HomeAPIEndpoint { } static func fetchPopularPopUp( - request: SortedRequestDTO + request: HomeSortedRequestDTO ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/home/popular/popup-stores", method: .get, queryParameters: request @@ -32,10 +27,10 @@ struct HomeAPIEndpoint { } static func fetchNewPopUp( - request: SortedRequestDTO + request: HomeSortedRequestDTO ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/home/new/popup-stores", method: .get, queryParameters: request @@ -43,10 +38,10 @@ struct HomeAPIEndpoint { } static func fetchCustomPopUp( - request: SortedRequestDTO + request: HomeSortedRequestDTO ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/home/custom/popup-stores", method: .get, queryParameters: request diff --git a/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/RequestDTO/HomeSortedRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/RequestDTO/HomeSortedRequestDTO.swift new file mode 100644 index 00000000..1f7b5f72 --- /dev/null +++ b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/RequestDTO/HomeSortedRequestDTO.swift @@ -0,0 +1,7 @@ +import Foundation + +struct HomeSortedRequestDTO: Encodable { + var page: Int32? + var size: Int32? + var sort: String? +} diff --git a/Poppool/Poppool/Data/Network/HomeAPI/ResponseDTO/BannerPopUpStoreDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/ResponseDTO/BannerPopUpStoreDTO.swift similarity index 78% rename from Poppool/Poppool/Data/Network/HomeAPI/ResponseDTO/BannerPopUpStoreDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/HomeAPI/ResponseDTO/BannerPopUpStoreDTO.swift index f1eacb95..6f2841ac 100644 --- a/Poppool/Poppool/Data/Network/HomeAPI/ResponseDTO/BannerPopUpStoreDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/ResponseDTO/BannerPopUpStoreDTO.swift @@ -1,12 +1,7 @@ -// -// BannerPopUpStoreDTO.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - import Foundation +import DomainInterface + struct BannerPopUpStoreDTO: Decodable { var id: Int64 var name: String diff --git a/Poppool/Poppool/Data/Network/HomeAPI/ResponseDTO/GetHomeInfoResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/ResponseDTO/GetHomeInfoResponseDTO.swift similarity index 94% rename from Poppool/Poppool/Data/Network/HomeAPI/ResponseDTO/GetHomeInfoResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/HomeAPI/ResponseDTO/GetHomeInfoResponseDTO.swift index d33857b7..351faf9f 100644 --- a/Poppool/Poppool/Data/Network/HomeAPI/ResponseDTO/GetHomeInfoResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/ResponseDTO/GetHomeInfoResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetHomeInfoResponseDTO.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - import Foundation +import DomainInterface + struct GetHomeInfoResponseDTO: Decodable { var bannerPopUpStoreList: [BannerPopUpStoreDTO] var nickname: String? diff --git a/Poppool/Poppool/Data/Network/HomeAPI/ResponseDTO/PopUpStoreResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/ResponseDTO/PopUpStoreResponseDTO.swift similarity index 87% rename from Poppool/Poppool/Data/Network/HomeAPI/ResponseDTO/PopUpStoreResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/HomeAPI/ResponseDTO/PopUpStoreResponseDTO.swift index 830f3423..4cfb0832 100644 --- a/Poppool/Poppool/Data/Network/HomeAPI/ResponseDTO/PopUpStoreResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/HomeAPI/ResponseDTO/PopUpStoreResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetHomeInfoDataResponseDTO.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - import Foundation +import DomainInterface + struct PopUpStoreResponseDTO: Decodable { let id: Int64 let categoryName: String? diff --git a/Poppool/Poppool/Data/Network/MapAPI/FindDirectionEndPoint.swift b/Poppool/DataLayer/Data/Data/Network/API/MapAPI/FindDirectionEndPoint.swift similarity index 69% rename from Poppool/Poppool/Data/Network/MapAPI/FindDirectionEndPoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/MapAPI/FindDirectionEndPoint.swift index 691cf788..e9680478 100644 --- a/Poppool/Poppool/Data/Network/MapAPI/FindDirectionEndPoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/MapAPI/FindDirectionEndPoint.swift @@ -1,19 +1,14 @@ -// -// FindDirectionEndPoint.swift -// Poppool -// -// Created by 김기현 on 1/23/25. -// - import Foundation +import Infrastructure + struct FindDirectionEndPoint { // MARK: - Direction static func fetchDirection( popUpStoreId: Int64 ) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/popup/\(popUpStoreId)/directions", method: .get ) diff --git a/Poppool/Poppool/Data/Network/MapAPI/MapAPIEndpoint.swift b/Poppool/DataLayer/Data/Data/Network/API/MapAPI/MapAPIEndpoint.swift similarity index 91% rename from Poppool/Poppool/Data/Network/MapAPI/MapAPIEndpoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/MapAPI/MapAPIEndpoint.swift index 3b5c7107..2d3f2f7b 100644 --- a/Poppool/Poppool/Data/Network/MapAPI/MapAPIEndpoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/MapAPI/MapAPIEndpoint.swift @@ -1,12 +1,8 @@ -// -// MapAPIEndpoint.swift -// Poppool -// -// Created by 김기현 on 12/4/24. -// +import Foundation + +import Infrastructure import Alamofire -import Foundation struct MapAPIEndpoint { /// 뷰 바운즈 내에 있는 팝업 스토어 정보를 조회 @@ -26,7 +22,7 @@ struct MapAPIEndpoint { ) return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/locations/popup-stores", method: .get, queryParameters: params @@ -44,7 +40,7 @@ struct MapAPIEndpoint { ) return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/locations/search", method: .get, queryParameters: params @@ -52,7 +48,6 @@ struct MapAPIEndpoint { } } -// MARK: - Query DTOs struct BoundQueryDTO: Encodable { let northEastLat: Double let northEastLon: Double diff --git a/Poppool/Poppool/Data/Network/MapAPI/ResponseDTO/GetPopUpDirectionResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/MapAPI/ResponseDTO/GetPopUpDirectionResponseDTO.swift similarity index 65% rename from Poppool/Poppool/Data/Network/MapAPI/ResponseDTO/GetPopUpDirectionResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/MapAPI/ResponseDTO/GetPopUpDirectionResponseDTO.swift index cd67dfee..15c4c206 100644 --- a/Poppool/Poppool/Data/Network/MapAPI/ResponseDTO/GetPopUpDirectionResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/MapAPI/ResponseDTO/GetPopUpDirectionResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetPopUpDirectionResponseDTO.swift -// Poppool -// -// Created by 김기현 on 1/23/25. -// - import Foundation +import DomainInterface + struct GetPopUpDirectionResponseDTO: Decodable { let id: Int64 let categoryName: String @@ -36,17 +31,3 @@ struct GetPopUpDirectionResponseDTO: Decodable { ) } } - -struct GetPopUpDirectionResponse { - let id: Int64 - let categoryName: String - let name: String - let address: String - let startDate: String - let endDate: String - let latitude: Double - let longitude: Double - let markerId: Int64 - let markerTitle: String - let markerSnippet: String -} diff --git a/Poppool/Poppool/Data/Network/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift similarity index 97% rename from Poppool/Poppool/Data/Network/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift index cd7bb5de..c5d4a7c7 100644 --- a/Poppool/Poppool/Data/Network/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/MapAPI/ResponseDTO/MapPopUpStoreDTO.swift @@ -1,5 +1,7 @@ import Foundation +import DomainInterface + struct MapPopUpStoreDTO: Codable { let id: Int64 let categoryName: String @@ -29,11 +31,9 @@ struct MapPopUpStoreDTO: Codable { markerTitle: markerTitle, markerSnippet: markerSnippet, mainImageUrl: mainImageUrl - ) } } - struct GetViewBoundPopUpStoreListResponse: Decodable { let popUpStoreList: [MapPopUpStoreDTO] } diff --git a/Poppool/Poppool/Data/Network/PopUpAPI/PopUpAPIEndPoint.swift b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/PopUpAPIEndPoint.swift similarity index 81% rename from Poppool/Poppool/Data/Network/PopUpAPI/PopUpAPIEndPoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/PopUpAPIEndPoint.swift index 788b52d8..70a968f6 100644 --- a/Poppool/Poppool/Data/Network/PopUpAPI/PopUpAPIEndPoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/PopUpAPIEndPoint.swift @@ -1,19 +1,14 @@ -// -// PopUpAPIEndPoint.swift -// Poppool -// -// Created by SeoJunYoung on 12/6/24. -// - import Foundation +import Infrastructure + import RxSwift struct PopUpAPIEndPoint { static func getClosePopUpList(request: GetSearchPopUpListRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/popup/closed", method: .get, queryParameters: request @@ -22,7 +17,7 @@ struct PopUpAPIEndPoint { static func getOpenPopUpList(request: GetSearchPopUpListRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/popup/open", method: .get, queryParameters: request @@ -31,7 +26,7 @@ struct PopUpAPIEndPoint { static func getSearchPopUpList(request: GetSearchPopUpListRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/search/popup-stores", method: .get, queryParameters: request @@ -40,7 +35,7 @@ struct PopUpAPIEndPoint { static func getPopUpDetail(request: GetPopUpDetailRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/popup/\(request.popUpStoreId)/detail", method: .get, queryParameters: request @@ -49,7 +44,7 @@ struct PopUpAPIEndPoint { static func getPopUpComment(request: GetPopUpCommentRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/popup/\(request.popUpStoreId)/comments", method: .get, queryParameters: request diff --git a/Poppool/Poppool/Data/Network/PopUpAPI/RequestDTO/GetPopUpCommentRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/RequestDTO/GetPopUpCommentRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/PopUpAPI/RequestDTO/GetPopUpCommentRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/RequestDTO/GetPopUpCommentRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/PopUpAPI/RequestDTO/GetPopUpDetailRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/RequestDTO/GetPopUpDetailRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/PopUpAPI/RequestDTO/GetPopUpDetailRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/RequestDTO/GetPopUpDetailRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/PopUpAPI/RequestDTO/GetSearchPopUpListRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/RequestDTO/GetSearchPopUpListRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/PopUpAPI/RequestDTO/GetSearchPopUpListRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/RequestDTO/GetSearchPopUpListRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetClosePopUpListResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetClosePopUpListResponseDTO.swift similarity index 82% rename from Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetClosePopUpListResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetClosePopUpListResponseDTO.swift index eab1fac5..a57fee94 100644 --- a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetClosePopUpListResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetClosePopUpListResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetClosePopUpListResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 12/6/24. -// - import Foundation +import DomainInterface + struct GetClosePopUpListResponseDTO: Decodable { var closedPopUpStoreList: [PopUpStoreResponseDTO] var loginYn: Bool diff --git a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetOpenPopUpListResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetOpenPopUpListResponseDTO.swift similarity index 82% rename from Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetOpenPopUpListResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetOpenPopUpListResponseDTO.swift index a7194b4b..40d983fc 100644 --- a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetOpenPopUpListResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetOpenPopUpListResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetOpenPopUpListResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 12/6/24. -// - import Foundation +import DomainInterface + struct GetOpenPopUpListResponseDTO: Decodable { var openPopUpStoreList: [PopUpStoreResponseDTO] var loginYn: Bool diff --git a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetPopUpCommentResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetPopUpCommentResponseDTO.swift similarity index 74% rename from Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetPopUpCommentResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetPopUpCommentResponseDTO.swift index fef0aa36..3461f17d 100644 --- a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetPopUpCommentResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetPopUpCommentResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetPopUpCommentResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 12/25/24. -// - import Foundation +import DomainInterface + struct GetPopUpCommentResponseDTO: Decodable { let commentList: [GetPopUpDetailCommentResponseDTO] } diff --git a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetPopUpDetailResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetPopUpDetailResponseDTO.swift similarity index 96% rename from Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetPopUpDetailResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetPopUpDetailResponseDTO.swift index e08b6338..53ea4dee 100644 --- a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetPopUpDetailResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetPopUpDetailResponseDTO.swift @@ -1,11 +1,8 @@ -// -// GetPopUpDetailResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 12/10/24. -// - import Foundation + +import DomainInterface +import Infrastructure + // MARK: - Main Model struct GetPopUpDetailResponseDTO: Decodable { let name: String? diff --git a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetSearchPopUpListResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetSearchPopUpListResponseDTO.swift similarity index 77% rename from Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetSearchPopUpListResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetSearchPopUpListResponseDTO.swift index 60495f23..841ca801 100644 --- a/Poppool/Poppool/Data/Network/PopUpAPI/ResponseDTO/GetSearchPopUpListResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/PopUpAPI/ResponseDTO/GetSearchPopUpListResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetSearchPopUpListResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 12/7/24. -// - import Foundation +import DomainInterface + struct GetSearchPopUpListResponseDTO: Decodable { var popUpStoreList: [PopUpStoreResponseDTO] var loginYn: Bool diff --git a/Poppool/Poppool/Infrastructure/PreSignedService/PreSignedAPIEndPoint.swift b/Poppool/DataLayer/Data/Data/Network/API/PreSignedAPI/PreSignedAPIEndPoint.swift similarity index 82% rename from Poppool/Poppool/Infrastructure/PreSignedService/PreSignedAPIEndPoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/PreSignedAPI/PreSignedAPIEndPoint.swift index e6e12f83..21d930f2 100644 --- a/Poppool/Poppool/Infrastructure/PreSignedService/PreSignedAPIEndPoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/PreSignedAPI/PreSignedAPIEndPoint.swift @@ -1,17 +1,12 @@ -// -// PreSignedAPIEndPoint.swift -// Poppool -// -// Created by SeoJunYoung on 11/29/24. -// - import Foundation +import Infrastructure + struct PreSignedAPIEndPoint { static func presigned_upload(request: PresignedURLRequestDTO) -> Endpoint { Logger.log(message: "Presigned URL 생성 - Request: \(request)", category: .debug) return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/files/upload-preSignedUrl", method: .post, bodyParameters: request @@ -21,7 +16,7 @@ struct PreSignedAPIEndPoint { static func presigned_download(request: PresignedURLRequestDTO) -> Endpoint { Logger.log(message: "Presigned Download URL 생성 - Request: \(request)", category: .debug) return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/files/download-preSignedUrl", method: .post, bodyParameters: request @@ -31,7 +26,7 @@ struct PreSignedAPIEndPoint { static func presigned_delete(request: PresignedURLRequestDTO) -> RequestEndpoint { Logger.log(message: "Presigned Delete 생성 - Request: \(request)", category: .debug) return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/files/delete", method: .post, bodyParameters: request diff --git a/Poppool/Poppool/Infrastructure/PreSignedService/PresignedURLRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PreSignedAPI/RequestDTO/PresignedURLRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Infrastructure/PreSignedService/PresignedURLRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PreSignedAPI/RequestDTO/PresignedURLRequestDTO.swift diff --git a/Poppool/Poppool/Infrastructure/PreSignedService/PreSignedURLDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PreSignedAPI/ResponseDTO/PreSignedURLDTO.swift similarity index 100% rename from Poppool/Poppool/Infrastructure/PreSignedService/PreSignedURLDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PreSignedAPI/ResponseDTO/PreSignedURLDTO.swift diff --git a/Poppool/Poppool/Infrastructure/PreSignedService/PreSignedURLResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/PreSignedAPI/ResponseDTO/PreSignedURLResponseDTO.swift similarity index 100% rename from Poppool/Poppool/Infrastructure/PreSignedService/PreSignedURLResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/PreSignedAPI/ResponseDTO/PreSignedURLResponseDTO.swift diff --git a/Poppool/Poppool/Data/Network/SignUpAPI/CheckNickNameRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/RequestDTO/CheckNickNameRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/SignUpAPI/CheckNickNameRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/RequestDTO/CheckNickNameRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/SignUpAPI/SignUpRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/RequestDTO/SignUpRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/SignUpAPI/SignUpRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/RequestDTO/SignUpRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/SignUpAPI/GetCategoryListResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/ResponseDTO/GetCategoryListResponseDTO.swift similarity index 61% rename from Poppool/Poppool/Data/Network/SignUpAPI/GetCategoryListResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/ResponseDTO/GetCategoryListResponseDTO.swift index b437e186..f964e045 100644 --- a/Poppool/Poppool/Data/Network/SignUpAPI/GetCategoryListResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/ResponseDTO/GetCategoryListResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetCategoryListResponseDTO.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - import Foundation +import DomainInterface + // MARK: - GetCategoryListResponseDTO struct GetCategoryListResponseDTO: Codable { let categoryResponseList: [CategoryResponseDTO] @@ -19,7 +14,7 @@ struct CategoryResponseDTO: Codable { } extension CategoryResponseDTO { - func toDomain() -> Category { - return Category(categoryId: categoryId, category: categoryName) + func toDomain() -> CategoryResponse { + return CategoryResponse(categoryId: categoryId, category: categoryName) } } diff --git a/Poppool/Poppool/Data/Network/SignUpAPI/SignUpAPIEndpoint.swift b/Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/SignUpAPIEndpoint.swift similarity index 83% rename from Poppool/Poppool/Data/Network/SignUpAPI/SignUpAPIEndpoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/SignUpAPIEndpoint.swift index 147877c2..36527751 100644 --- a/Poppool/Poppool/Data/Network/SignUpAPI/SignUpAPIEndpoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/SignUpAPI/SignUpAPIEndpoint.swift @@ -1,12 +1,7 @@ -// -// SignUpAPIEndpoint.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - import Foundation +import Infrastructure + struct SignUpAPIEndpoint { /// 닉네임 중복을 확인합니다. @@ -14,7 +9,7 @@ struct SignUpAPIEndpoint { /// - Returns: Endpoint static func signUp_checkNickName(with request: CheckNickNameRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/signup/check-nickname", method: .get, queryParameters: request @@ -25,7 +20,7 @@ struct SignUpAPIEndpoint { /// - Returns: Endpoint static func signUp_getCategoryList() -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/signup/categories", method: .get ) @@ -36,7 +31,7 @@ struct SignUpAPIEndpoint { /// - Returns: RequestEndpoint static func signUp_trySignUp(with request: SignUpRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/signup", method: .post, bodyParameters: request diff --git a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/CommentLikeRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/CommentLikeRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/CommentLikeRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/CommentLikeRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/GetMyCommentRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/GetMyCommentRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/GetMyCommentRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/GetMyCommentRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/GetOtherUserCommentListRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/GetOtherUserCommentListRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/GetOtherUserCommentListRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/GetOtherUserCommentListRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PostBookmarkPopUpRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PostBookmarkPopUpRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PostBookmarkPopUpRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PostBookmarkPopUpRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PostUserBlockRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PostUserBlockRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PostUserBlockRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PostUserBlockRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PutUserCategoryRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PutUserCategoryRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PutUserCategoryRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PutUserCategoryRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PutUserProfileRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PutUserProfileRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PutUserProfileRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PutUserProfileRequestDTO.swift diff --git a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PutUserTailoredInfoRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PutUserTailoredInfoRequestDTO.swift similarity index 100% rename from Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/PutUserTailoredInfoRequestDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/PutUserTailoredInfoRequestDTO.swift diff --git a/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/UserSortedRequestDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/UserSortedRequestDTO.swift new file mode 100644 index 00000000..aee72ce5 --- /dev/null +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/RequesetDTO/UserSortedRequestDTO.swift @@ -0,0 +1,7 @@ +import Foundation + +struct UserSortedRequestDTO: Encodable { + var page: Int32? + var size: Int32? + var sort: String? +} diff --git a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetBlockUserListResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetBlockUserListResponseDTO.swift similarity index 89% rename from Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetBlockUserListResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetBlockUserListResponseDTO.swift index 7d862c5d..a375ca41 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetBlockUserListResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetBlockUserListResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetBlockUserListResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 1/12/25. -// - import Foundation +import DomainInterface + struct GetBlockUserListResponseDTO: Decodable { var blockedUserInfoList: [GetBlockUserListDataResponseDTO] var totalPages: Int32 diff --git a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetMyCommentedPopUpResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetMyCommentedPopUpResponseDTO.swift similarity index 91% rename from Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetMyCommentedPopUpResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetMyCommentedPopUpResponseDTO.swift index cd3b71ea..5d6591e4 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetMyCommentedPopUpResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetMyCommentedPopUpResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetMyCommentedPopUpResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 1/12/25. -// - import Foundation +import DomainInterface + struct GetMyCommentedPopUpResponseDTO: Decodable { var popUpInfoList: [GetMyCommentedPopUpDataResponseDTO] } diff --git a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetMyPageResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetMyPageResponseDTO.swift similarity index 91% rename from Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetMyPageResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetMyPageResponseDTO.swift index 11f511c0..64a1f071 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetMyPageResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetMyPageResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetMyPageResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 12/30/24. -// - import Foundation +import DomainInterface + struct GetMyPageResponseDTO: Decodable { var nickname: String? var profileImageUrl: String? diff --git a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetMyProfileResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetMyProfileResponseDTO.swift similarity index 88% rename from Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetMyProfileResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetMyProfileResponseDTO.swift index 5704cf9b..1ffb4133 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetMyProfileResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetMyProfileResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetMyProfileResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 1/10/25. -// - import Foundation +import DomainInterface + struct GetMyProfileResponseDTO: Decodable { var profileImageUrl: String? var nickname: String? diff --git a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetNoticeDetailResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetNoticeDetailResponseDTO.swift similarity index 79% rename from Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetNoticeDetailResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetNoticeDetailResponseDTO.swift index d8e9baba..f50ff39b 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetNoticeDetailResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetNoticeDetailResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetNoticeDetailResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 1/13/25. -// - import Foundation +import DomainInterface + struct GetNoticeDetailResponseDTO: Decodable { var id: Int64 var title: String? diff --git a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetNoticeListResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetNoticeListResponseDTO.swift similarity index 86% rename from Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetNoticeListResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetNoticeListResponseDTO.swift index f2314de9..c280a0a7 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetNoticeListResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetNoticeListResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetNoticeListResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 1/13/25. -// - import Foundation +import DomainInterface + struct GetNoticeListResponseDTO: Decodable { var noticeInfoList: [GetNoticeListDataResponseDTO] } diff --git a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetOtherUserCommentedPopUpListResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetOtherUserCommentedPopUpListResponseDTO.swift similarity index 90% rename from Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetOtherUserCommentedPopUpListResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetOtherUserCommentedPopUpListResponseDTO.swift index 455b5d26..382485bc 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetOtherUserCommentedPopUpListResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetOtherUserCommentedPopUpListResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetOtherUserCommentedPopUpListResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 12/27/24. -// - import Foundation +import DomainInterface + struct GetOtherUserCommentedPopUpListResponseDTO: Decodable { var popUpInfoList: [GetOtherUserCommentedPopUpResponseDTO] } diff --git a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetRecentPopUpResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetRecentPopUpResponseDTO.swift similarity index 92% rename from Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetRecentPopUpResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetRecentPopUpResponseDTO.swift index 20b4f454..8d02dc95 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetRecentPopUpResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetRecentPopUpResponseDTO.swift @@ -1,12 +1,8 @@ -// -// GetRecentPopUpResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 1/14/25. -// - import Foundation +import DomainInterface +import Infrastructure + struct GetRecentPopUpResponseDTO: Decodable { var popUpInfoList: [GetRecentPopUpDataResponseDTO] var totalPages: Int32 diff --git a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetWithdrawlListResponseDTO.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetWithdrawlListResponseDTO.swift similarity index 87% rename from Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetWithdrawlListResponseDTO.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetWithdrawlListResponseDTO.swift index 862bccb1..d1c01819 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/ResponseDTO/GetWithdrawlListResponseDTO.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/ResponseDTO/GetWithdrawlListResponseDTO.swift @@ -1,12 +1,7 @@ -// -// GetWithdrawlListResponseDTO.swift -// Poppool -// -// Created by SeoJunYoung on 1/7/25. -// - import Foundation +import DomainInterface + struct GetWithdrawlListResponseDTO: Decodable { var withDrawlSurveyList: [GetWithdrawlListDataResponseDTO] } diff --git a/Poppool/Poppool/Data/Network/UserAPI/UserAPIEndPoint.swift b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/UserAPIEndPoint.swift similarity index 75% rename from Poppool/Poppool/Data/Network/UserAPI/UserAPIEndPoint.swift rename to Poppool/DataLayer/Data/Data/Network/API/UserAPI/UserAPIEndPoint.swift index 9ca2708d..d063d383 100644 --- a/Poppool/Poppool/Data/Network/UserAPI/UserAPIEndPoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/API/UserAPI/UserAPIEndPoint.swift @@ -1,19 +1,14 @@ -// -// UserAPIEndPoint.swift -// Poppool -// -// Created by SeoJunYoung on 12/3/24. -// - import Foundation +import Infrastructure + import RxSwift struct UserAPIEndPoint { static func postBookmarkPopUp(request: PostBookmarkPopUpRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/bookmark-popupstores", method: .post, queryParameters: request @@ -22,7 +17,7 @@ struct UserAPIEndPoint { static func deleteBookmarkPopUp(request: PostBookmarkPopUpRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/bookmark-popupstores", method: .delete, queryParameters: request @@ -31,7 +26,7 @@ struct UserAPIEndPoint { static func postCommentLike(request: CommentLikeRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/likes", method: .post, queryParameters: request @@ -40,7 +35,7 @@ struct UserAPIEndPoint { static func deleteCommentLike(request: CommentLikeRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/likes", method: .delete, queryParameters: request @@ -49,7 +44,7 @@ struct UserAPIEndPoint { static func postUserBlock(request: PostUserBlockRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/block", method: .post, queryParameters: request @@ -58,7 +53,7 @@ struct UserAPIEndPoint { static func deleteUserBlock(request: PostUserBlockRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/unblock", method: .delete, queryParameters: request @@ -67,7 +62,7 @@ struct UserAPIEndPoint { static func getOtherUserCommentPopUpList(request: GetOtherUserCommentListRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/\(request.commenterId ?? "")/comments", method: .get, queryParameters: request @@ -76,7 +71,7 @@ struct UserAPIEndPoint { static func getMyPage() -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/my-page", method: .get ) @@ -84,7 +79,7 @@ struct UserAPIEndPoint { static func postLogout() -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/logout", method: .post ) @@ -92,7 +87,7 @@ struct UserAPIEndPoint { static func getWithdrawlList() -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/withdrawl/surveys", method: .get ) @@ -100,7 +95,7 @@ struct UserAPIEndPoint { static func postWithdrawl(request: PostWithdrawlListRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/delete", method: .post, bodyParameters: request @@ -109,7 +104,7 @@ struct UserAPIEndPoint { static func getMyProfile() -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/profiles", method: .get ) @@ -117,7 +112,7 @@ struct UserAPIEndPoint { static func putUserTailoredInfo(request: PutUserTailoredInfoRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/tailored-info", method: .put, bodyParameters: request @@ -126,7 +121,7 @@ struct UserAPIEndPoint { static func putUserCategory(request: PutUserCategoryRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/interests", method: .put, bodyParameters: request @@ -135,25 +130,25 @@ struct UserAPIEndPoint { static func putUserProfile(request: PutUserProfileRequestDTO) -> RequestEndpoint { return RequestEndpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/profiles", method: .put, bodyParameters: request ) } - static func getMyCommentedPopUp(request: SortedRequestDTO) -> Endpoint { + static func getMyCommentedPopUp(request: UserSortedRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/commented/popup", method: .get, queryParameters: request ) } - static func getBlockUserList(request: GetBlockUserListRequestDTO) -> Endpoint { + static func getBlockUserList(request: UserSortedRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/blocked", method: .get, queryParameters: request @@ -162,7 +157,7 @@ struct UserAPIEndPoint { static func getNoticeList() -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/notice/list", method: .get ) @@ -170,24 +165,24 @@ struct UserAPIEndPoint { static func getNoticeDetail(noticeID: Int64) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/notice/\(noticeID)", method: .get ) } - static func getRecentPopUp(request: SortedRequestDTO) -> Endpoint { + static func getRecentPopUp(request: UserSortedRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/recent-popupstores", method: .get, queryParameters: request ) } - static func getBookmarkPopUp(request: SortedRequestDTO) -> Endpoint { + static func getBookmarkPopUp(request: UserSortedRequestDTO) -> Endpoint { return Endpoint( - baseURL: KeyPath.popPoolBaseURL, + baseURL: Secrets.popPoolBaseURL, path: "/users/bookmark-popupstores", method: .get, queryParameters: request diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/Common/NetworkError.swift b/Poppool/DataLayer/Data/Data/Network/Common/NetworkError.swift similarity index 100% rename from Poppool/Poppool/Infrastructure/NetworkLayer/Common/NetworkError.swift rename to Poppool/DataLayer/Data/Data/Network/Common/NetworkError.swift diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/Common/Requestable.swift b/Poppool/DataLayer/Data/Data/Network/Common/Requestable.swift similarity index 96% rename from Poppool/Poppool/Infrastructure/NetworkLayer/Common/Requestable.swift rename to Poppool/DataLayer/Data/Data/Network/Common/Requestable.swift index 9933fba3..2709e94c 100644 --- a/Poppool/Poppool/Infrastructure/NetworkLayer/Common/Requestable.swift +++ b/Poppool/DataLayer/Data/Data/Network/Common/Requestable.swift @@ -1,15 +1,10 @@ -// -// Requestable.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/16/24. -// - import Foundation +import Infrastructure + import Alamofire -protocol Requestable { +public protocol Requestable { var baseURL: String { get } var path: String { get } var method: HTTPMethod { get } diff --git a/Poppool/DataLayer/Data/Data/Network/Common/Responsable.swift b/Poppool/DataLayer/Data/Data/Network/Common/Responsable.swift new file mode 100644 index 00000000..9f7c310c --- /dev/null +++ b/Poppool/DataLayer/Data/Data/Network/Common/Responsable.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol Responsable { + associatedtype Response +} diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/EndPoint/Endpoint.swift b/Poppool/DataLayer/Data/Data/Network/EndPoint/Endpoint.swift similarity index 83% rename from Poppool/Poppool/Infrastructure/NetworkLayer/EndPoint/Endpoint.swift rename to Poppool/DataLayer/Data/Data/Network/EndPoint/Endpoint.swift index fcc83980..4e835db9 100644 --- a/Poppool/Poppool/Infrastructure/NetworkLayer/EndPoint/Endpoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/EndPoint/Endpoint.swift @@ -1,15 +1,8 @@ -// -// Endpoint.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/16/24. -// - import Foundation import Alamofire -protocol RequesteResponsable: Requestable, Responsable where Response: Decodable {} +public protocol RequesteResponsable: Requestable, Responsable where Response: Decodable {} class Endpoint: RequesteResponsable { typealias Response = R diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/EndPoint/MultipartEndPoint.swift b/Poppool/DataLayer/Data/Data/Network/EndPoint/MultipartEndPoint.swift similarity index 92% rename from Poppool/Poppool/Infrastructure/NetworkLayer/EndPoint/MultipartEndPoint.swift rename to Poppool/DataLayer/Data/Data/Network/EndPoint/MultipartEndPoint.swift index 75b4ef2e..00a5bf3c 100644 --- a/Poppool/Poppool/Infrastructure/NetworkLayer/EndPoint/MultipartEndPoint.swift +++ b/Poppool/DataLayer/Data/Data/Network/EndPoint/MultipartEndPoint.swift @@ -1,15 +1,10 @@ -// -// MultipartEndPoint.swift -// MomsVillage -// -// Created by SeoJunYoung on 10/25/24. -// - import UIKit +import Infrastructure + import Alamofire -class MultipartEndPoint: URLRequestConvertible { +public class MultipartEndPoint: URLRequestConvertible { var baseURL: String var path: String var method: HTTPMethod @@ -36,7 +31,7 @@ class MultipartEndPoint: URLRequestConvertible { self.headers = headers } - func asURLRequest() throws -> URLRequest { + public func asURLRequest() throws -> URLRequest { let url = try baseURL.asURL().appendingPathComponent(path) var request = URLRequest(url: url) Logger.log(message: "\(request) URL 생성", category: .network) diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/EndPoint/RequestEndpoint.swift b/Poppool/DataLayer/Data/Data/Network/EndPoint/RequestEndpoint.swift similarity index 100% rename from Poppool/Poppool/Infrastructure/NetworkLayer/EndPoint/RequestEndpoint.swift rename to Poppool/DataLayer/Data/Data/Network/EndPoint/RequestEndpoint.swift diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/Interceptor/TokenInterceptor.swift b/Poppool/DataLayer/Data/Data/Network/Interceptor/TokenInterceptor.swift similarity index 89% rename from Poppool/Poppool/Infrastructure/NetworkLayer/Interceptor/TokenInterceptor.swift rename to Poppool/DataLayer/Data/Data/Network/Interceptor/TokenInterceptor.swift index 9ad8e40f..5dc2418b 100644 --- a/Poppool/Poppool/Infrastructure/NetworkLayer/Interceptor/TokenInterceptor.swift +++ b/Poppool/DataLayer/Data/Data/Network/Interceptor/TokenInterceptor.swift @@ -1,12 +1,8 @@ -// -// TokenInterceptor.swift -// MomsVillage -// -// Created by SeoJunYoung on 10/14/24. -// +import Foundation + +import Infrastructure import Alamofire -import Foundation import RxSwift final class TokenInterceptor: RequestInterceptor { @@ -16,7 +12,7 @@ final class TokenInterceptor: RequestInterceptor { for session: Session, completion: @escaping (Result) -> Void) { Logger.log(message: "TokenInterceptor Adapt Token", category: .network) - let keyChainService = KeyChainService() + @Dependency var keyChainService: KeyChainService var urlRequest = urlRequest let accessTokenResult = keyChainService.fetchToken(type: .accessToken) switch accessTokenResult { diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/Provider/Provider.swift b/Poppool/DataLayer/Data/Data/Network/Provider/Provider.swift similarity index 92% rename from Poppool/Poppool/Infrastructure/NetworkLayer/Provider/Provider.swift rename to Poppool/DataLayer/Data/Data/Network/Provider/Provider.swift index 1a2e4394..5567cb93 100644 --- a/Poppool/Poppool/Infrastructure/NetworkLayer/Provider/Provider.swift +++ b/Poppool/DataLayer/Data/Data/Network/Provider/Provider.swift @@ -1,16 +1,9 @@ -// -// Provider.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/16/24. -// - import Foundation import Alamofire import RxSwift -protocol Provider { +public protocol Provider { /// 네트워크 요청을 수행하고 결과를 반환하는 메서드 /// - Parameters: diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/Provider/ProviderImpl.swift b/Poppool/DataLayer/Data/Data/Network/Provider/ProviderImpl.swift similarity index 95% rename from Poppool/Poppool/Infrastructure/NetworkLayer/Provider/ProviderImpl.swift rename to Poppool/DataLayer/Data/Data/Network/Provider/ProviderImpl.swift index a7fa9517..e3d925ed 100644 --- a/Poppool/Poppool/Infrastructure/NetworkLayer/Provider/ProviderImpl.swift +++ b/Poppool/DataLayer/Data/Data/Network/Provider/ProviderImpl.swift @@ -1,13 +1,18 @@ -import Alamofire import Foundation + +import Infrastructure + +import Alamofire import RxSwift -final class ProviderImpl: Provider { +public final class ProviderImpl: Provider { private let disposeBag = DisposeBag() var timeoutTimer: Timer? - func requestData( + public init(timeoutTimer: Timer? = nil) { self.timeoutTimer = timeoutTimer } + + public func requestData( with endpoint: E, interceptor: RequestInterceptor? = nil ) -> Observable where R == E.Response { @@ -82,7 +87,7 @@ final class ProviderImpl: Provider { } } - func request( + public func request( with request: E, interceptor: RequestInterceptor? = nil ) -> Completable { @@ -118,7 +123,7 @@ final class ProviderImpl: Provider { accessToken = accessToken.replacingOccurrences(of: "Bearer ", with: "") refreshToken = refreshToken.replacingOccurrences(of: "Bearer ", with: "") - let keyChainService = KeyChainService() + @Dependency var keyChainService: KeyChainService keyChainService.saveToken(type: .accessToken, value: accessToken) keyChainService.saveToken(type: .refreshToken, value: refreshToken) } @@ -141,7 +146,7 @@ final class ProviderImpl: Provider { } // multipart 업로드는 기존 코드와 동일 - func uploadImages( + public func uploadImages( with request: MultipartEndPoint, interceptor: RequestInterceptor? = nil ) -> Completable { diff --git a/Poppool/Poppool/Infrastructure/PreSignedService/PreSignedService.swift b/Poppool/DataLayer/Data/Data/Network/Service/PreSignedService.swift similarity index 97% rename from Poppool/Poppool/Infrastructure/PreSignedService/PreSignedService.swift rename to Poppool/DataLayer/Data/Data/Network/Service/PreSignedService.swift index 26efb286..3609bc2b 100644 --- a/Poppool/Poppool/Infrastructure/PreSignedService/PreSignedService.swift +++ b/Poppool/DataLayer/Data/Data/Network/Service/PreSignedService.swift @@ -1,13 +1,7 @@ -// -// PreSignedService.swift -// PopPool -// -// Created by SeoJunYoung on 9/5/24. -// - -import Foundation import UIKit +import Infrastructure + import Alamofire import RxCocoa import RxSwift @@ -25,7 +19,7 @@ class PreSignedService { let tokenInterceptor = TokenInterceptor() - let provider = ProviderImpl() + @Dependency private var provider: Provider let disposeBag = DisposeBag() @@ -204,7 +198,6 @@ private extension PreSignedService { func getUploadLinks(request: PresignedURLRequestDTO) -> Observable { Logger.log(message: "Presigned URL 생성 요청 데이터: \(request)", category: .debug) - let provider = ProviderImpl() let endPoint = PreSignedAPIEndPoint.presigned_upload(request: request) return provider.requestData(with: endPoint, interceptor: tokenInterceptor) .do(onNext: { response in @@ -215,7 +208,6 @@ private extension PreSignedService { } func getDownloadLinks(request: PresignedURLRequestDTO) -> Observable { - let provider = ProviderImpl() let endPoint = PreSignedAPIEndPoint.presigned_download(request: request) return provider.requestData(with: endPoint, interceptor: tokenInterceptor) } @@ -287,7 +279,7 @@ extension PreSignedService { } } func fullImageURL(from filePath: String) -> URL? { - let baseURL = KeyPath.popPoolS3BaseURL + let baseURL = Secrets.popPoolS3BaseURL // URL 인코딩 처리를 더 엄격하게 guard let encodedPath = filePath diff --git a/Poppool/DataLayer/Data/Data/RepositoryImpl/AdminRepositoryImpl.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/AdminRepositoryImpl.swift new file mode 100644 index 00000000..da3f0d33 --- /dev/null +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/AdminRepositoryImpl.swift @@ -0,0 +1,181 @@ +import Foundation + +import DomainInterface + +import Alamofire +import RxSwift + +public final class AdminRepositoryImpl: AdminRepository { + + // MARK: - Properties + private let provider: Provider + private let tokenInterceptor = TokenInterceptor() + + // MARK: - Init + public init(provider: Provider) { + self.provider = provider + } + + // MARK: - Store Methods + public func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> { + let endpoint = AdminAPIEndpoint.fetchStoreList( + query: query, + page: page, + size: size + ) + return provider.requestData( + with: endpoint, + interceptor: tokenInterceptor + ) + .map { response in + response.popUpStoreList?.map { + AdminStore(id: $0.id, name: $0.name, categoryName: $0.categoryName, mainImageUrl: $0.mainImageUrl) + } ?? [] + } + } + + public 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.empty() + } + throw error + } + } + + public 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) + } + + public 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 + ) + let endpoint = AdminAPIEndpoint.updateStore(request: dto) + return provider.request(with: endpoint, interceptor: tokenInterceptor) + } + + public func deleteStore(id: Int64) -> Completable { + let endpoint = AdminAPIEndpoint.deleteStore(id: id) + return provider.request(with: endpoint, interceptor: tokenInterceptor) + } + + // MARK: - Notice Methods + public 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) + } + + public 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) + } + + public func deleteNotice(id: Int64) -> Completable { + let endpoint = AdminAPIEndpoint.deleteNotice(id: id) + return provider.request(with: endpoint, interceptor: tokenInterceptor) + } +} + +// Helper extension - keeping this for utility purposes +extension GetAdminPopUpStoreDetailResponseDTO { + static var empty: GetAdminPopUpStoreDetailResponseDTO { + return GetAdminPopUpStoreDetailResponseDTO( + id: 0, + name: "", + categoryId: 0, + categoryName: "", + desc: "", + address: "", + startDate: "", + endDate: "", + createUserId: "", + createDateTime: "", + mainImageUrl: "", + bannerYn: false, + imageList: [], + latitude: 0.0, + longitude: 0.0, + markerTitle: "", + markerSnippet: "" + ) + } +} diff --git a/Poppool/Poppool/Data/Repository/AuthAPIRepositoryImpl.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/AuthAPIRepositoryImpl.swift similarity index 50% rename from Poppool/Poppool/Data/Repository/AuthAPIRepositoryImpl.swift rename to Poppool/DataLayer/Data/Data/RepositoryImpl/AuthAPIRepositoryImpl.swift index 7e01f977..0449cdf0 100644 --- a/Poppool/Poppool/Data/Repository/AuthAPIRepositoryImpl.swift +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/AuthAPIRepositoryImpl.swift @@ -1,24 +1,19 @@ -// -// AuthRepository.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - import Foundation -import RxSwift -final class AuthAPIRepositoryImpl { +import DomainInterface + +import RxSwift - var provider: Provider +public final class AuthAPIRepositoryImpl: AuthAPIRepository { - var tokenInterceptor = TokenInterceptor() + private let provider: Provider + private let tokenInterceptor = TokenInterceptor() - init(provider: Provider) { + public init(provider: Provider) { self.provider = provider } - func tryLogIn(userCredential: Encodable, socialType: String) -> Observable { + public func tryLogIn(userCredential: Encodable, socialType: String) -> Observable { let endPoint = AuthAPIEndPoint.auth_tryLogin(with: userCredential, path: socialType) return provider .requestData(with: endPoint, interceptor: nil) @@ -27,8 +22,11 @@ final class AuthAPIRepositoryImpl { } } - func postTokenReissue() -> Observable { + public func postTokenReissue() -> Observable { let endPoint = AuthAPIEndPoint.postTokenReissue() return provider.requestData(with: endPoint, interceptor: tokenInterceptor) + .map { responseDTO in + return responseDTO.toDomain() + } } } diff --git a/Poppool/DataLayer/Data/Data/RepositoryImpl/CommentAPIRepositoryImpl.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/CommentAPIRepositoryImpl.swift new file mode 100644 index 00000000..142b61c0 --- /dev/null +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/CommentAPIRepositoryImpl.swift @@ -0,0 +1,40 @@ +import Foundation + +import DomainInterface + +import RxSwift + +public final class CommentAPIRepositoryImpl: CommentAPIRepository { + + private let provider: Provider + private let tokenInterceptor = TokenInterceptor() + + public init(provider: Provider) { + self.provider = provider + } + + public 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) + } + + public 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) + } + + public func editComment(popUpStoreId: Int64, commentId: Int64, content: String?, imageUrlList: [String?]?) -> Completable { + let dtoList: [PutCommentImageDataRequestDTO]? = imageUrlList?.compactMap { $0 }.map { PutCommentImageDataRequestDTO(imageUrl: $0) } + + let requestDTO = PutCommentRequestDTO( + popUpStoreId: popUpStoreId, + commentId: commentId, + content: content, + imageUrlList: dtoList + ) + let endPoint = CommentAPIEndPoint.editComment(request: requestDTO) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } +} diff --git a/Poppool/Poppool/Data/Repository/HomeAPIRepository.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/HomeAPIRepositoryImpl.swift similarity index 50% rename from Poppool/Poppool/Data/Repository/HomeAPIRepository.swift rename to Poppool/DataLayer/Data/Data/RepositoryImpl/HomeAPIRepositoryImpl.swift index 2bd55980..c9020451 100644 --- a/Poppool/Poppool/Data/Repository/HomeAPIRepository.swift +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/HomeAPIRepositoryImpl.swift @@ -1,38 +1,38 @@ -// -// HomeAPIRepository.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - import Foundation + +import DomainInterface + import RxSwift -final class HomeAPIRepository { +public final class HomeAPIRepositoryImpl: HomeAPIRepository { private let provider: Provider private let tokenInterceptor = TokenInterceptor() - init(provider: Provider) { + public init(provider: Provider) { self.provider = provider } - func fetchHome(request: SortedRequestDTO) -> Observable { + public func fetchHome(page: Int32?, size: Int32?, sort: String?) -> Observable { + let request = HomeSortedRequestDTO(page: page, size: size, sort: sort) let endPoint = HomeAPIEndpoint.fetchHome(request: request) return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map({ $0.toDomain() }) } - func fetchCustomPopUp(request: SortedRequestDTO) -> Observable { + public func fetchCustomPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { + let request = HomeSortedRequestDTO(page: page, size: size, sort: sort) let endPoint = HomeAPIEndpoint.fetchCustomPopUp(request: request) return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map({ $0.toDomain() }) } - func fetchNewPopUp(request: SortedRequestDTO) -> Observable { + public func fetchNewPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { + let request = HomeSortedRequestDTO(page: page, size: size, sort: sort) let endPoint = HomeAPIEndpoint.fetchNewPopUp(request: request) return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map({ $0.toDomain() }) } - func fetchPopularPopUp(request: SortedRequestDTO) -> Observable { + public func fetchPopularPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { + let request = HomeSortedRequestDTO(page: page, size: size, sort: sort) let endPoint = HomeAPIEndpoint.fetchPopularPopUp(request: request) return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map({ $0.toDomain() }) } diff --git a/Poppool/DataLayer/Data/Data/RepositoryImpl/MapDirectionRepositoryImpl.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/MapDirectionRepositoryImpl.swift new file mode 100644 index 00000000..cccd8f73 --- /dev/null +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/MapDirectionRepositoryImpl.swift @@ -0,0 +1,20 @@ +import Foundation + +import DomainInterface + +import RxSwift + +public final class MapDirectionRepositoryImpl: MapDirectionRepository { + + private let provider: Provider + private let tokenInterceptor = TokenInterceptor() + + public init(provider: Provider) { + self.provider = provider + } + + public func getPopUpDirection(popUpStoreId: Int64) -> Observable { + let endpoint = FindDirectionEndPoint.fetchDirection(popUpStoreId: popUpStoreId) + return provider.requestData(with: endpoint, interceptor: tokenInterceptor).map({ $0.toDomain() }) + } +} diff --git a/Poppool/DataLayer/Data/Data/RepositoryImpl/MapRepositoryImpl.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/MapRepositoryImpl.swift new file mode 100644 index 00000000..236aad21 --- /dev/null +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/MapRepositoryImpl.swift @@ -0,0 +1,74 @@ +import Foundation + +import DomainInterface +import Infrastructure + +import RxSwift + +public final class MapRepositoryImpl: MapRepository { + + private let provider: Provider + + public init(provider: Provider) { + self.provider = provider + } + + public func fetchStoresInBounds( + northEastLat: Double, + northEastLon: Double, + southWestLat: Double, + southWestLon: Double, + categories: [Int64] + ) -> Observable<[MapPopUpStore]> { + return provider.requestData( + with: MapAPIEndpoint.locations_fetchStoresInBounds( + northEastLat: northEastLat, + northEastLon: northEastLon, + southWestLat: southWestLat, + southWestLon: southWestLon, + categories: categories + ), + interceptor: TokenInterceptor() + ) + .map { $0.popUpStoreList.map { $0.toDomain() } } + } + + public func searchStores( + query: String, + categories: [Int64] + ) -> Observable<[MapPopUpStore]> { + return provider.requestData( + with: MapAPIEndpoint.locations_searchStores( + query: query, + categories: categories + ), + interceptor: TokenInterceptor() + ) + .map { $0.popUpStoreList.map { $0.toDomain() } } + } + + public func fetchCategories() -> Observable<[CategoryResponse]> { + Logger.log(message: "카테고리 목록 요청을 시작합니다.", category: .network) + + return provider.requestData( + with: SignUpAPIEndpoint.signUp_getCategoryList(), + interceptor: TokenInterceptor() + ) + .do(onNext: { _ in + Logger.log( + message: "카테고리 목록 응답 성공", + category: .debug + ) + }) + .map { responseDTO in + responseDTO.categoryResponseList.map { $0.toDomain() } + } + .catch { error in + Logger.log( + message: "카테고리 목록 요청 실패: \(error.localizedDescription)", + category: .error + ) + throw error + } + } +} diff --git a/Poppool/DataLayer/Data/Data/RepositoryImpl/PopUpAPIRepositoryImpl.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/PopUpAPIRepositoryImpl.swift new file mode 100644 index 00000000..782c7880 --- /dev/null +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/PopUpAPIRepositoryImpl.swift @@ -0,0 +1,72 @@ +import Foundation + +import DomainInterface + +import RxSwift + +public final class PopUpAPIRepositoryImpl: PopUpAPIRepository { + + private let provider: Provider + private let tokenInterceptor = TokenInterceptor() + + public init(provider: Provider) { + self.provider = provider + } + + public func postBookmarkPopUp(popUpStoreId: Int64) -> Completable { + let request = PostBookmarkPopUpRequestDTO(popUpStoreId: popUpStoreId) + let endPoint = UserAPIEndPoint.postBookmarkPopUp(request: request) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func getClosePopUpList( + categories: String?, + page: Int32?, + size: Int32?, + sort: String?, + query: String?, + sortCode: String? + ) -> Observable { + let request = GetSearchPopUpListRequestDTO(categories: categories, page: page, size: size, sort: sort, query: query, sortCode: sortCode) + let endPoint = PopUpAPIEndPoint.getClosePopUpList(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getOpenPopUpList( + categories: String?, + page: Int32?, + size: Int32?, + sort: String?, + query: String?, + sortCode: String? + ) -> Observable { + let request = GetSearchPopUpListRequestDTO(categories: categories, page: page, size: size, sort: sort, query: query, sortCode: sortCode) + let endPoint = PopUpAPIEndPoint.getOpenPopUpList(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getSearchPopUpList( + categories: String?, + page: Int32?, + size: Int32?, + sort: String?, + query: String?, + sortCode: String? + ) -> Observable { + let request = GetSearchPopUpListRequestDTO(categories: categories, page: page, size: size, sort: sort, query: query, sortCode: sortCode) + let endPoint = PopUpAPIEndPoint.getSearchPopUpList(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getPopUpDetail(commentType: String?, popUpStoreId: Int64, viewCountYn: Bool?) -> Observable { + let request = GetPopUpDetailRequestDTO(commentType: commentType, popUpStoreId: popUpStoreId, viewCountYn: viewCountYn) + let endPoint = PopUpAPIEndPoint.getPopUpDetail(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getPopUpComment(commentType: String?, page: Int32?, size: Int32?, sort: String?, popUpStoreId: Int64) -> Observable { + let request = GetPopUpCommentRequestDTO(commentType: commentType, page: page, size: size, sort: sort, popUpStoreId: popUpStoreId) + let endPoint = PopUpAPIEndPoint.getPopUpComment(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } +} diff --git a/Poppool/DataLayer/Data/Data/RepositoryImpl/PreSignedRepositoryImpl.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/PreSignedRepositoryImpl.swift new file mode 100644 index 00000000..3c08b22b --- /dev/null +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/PreSignedRepositoryImpl.swift @@ -0,0 +1,31 @@ +import UIKit + +import DomainInterface + +import RxSwift + +public final class PreSignedRepositoryImpl: PreSignedRepository { + + private let service = PreSignedService() + + public init() { } + + public func tryUpload(presignedURLRequest: [(filePath: String, image: UIImage)]) -> Single { + return service.tryUpload(datas: presignedURLRequest.map { + PreSignedService.PresignedURLRequest( + filePath: $0.filePath, + image: $0.image + ) + }) + } + + public func tryDelete(objectKeyList: [String]) -> Completable { + return service.tryDelete( + targetPaths: PresignedURLRequestDTO(objectKeyList: objectKeyList) + ) + } + + public func fullImageURL(from filePath: String) -> URL? { + return service.fullImageURL(from: filePath) + } +} diff --git a/Poppool/Poppool/Data/Repository/SignUpRepositoryImpl.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/SignUpRepositoryImpl.swift similarity index 78% rename from Poppool/Poppool/Data/Repository/SignUpRepositoryImpl.swift rename to Poppool/DataLayer/Data/Data/RepositoryImpl/SignUpRepositoryImpl.swift index 6402b3dc..f8009fbb 100644 --- a/Poppool/Poppool/Data/Repository/SignUpRepositoryImpl.swift +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/SignUpRepositoryImpl.swift @@ -1,34 +1,30 @@ -// -// SignUpRepositoryImpl.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - import Foundation + +import DomainInterface + import RxSwift -final class SignUpRepositoryImpl { +public final class SignUpRepositoryImpl: SignUpRepository { - var provider: Provider + private let provider: Provider - init(provider: Provider) { + public init(provider: Provider) { self.provider = provider } - func checkNickName(nickName: String) -> Observable { + public func checkNickName(nickName: String) -> Observable { let endPoint = SignUpAPIEndpoint.signUp_checkNickName(with: .init(nickName: nickName)) return provider.requestData(with: endPoint, interceptor: TokenInterceptor()) } - func fetchCategoryList() -> Observable<[Category]> { + public func fetchCategoryList() -> Observable<[CategoryResponse]> { let endPoint = SignUpAPIEndpoint.signUp_getCategoryList() return provider.requestData(with: endPoint, interceptor: TokenInterceptor()).map { responseDTO in return responseDTO.categoryResponseList.map({ $0.toDomain() }) } } - func trySignUp( + public func trySignUp( nickName: String, gender: String, age: Int32, diff --git a/Poppool/DataLayer/Data/Data/RepositoryImpl/UserAPIRepositoryImpl.swift b/Poppool/DataLayer/Data/Data/RepositoryImpl/UserAPIRepositoryImpl.swift new file mode 100644 index 00000000..2e8d9c98 --- /dev/null +++ b/Poppool/DataLayer/Data/Data/RepositoryImpl/UserAPIRepositoryImpl.swift @@ -0,0 +1,151 @@ +import Foundation + +import DomainInterface + +import RxSwift + +public final class UserAPIRepositoryImpl: UserAPIRepository { + + private let provider: Provider + private let tokenInterceptor = TokenInterceptor() + + public init(provider: Provider) { + self.provider = provider + } + + public func postBookmarkPopUp(popUpStoreId: Int64) -> Completable { + let endPoint = UserAPIEndPoint.postBookmarkPopUp(request: .init(popUpStoreId: popUpStoreId)) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func deleteBookmarkPopUp(popUpStoreId: Int64) -> Completable { + let endPoint = UserAPIEndPoint.deleteBookmarkPopUp(request: .init(popUpStoreId: popUpStoreId)) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func postCommentLike(commentId: Int64) -> Completable { + let endPoint = UserAPIEndPoint.postCommentLike(request: .init(commentId: commentId)) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func deleteCommentLike(commentId: Int64) -> Completable { + let endPoint = UserAPIEndPoint.deleteCommentLike(request: .init(commentId: commentId)) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func postUserBlock(blockedUserId: String?) -> Completable { + let endPoint = UserAPIEndPoint.postUserBlock(request: .init(blockedUserId: blockedUserId)) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func deleteUserBlock(blockedUserId: String?) -> Completable { + let endPoint = UserAPIEndPoint.deleteUserBlock(request: .init(blockedUserId: blockedUserId)) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func getOtherUserCommentList( + commenterId: String?, + commentType: String?, + page: Int32?, + size: Int32?, + sort: String? + ) -> Observable { + let request = GetOtherUserCommentListRequestDTO(commenterId: commenterId, commentType: commentType, page: page, size: size, sort: sort) + let endPoint = UserAPIEndPoint.getOtherUserCommentPopUpList(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getMyPage() -> Observable { + let endPoint = UserAPIEndPoint.getMyPage() + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func postLogout() -> Completable { + let endPoint = UserAPIEndPoint.postLogout() + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func getWithdrawlList() -> Observable { + let endPoint = UserAPIEndPoint.getWithdrawlList() + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func postWithdrawl(list: [(Int64, String?)]) -> Completable { + let endPoint = UserAPIEndPoint.postWithdrawl(request: .init(checkedSurveyList: list.map { .init(id: $0.0, survey: $0.1)})) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func getMyProfile() -> Observable { + let endPoint = UserAPIEndPoint.getMyProfile() + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func putUserTailoredInfo(gender: String?, age: Int32) -> Completable { + let endPoint = UserAPIEndPoint.putUserTailoredInfo(request: .init(gender: gender, age: age)) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func putUserCategory( + interestCategoriesToAdd: [Int64], + interestCategoriesToDelete: [Int64], + interestCategoriesToKeep: [Int64] + ) -> Completable { + let request = PutUserCategoryRequestDTO( + interestCategoriesToAdd: interestCategoriesToAdd, + interestCategoriesToDelete: interestCategoriesToDelete, + interestCategoriesToKeep: interestCategoriesToKeep + ) + let endPoint = UserAPIEndPoint.putUserCategory(request: request) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func putUserProfile( + profileImageUrl: String?, + nickname: String?, + email: String?, + instagramId: String?, + intro: String? + ) -> Completable { + let request = PutUserProfileRequestDTO(profileImageUrl: profileImageUrl, nickname: nickname, email: email, instagramId: instagramId, intro: intro) + let endPoint = UserAPIEndPoint.putUserProfile(request: request) + return provider.request(with: endPoint, interceptor: tokenInterceptor) + } + + public func getMyCommentedPopUp( + page: Int32?, + size: Int32?, + sort: String? + ) -> Observable { + let request = UserSortedRequestDTO(page: page, size: size, sort: sort) + let endPoint = UserAPIEndPoint.getMyCommentedPopUp(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getBlockUserList(page: Int32?, size: Int32?, sort: String?) -> Observable { + let request = UserSortedRequestDTO(page: page, size: size, sort: sort) + let endPoint = UserAPIEndPoint.getBlockUserList(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getNoticeList() -> Observable { + let endPoint = UserAPIEndPoint.getNoticeList() + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getNoticeDetail(noticeID: Int64) -> Observable { + let endPoint = UserAPIEndPoint.getNoticeDetail(noticeID: noticeID) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getRecentPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { + let request = UserSortedRequestDTO(page: page, size: size, sort: sort) + let endPoint = UserAPIEndPoint.getRecentPopUp(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } + + public func getBookmarkPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { + let request = UserSortedRequestDTO(page: page, size: size, sort: sort) + let endPoint = UserAPIEndPoint.getBookmarkPopUp(request: request) + return provider.requestData(with: endPoint, interceptor: tokenInterceptor).map { $0.toDomain() } + } +} diff --git a/Poppool/DomainLayer/Domain/Domain.xcodeproj/project.pbxproj b/Poppool/DomainLayer/Domain/Domain.xcodeproj/project.pbxproj new file mode 100644 index 00000000..94cc85b7 --- /dev/null +++ b/Poppool/DomainLayer/Domain/Domain.xcodeproj/project.pbxproj @@ -0,0 +1,602 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 0522C1DD2DB67C6E00B141FF /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0522C1DC2DB67C6E00B141FF /* RxSwift */; }; + 0522C1DF2DB67C7700B141FF /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0522C1DE2DB67C7700B141FF /* RxSwift */; }; + 05C1D61E2DB53A6700508FFD /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D0DB2DB538A600508FFD /* DomainInterface.framework */; }; + 05C1D6222DB53A6700508FFD /* Infrastructure.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D61D2DB53A6700508FFD /* Infrastructure.framework */; }; + 05C1D6262DB53A6E00508FFD /* Infrastructure.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D6252DB53A6E00508FFD /* Infrastructure.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 05C1D6202DB53A6700508FFD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 058CC8E72DB5377F0084221A /* Project object */; + proxyType = 1; + remoteGlobalIDString = 05C1D0DA2DB538A600508FFD; + remoteInfo = DomainInterface; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 05BDD5E02DB678D100C1E192 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 05BDD5E42DB678DC00C1E192 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 058CC8F02DB5377F0084221A /* Domain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Domain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D0DB2DB538A600508FFD /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D61D2DB53A6700508FFD /* Infrastructure.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Infrastructure.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D6252DB53A6E00508FFD /* Infrastructure.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Infrastructure.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 058CC8F22DB5377F0084221A /* Domain */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = Domain; + sourceTree = ""; + }; + 05C1D0DC2DB538A600508FFD /* DomainInterface */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = DomainInterface; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 058CC8ED2DB5377F0084221A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0522C1DD2DB67C6E00B141FF /* RxSwift in Frameworks */, + 05C1D61E2DB53A6700508FFD /* DomainInterface.framework in Frameworks */, + 05C1D6222DB53A6700508FFD /* Infrastructure.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 05C1D0D82DB538A600508FFD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0522C1DF2DB67C7700B141FF /* RxSwift in Frameworks */, + 05C1D6262DB53A6E00508FFD /* Infrastructure.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 058CC8E62DB5377F0084221A = { + isa = PBXGroup; + children = ( + 058CC8F22DB5377F0084221A /* Domain */, + 05C1D0DC2DB538A600508FFD /* DomainInterface */, + 05C1D61C2DB53A6700508FFD /* Frameworks */, + 058CC8F12DB5377F0084221A /* Products */, + ); + sourceTree = ""; + }; + 058CC8F12DB5377F0084221A /* Products */ = { + isa = PBXGroup; + children = ( + 058CC8F02DB5377F0084221A /* Domain.framework */, + 05C1D0DB2DB538A600508FFD /* DomainInterface.framework */, + ); + name = Products; + sourceTree = ""; + }; + 05C1D61C2DB53A6700508FFD /* Frameworks */ = { + isa = PBXGroup; + children = ( + 05C1D6252DB53A6E00508FFD /* Infrastructure.framework */, + 05C1D61D2DB53A6700508FFD /* Infrastructure.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 058CC8EB2DB5377F0084221A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 05C1D0D62DB538A600508FFD /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 058CC8EF2DB5377F0084221A /* Domain */ = { + isa = PBXNativeTarget; + buildConfigurationList = 058CC8F72DB5377F0084221A /* Build configuration list for PBXNativeTarget "Domain" */; + buildPhases = ( + 058CC8EB2DB5377F0084221A /* Headers */, + 058CC8EC2DB5377F0084221A /* Sources */, + 058CC8ED2DB5377F0084221A /* Frameworks */, + 058CC8EE2DB5377F0084221A /* Resources */, + 05BDD5E42DB678DC00C1E192 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 05C1D6212DB53A6700508FFD /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 058CC8F22DB5377F0084221A /* Domain */, + ); + name = Domain; + packageProductDependencies = ( + 0522C1DC2DB67C6E00B141FF /* RxSwift */, + ); + productName = Domain; + productReference = 058CC8F02DB5377F0084221A /* Domain.framework */; + productType = "com.apple.product-type.framework"; + }; + 05C1D0DA2DB538A600508FFD /* DomainInterface */ = { + isa = PBXNativeTarget; + buildConfigurationList = 05C1D0DF2DB538A600508FFD /* Build configuration list for PBXNativeTarget "DomainInterface" */; + buildPhases = ( + 05C1D0D62DB538A600508FFD /* Headers */, + 05C1D0D72DB538A600508FFD /* Sources */, + 05C1D0D82DB538A600508FFD /* Frameworks */, + 05C1D0D92DB538A600508FFD /* Resources */, + 05BDD5E02DB678D100C1E192 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 05C1D0DC2DB538A600508FFD /* DomainInterface */, + ); + name = DomainInterface; + packageProductDependencies = ( + 0522C1DE2DB67C7700B141FF /* RxSwift */, + ); + productName = DomainInterface; + productReference = 05C1D0DB2DB538A600508FFD /* DomainInterface.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 058CC8E72DB5377F0084221A /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1630; + LastUpgradeCheck = 1630; + TargetAttributes = { + 058CC8EF2DB5377F0084221A = { + CreatedOnToolsVersion = 16.3; + }; + 05C1D0DA2DB538A600508FFD = { + CreatedOnToolsVersion = 16.3; + }; + }; + }; + buildConfigurationList = 058CC8EA2DB5377F0084221A /* Build configuration list for PBXProject "Domain" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 058CC8E62DB5377F0084221A; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 05C1D8282DB53CC100508FFD /* XCRemoteSwiftPackageReference "RxSwift" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 058CC8F12DB5377F0084221A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 058CC8EF2DB5377F0084221A /* Domain */, + 05C1D0DA2DB538A600508FFD /* DomainInterface */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 058CC8EE2DB5377F0084221A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 05C1D0D92DB538A600508FFD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 058CC8EC2DB5377F0084221A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 05C1D0D72DB538A600508FFD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 05C1D6212DB53A6700508FFD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 05C1D0DA2DB538A600508FFD /* DomainInterface */; + targetProxy = 05C1D6202DB53A6700508FFD /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 058CC8F52DB5377F0084221A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 058CC8F62DB5377F0084221A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 058CC8F82DB5377F0084221A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.Domain; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 058CC8F92DB5377F0084221A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.Domain; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 05C1D0E02DB538A600508FFD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.DomainInterface; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + 05C1D0E12DB538A600508FFD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.DomainInterface; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 058CC8EA2DB5377F0084221A /* Build configuration list for PBXProject "Domain" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 058CC8F52DB5377F0084221A /* Debug */, + 058CC8F62DB5377F0084221A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 058CC8F72DB5377F0084221A /* Build configuration list for PBXNativeTarget "Domain" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 058CC8F82DB5377F0084221A /* Debug */, + 058CC8F92DB5377F0084221A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 05C1D0DF2DB538A600508FFD /* Build configuration list for PBXNativeTarget "DomainInterface" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 05C1D0E02DB538A600508FFD /* Debug */, + 05C1D0E12DB538A600508FFD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 05C1D8282DB53CC100508FFD /* XCRemoteSwiftPackageReference "RxSwift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ReactiveX/RxSwift"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 6.9.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 0522C1DC2DB67C6E00B141FF /* RxSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 05C1D8282DB53CC100508FFD /* XCRemoteSwiftPackageReference "RxSwift" */; + productName = RxSwift; + }; + 0522C1DE2DB67C7700B141FF /* RxSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 05C1D8282DB53CC100508FFD /* XCRemoteSwiftPackageReference "RxSwift" */; + productName = RxSwift; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 058CC8E72DB5377F0084221A /* Project object */; +} diff --git a/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/AdminUseCaseImpl.swift b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/AdminUseCaseImpl.swift new file mode 100644 index 00000000..de49b176 --- /dev/null +++ b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/AdminUseCaseImpl.swift @@ -0,0 +1,64 @@ +import Foundation + +import DomainInterface +import Infrastructure + +import RxSwift + +public final class AdminUseCaseImpl: AdminUseCase { + + private let repository: AdminRepository + + public init(repository: AdminRepository) { + self.repository = repository + } + + public func fetchStoreList(query: String?, page: Int, size: Int) -> Observable<[AdminStore]> { + return repository.fetchStoreList(query: query, page: page, size: size) + } + + public func fetchStoreDetail(id: Int64) -> Observable { + return repository.fetchStoreDetail(id: id) + } + + public 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) + }) + } + + public func updateStore(params: UpdateStoreParams) -> Completable { + Logger.log(message: """ + Updating store with location: + Latitude: \(params.latitude) + Longitude: \(params.longitude) + """, category: .debug) + 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) + }) + } + + public func deleteStore(id: Int64) -> Completable { + return repository.deleteStore(id: id) + } + + // Notice + public func createNotice(params: CreateNoticeParams) -> Completable { + return repository.createNotice(params: params) + } + + public func updateNotice(params: UpdateNoticeParams) -> Completable { + return repository.updateNotice(params: params) + } + + public func deleteNotice(id: Int64) -> Completable { + return repository.deleteNotice(id: id) + } +} diff --git a/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/AuthAPIUseCaseImpl.swift b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/AuthAPIUseCaseImpl.swift new file mode 100644 index 00000000..6ec0781d --- /dev/null +++ b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/AuthAPIUseCaseImpl.swift @@ -0,0 +1,22 @@ +import Foundation + +import DomainInterface + +import RxSwift + +public final class AuthAPIUseCaseImpl: AuthAPIUseCase { + + private let repository: AuthAPIRepository + + public init(repository: AuthAPIRepository) { + self.repository = repository + } + + public func postTryLogin(userCredential: Encodable, socialType: String) -> Observable { + return repository.tryLogIn(userCredential: userCredential, socialType: socialType) + } + + public func postTokenReissue() -> Observable { + return repository.postTokenReissue() + } +} diff --git a/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/CommentAPIUseCaseImpl.swift b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/CommentAPIUseCaseImpl.swift new file mode 100644 index 00000000..479fbdd0 --- /dev/null +++ b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/CommentAPIUseCaseImpl.swift @@ -0,0 +1,26 @@ +import Foundation + +import DomainInterface + +import RxSwift + +public final class CommentAPIUseCaseImpl: CommentAPIUseCase { + + private let repository: CommentAPIRepository + + public init(repository: CommentAPIRepository) { + self.repository = repository + } + + public func postCommentAdd(popUpStoreId: Int64, content: String?, commentType: String?, imageUrlList: [String?]) -> Completable { + return repository.postCommentAdd(popUpStoreId: popUpStoreId, content: content, commentType: commentType, imageUrlList: imageUrlList) + } + + public func deleteComment(popUpStoreId: Int64, commentId: Int64) -> Completable { + return repository.deleteComment(popUpStoreId: popUpStoreId, commentId: commentId) + } + + public func editComment(popUpStoreId: Int64, commentId: Int64, content: String?, imageUrlList: [String?]?) -> Completable { + return repository.editComment(popUpStoreId: popUpStoreId, commentId: commentId, content: content, imageUrlList: imageUrlList) + } +} diff --git a/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/HomeAPIUseCaseImpl.swift b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/HomeAPIUseCaseImpl.swift new file mode 100644 index 00000000..be56469f --- /dev/null +++ b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/HomeAPIUseCaseImpl.swift @@ -0,0 +1,46 @@ +import Foundation + +import DomainInterface + +import RxSwift + +public final class HomeAPIUseCaseImpl: HomeAPIUseCase { + + private let repository: HomeAPIRepository + + public init(repository: HomeAPIRepository) { + self.repository = repository + } + + public func fetchHome( + page: Int32?, + size: Int32?, + sort: String? + ) -> Observable { + return repository.fetchHome(page: page, size: size, sort: sort) + } + + public func fetchCustomPopUp( + page: Int32?, + size: Int32?, + sort: String? + ) -> Observable { + return repository.fetchCustomPopUp(page: page, size: size, sort: sort) + } + + public func fetchNewPopUp( + page: Int32?, + size: Int32?, + sort: String? + ) -> Observable { + return repository.fetchNewPopUp(page: page, size: size, sort: sort) + } + + public func fetchPopularPopUp( + page: Int32?, + size: Int32?, + sort: String? + ) -> Observable { + return repository.fetchPopularPopUp(page: page, size: size, sort: sort) + } +} diff --git a/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/MapUseCaseImpl.swift b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/MapUseCaseImpl.swift new file mode 100644 index 00000000..5253690e --- /dev/null +++ b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/MapUseCaseImpl.swift @@ -0,0 +1,71 @@ +import Foundation + +import DomainInterface +import Infrastructure + +import RxSwift + +public final class MapUseCaseImpl: MapUseCase { + + private let repository: MapRepository + + public init(repository: MapRepository) { + self.repository = repository + } + + public func fetchCategories() -> Observable<[CategoryResponse]> { + return repository.fetchCategories() + } + + public func fetchStoresInBounds( + northEastLat: Double, + northEastLon: Double, + southWestLat: Double, + southWestLon: Double, + categories: [Int64] + ) -> Observable<[MapPopUpStore]> { + return repository.fetchStoresInBounds( + northEastLat: northEastLat, + northEastLon: northEastLon, + southWestLat: southWestLat, + southWestLon: southWestLon, + categories: categories + ) + .do(onNext: { stores in + Logger.log(message: "맵 범위 내 스토어 \(stores.count)개 로드됨", category: .debug) + }, onError: { error in + Logger.log(message: "맵 범위 내 스토어 로드 실패: \(error)", category: .error) + }) + } + + public func searchStores( + query: String, + categories: [Int64] + ) -> Observable<[MapPopUpStore]> { + return repository.searchStores( + query: query, + categories: categories + ) + .do(onNext: { stores in + Logger.log(message: "'\(query)' 검색 결과 \(stores.count)개 로드됨", category: .debug) + }, onError: { error in + Logger.log(message: "스토어 검색 실패: \(error)", category: .error) + }) + } + + public func filterStoresByLocation(_ stores: [MapPopUpStore], selectedRegions: [String]) -> [MapPopUpStore] { + guard !selectedRegions.isEmpty else { return stores } + + 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] + + return selectedRegions.contains("\(mainRegion)전체") || + selectedRegions.contains(subRegion) + } + } +} diff --git a/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/PopUpAPIUseCaseImpl.swift b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/PopUpAPIUseCaseImpl.swift new file mode 100644 index 00000000..716f1304 --- /dev/null +++ b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/PopUpAPIUseCaseImpl.swift @@ -0,0 +1,38 @@ +import Foundation + +import DomainInterface + +import RxSwift + +public final class PopUpAPIUseCaseImpl: PopUpAPIUseCase { + + private let repository: PopUpAPIRepository + + public init(repository: PopUpAPIRepository) { + self.repository = repository + } + + public func getSearchBottomPopUpList(isOpen: Bool, categories: [Int64], page: Int32?, size: Int32, sort: String?) -> Observable { + var categoryString: String? + if !categories.isEmpty { + categoryString = categories.map { String($0) + "," }.reduce("", +) + } + if isOpen { + return repository.getOpenPopUpList(categories: categoryString, page: page, size: size, sort: nil, query: nil, sortCode: sort) + } else { + return repository.getClosePopUpList(categories: categoryString, page: page, size: size, sort: nil, query: nil, sortCode: sort) + } + } + + public func getSearchPopUpList(query: String?) -> Observable { + return repository.getSearchPopUpList(categories: nil, page: nil, size: nil, sort: nil, query: query, sortCode: nil) + } + + public func getPopUpDetail(commentType: String?, popUpStoredId: Int64, isViewCount: Bool? = true) -> Observable { + return repository.getPopUpDetail(commentType: commentType, popUpStoreId: popUpStoredId, viewCountYn: isViewCount) + } + + public func getPopUpComment(commentType: String?, page: Int32?, size: Int32?, sort: String?, popUpStoreId: Int64) -> Observable { + return repository.getPopUpComment(commentType: commentType, page: page, size: size, sort: sort, popUpStoreId: popUpStoreId) + } +} diff --git a/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/PreSignedUseCaseImpl.swift b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/PreSignedUseCaseImpl.swift new file mode 100644 index 00000000..c84a23bf --- /dev/null +++ b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/PreSignedUseCaseImpl.swift @@ -0,0 +1,23 @@ +import UIKit + +import DomainInterface + +import RxSwift + +public final class PreSignedUseCaseImpl: PreSignedUseCase { + private let repository: PreSignedRepository + + public init(repository: PreSignedRepository) { + self.repository = repository + } + + public func tryUpload(presignedURLRequest: [(filePath: String, image: UIImage)]) -> Single { + return repository.tryUpload(presignedURLRequest: presignedURLRequest) + } + public func tryDelete(objectKeyList: [String]) -> Completable { + return repository.tryDelete(objectKeyList: objectKeyList) + } + public func fullImageURL(from filePath: String) -> URL? { + repository.fullImageURL(from: filePath) + } +} diff --git a/Poppool/Poppool/Domain/UseCase/SignUpAPIUseCaseImpl.swift b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/SignUpAPIUseCaseImpl.swift similarity index 67% rename from Poppool/Poppool/Domain/UseCase/SignUpAPIUseCaseImpl.swift rename to Poppool/DomainLayer/Domain/Domain/UseCaseImpl/SignUpAPIUseCaseImpl.swift index 006d48fe..1086c284 100644 --- a/Poppool/Poppool/Domain/UseCase/SignUpAPIUseCaseImpl.swift +++ b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/SignUpAPIUseCaseImpl.swift @@ -1,20 +1,17 @@ -// -// SignUpAPIUseCaseImpl.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - import Foundation + +import DomainInterface + import RxSwift -final class SignUpAPIUseCaseImpl { - var repository: SignUpRepositoryImpl +public final class SignUpAPIUseCaseImpl: SignUpAPIUseCase { + private let repository: SignUpRepository - init(repository: SignUpRepositoryImpl) { + public init(repository: SignUpRepository) { self.repository = repository } - func trySignUp( + + public func trySignUp( nickName: String, gender: String, age: Int32, @@ -33,11 +30,12 @@ final class SignUpAPIUseCaseImpl { appleAuthorizationCode: appleAuthorizationCode ) } - func checkNickName(nickName: String) -> Observable { + + public func checkNickName(nickName: String) -> Observable { return repository.checkNickName(nickName: nickName) } - func fetchCategoryList() -> Observable<[Category]> { + public func fetchCategoryList() -> Observable<[CategoryResponse]> { return repository.fetchCategoryList() } } diff --git a/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/UserAPIUseCaseImpl.swift b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/UserAPIUseCaseImpl.swift new file mode 100644 index 00000000..c70de393 --- /dev/null +++ b/Poppool/DomainLayer/Domain/Domain/UseCaseImpl/UserAPIUseCaseImpl.swift @@ -0,0 +1,117 @@ +import Foundation + +import DomainInterface + +import RxSwift + +public final class UserAPIUseCaseImpl: UserAPIUseCase { + private let repository: UserAPIRepository + + public init(repository: UserAPIRepository) { + self.repository = repository + } + + public func postBookmarkPopUp(popUpID: Int64) -> Completable { + return repository.postBookmarkPopUp(popUpStoreId: popUpID) + } + + public func deleteBookmarkPopUp(popUpID: Int64) -> Completable { + return repository.deleteBookmarkPopUp(popUpStoreId: popUpID) + } + + public func postCommentLike(commentId: Int64) -> Completable { + return repository.postCommentLike(commentId: commentId) + } + + public func deleteCommentLike(commentId: Int64) -> Completable { + return repository.deleteCommentLike(commentId: commentId) + } + + public func postUserBlock(blockedUserId: String?) -> Completable { + return repository.postUserBlock(blockedUserId: blockedUserId) + } + + public func deleteUserBlock(blockedUserId: String?) -> Completable { + return repository.deleteUserBlock(blockedUserId: blockedUserId) + } + + public func getOtherUserCommentedPopUpList( + commenterId: String?, + commentType: String?, + page: Int32?, + size: Int32?, + sort: String? + ) -> Observable { + return repository.getOtherUserCommentList( + commenterId: commenterId, + commentType: commentType, + page: page, + size: size, + sort: sort + ) + } + + public func getMyPage() -> Observable { + return repository.getMyPage() + } + + public func postLogout() -> Completable { + return repository.postLogout() + } + + public func getWithdrawlList() -> Observable { + return repository.getWithdrawlList() + } + + public func postWithdrawl(surveyList: [GetWithdrawlListDataResponse]) -> Completable { + return repository.postWithdrawl(list: surveyList.map { ($0.id, $0.survey)}) + } + + public func getMyProfile() -> Observable { + return repository.getMyProfile() + } + + public func putUserTailoredInfo(gender: String?, age: Int32) -> Completable { + return repository.putUserTailoredInfo(gender: gender, age: age) + } + + public func putUserCategory( + interestCategoriesToAdd: [Int64], + interestCategoriesToDelete: [Int64], + interestCategoriesToKeep: [Int64] + ) -> Completable { + return repository.putUserCategory( + interestCategoriesToAdd: interestCategoriesToAdd, + interestCategoriesToDelete: interestCategoriesToDelete, + interestCategoriesToKeep: interestCategoriesToKeep + ) + } + + public func putUserProfile(profileImageUrl: String?, nickname: String?, email: String?, instagramId: String?, intro: String?) -> Completable { + return repository.putUserProfile(profileImageUrl: profileImageUrl, nickname: nickname, email: email, instagramId: instagramId, intro: intro) + } + + public func getMyCommentedPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { + return repository.getMyCommentedPopUp(page: page, size: size, sort: sort) + } + + public func getBlockUserList(page: Int32?, size: Int32?, sort: String?) -> Observable { + return repository.getBlockUserList(page: page, size: size, sort: sort) + } + + public func getNoticeList() -> Observable { + return repository.getNoticeList() + } + + public func getNoticeDetail(noticeID: Int64) -> Observable { + return repository.getNoticeDetail(noticeID: noticeID) + } + + public func getRecentPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { + return repository.getRecentPopUp(page: page, size: size, sort: sort) + } + + public func getBookmarkPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { + return repository.getBookmarkPopUp(page: page, size: size, sort: sort) + } +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/AdminResponse/AdminStore.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AdminResponse/AdminStore.swift new file mode 100644 index 00000000..e57f78fc --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AdminResponse/AdminStore.swift @@ -0,0 +1,15 @@ +import Foundation + +public struct AdminStore { + public init(id: Int64, name: String, categoryName: String, mainImageUrl: String) { + self.id = id + self.name = name + self.categoryName = categoryName + self.mainImageUrl = mainImageUrl + } + + public let id: Int64 + public let name: String + public let categoryName: String + public let mainImageUrl: String +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift new file mode 100644 index 00000000..7dbb50b8 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AdminResponse/AdminStoreDetail.swift @@ -0,0 +1,51 @@ +import Foundation + +public struct AdminStoreDetail { + public init(id: Int64, name: String, categoryId: Int64, categoryName: String, description: String, address: String, startDate: String, endDate: String, createUserId: String, createDateTime: String, mainImageUrl: String, bannerYn: Bool, images: [StoreImage], latitude: Double, longitude: Double, markerTitle: String, markerSnippet: String) { + self.id = id + self.name = name + self.categoryId = categoryId + self.categoryName = categoryName + self.description = description + self.address = address + self.startDate = startDate + self.endDate = endDate + self.createUserId = createUserId + self.createDateTime = createDateTime + self.mainImageUrl = mainImageUrl + self.bannerYn = bannerYn + self.images = images + self.latitude = latitude + self.longitude = longitude + self.markerTitle = markerTitle + self.markerSnippet = markerSnippet + } + + public let id: Int64 + public let name: String + public let categoryId: Int64 + public let categoryName: String + public let description: String + public let address: String + public let startDate: String + public let endDate: String + public let createUserId: String + public let createDateTime: String + public let mainImageUrl: String + public let bannerYn: Bool + public let images: [StoreImage] + public let latitude: Double + public let longitude: Double + public let markerTitle: String + public let markerSnippet: String + + public struct StoreImage { + public init(id: Int64, imageUrl: String) { + self.id = id + self.imageUrl = imageUrl + } + + public let id: Int64 + public let imageUrl: String + } +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/AdminResponse/Params/AdminParams.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AdminResponse/Params/AdminParams.swift new file mode 100644 index 00000000..029b9793 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AdminResponse/Params/AdminParams.swift @@ -0,0 +1,83 @@ +import Foundation + +public struct CreateStoreParams { + public init(name: String, categoryId: Int64, desc: String, address: String, startDate: String, endDate: String, mainImageUrl: String, imageUrlList: [String?], latitude: Double, longitude: Double, markerTitle: String, markerSnippet: String, startDateBeforeEndDate: Bool) { + self.name = name + self.categoryId = categoryId + self.desc = desc + self.address = address + self.startDate = startDate + self.endDate = endDate + self.mainImageUrl = mainImageUrl + self.imageUrlList = imageUrlList + self.latitude = latitude + self.longitude = longitude + self.markerTitle = markerTitle + self.markerSnippet = markerSnippet + self.startDateBeforeEndDate = startDateBeforeEndDate + } + + public let name: String + public let categoryId: Int64 + public let desc: String + public let address: String + public let startDate: String + public let endDate: String + public let mainImageUrl: String + public let imageUrlList: [String?] + public let latitude: Double + public let longitude: Double + public let markerTitle: String + public let markerSnippet: String + public let startDateBeforeEndDate: Bool +} + +public struct UpdateStoreParams { + public init(id: Int64, name: String, categoryId: Int64, desc: String, address: String, startDate: String, endDate: String, mainImageUrl: String, imageUrlList: [String?], imagesToDelete: [Int64], latitude: Double, longitude: Double, markerTitle: String, markerSnippet: String, startDateBeforeEndDate: Bool) { + self.id = id + self.name = name + self.categoryId = categoryId + self.desc = desc + self.address = address + self.startDate = startDate + self.endDate = endDate + self.mainImageUrl = mainImageUrl + self.imageUrlList = imageUrlList + self.imagesToDelete = imagesToDelete + self.latitude = latitude + self.longitude = longitude + self.markerTitle = markerTitle + self.markerSnippet = markerSnippet + self.startDateBeforeEndDate = startDateBeforeEndDate + } + + public let id: Int64 + public let name: String + public let categoryId: Int64 + public let desc: String + public let address: String + public let startDate: String + public let endDate: String + public let mainImageUrl: String + public let imageUrlList: [String?] + public let imagesToDelete: [Int64] + public let latitude: Double + public let longitude: Double + public let markerTitle: String + public let markerSnippet: String + public let startDateBeforeEndDate: Bool +} + +public struct CreateNoticeParams { + public let title: String + public let content: String + public let imageUrlList: [String] +} + +public struct UpdateNoticeParams { + public let id: Int64 + public let title: String + public let content: String + public let imageUrlList: [String] + public let imagesToDelete: [Int64] +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/AuthServiceResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/AuthServiceResponse.swift new file mode 100644 index 00000000..5150eb84 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/AuthServiceResponse.swift @@ -0,0 +1,15 @@ +import Foundation + +public struct AuthServiceResponse: Encodable { + public init(idToken: String? = nil, authorizationCode: String? = nil, kakaoUserId: Int64? = nil, kakaoAccessToken: String? = nil) { + self.idToken = idToken + self.authorizationCode = authorizationCode + self.kakaoUserId = kakaoUserId + self.kakaoAccessToken = kakaoAccessToken + } + + public var idToken: String? + public var authorizationCode: String? + public var kakaoUserId: Int64? + public var kakaoAccessToken: String? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/CategoryResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/CategoryResponse.swift new file mode 100644 index 00000000..23d1c6e0 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/CategoryResponse.swift @@ -0,0 +1,11 @@ +import Foundation + +public struct CategoryResponse { + public init(categoryId: Int64, category: String) { + self.categoryId = categoryId + self.category = category + } + + public let categoryId: Int64 + public let category: String +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/LoginResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/LoginResponse.swift new file mode 100644 index 00000000..94e6f175 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/LoginResponse.swift @@ -0,0 +1,23 @@ +import Foundation + +public struct LoginResponse { + public init(userId: String, grantType: String, accessToken: String, refreshToken: String, accessTokenExpiresAt: String, refreshTokenExpiresAt: String, socialType: String, isRegisteredUser: Bool) { + self.userId = userId + self.grantType = grantType + self.accessToken = accessToken + self.refreshToken = refreshToken + self.accessTokenExpiresAt = accessTokenExpiresAt + self.refreshTokenExpiresAt = refreshTokenExpiresAt + self.socialType = socialType + self.isRegisteredUser = isRegisteredUser + } + + public var userId: String + var grantType: String + public var accessToken: String + public var refreshToken: String + var accessTokenExpiresAt: String + var refreshTokenExpiresAt: String + public var socialType: String + public var isRegisteredUser: Bool +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/PostTokenReissueResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/PostTokenReissueResponse.swift new file mode 100644 index 00000000..39c7724d --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/AuthResponse/PostTokenReissueResponse.swift @@ -0,0 +1,15 @@ +import Foundation + +public struct PostTokenReissueResponse { + public init(accessToken: String? = nil, refreshToken: String? = nil, accessTokenExpiresAt: String? = nil, refreshTokenExpiresAt: String? = nil) { + self.accessToken = accessToken + self.refreshToken = refreshToken + self.accessTokenExpiresAt = accessTokenExpiresAt + self.refreshTokenExpiresAt = refreshTokenExpiresAt + } + + public var accessToken: String? + public var refreshToken: String? + public var accessTokenExpiresAt: String? + public var refreshTokenExpiresAt: String? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/HomeResponse/BannerPopUpStore.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/HomeResponse/BannerPopUpStore.swift new file mode 100644 index 00000000..2c5efa15 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/HomeResponse/BannerPopUpStore.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct BannerPopUpStore { + public init(id: Int64, name: String, mainImageUrl: String) { + self.id = id + self.name = name + self.mainImageUrl = mainImageUrl + } + + public var id: Int64 + public var name: String + public var mainImageUrl: String +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/HomeResponse/GetHomeInfoResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/HomeResponse/GetHomeInfoResponse.swift new file mode 100644 index 00000000..b3ee4e93 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/HomeResponse/GetHomeInfoResponse.swift @@ -0,0 +1,31 @@ +import Foundation + +public struct GetHomeInfoResponse { + public init(bannerPopUpStoreList: [BannerPopUpStore], nickname: String? = nil, customPopUpStoreList: [PopUpStoreResponse], customPopUpStoreTotalPages: Int32, customPopUpStoreTotalElements: Int64, popularPopUpStoreList: [PopUpStoreResponse], popularPopUpStoreTotalPages: Int32, popularPopUpStoreTotalElements: Int64, newPopUpStoreList: [PopUpStoreResponse], newPopUpStoreTotalPages: Int32, newPopUpStoreTotalElements: Int64, loginYn: Bool) { + self.bannerPopUpStoreList = bannerPopUpStoreList + self.nickname = nickname + self.customPopUpStoreList = customPopUpStoreList + self.customPopUpStoreTotalPages = customPopUpStoreTotalPages + self.customPopUpStoreTotalElements = customPopUpStoreTotalElements + self.popularPopUpStoreList = popularPopUpStoreList + self.popularPopUpStoreTotalPages = popularPopUpStoreTotalPages + self.popularPopUpStoreTotalElements = popularPopUpStoreTotalElements + self.newPopUpStoreList = newPopUpStoreList + self.newPopUpStoreTotalPages = newPopUpStoreTotalPages + self.newPopUpStoreTotalElements = newPopUpStoreTotalElements + self.loginYn = loginYn + } + + public var bannerPopUpStoreList: [BannerPopUpStore] + public var nickname: String? + public var customPopUpStoreList: [PopUpStoreResponse] + public var customPopUpStoreTotalPages: Int32 + var customPopUpStoreTotalElements: Int64 + public var popularPopUpStoreList: [PopUpStoreResponse] + public var popularPopUpStoreTotalPages: Int32 + var popularPopUpStoreTotalElements: Int64 + public var newPopUpStoreList: [PopUpStoreResponse] + public var newPopUpStoreTotalPages: Int32 + var newPopUpStoreTotalElements: Int64 + public var loginYn: Bool +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/MapResponse/MapPopUpStore.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/MapResponse/MapPopUpStore.swift new file mode 100644 index 00000000..16fcecb3 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/MapResponse/MapPopUpStore.swift @@ -0,0 +1,31 @@ +import Foundation + +public struct MapPopUpStore: Equatable { + public init(id: Int64, category: String, name: String, address: String, startDate: String, endDate: String, latitude: Double, longitude: Double, markerId: Int64, markerTitle: String, markerSnippet: String, mainImageUrl: String?) { + self.id = id + self.category = category + self.name = name + self.address = address + self.startDate = startDate + self.endDate = endDate + self.latitude = latitude + self.longitude = longitude + self.markerId = markerId + self.markerTitle = markerTitle + self.markerSnippet = markerSnippet + self.mainImageUrl = mainImageUrl + } + + public let id: Int64 + public let category: String + public let name: String + public let address: String + public let startDate: String + public let endDate: String + public let latitude: Double + public let longitude: Double + public let markerId: Int64 + public let markerTitle: String + public let markerSnippet: String + public let mainImageUrl: String? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetPopUpCommentResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetPopUpCommentResponse.swift new file mode 100644 index 00000000..ae460a5a --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetPopUpCommentResponse.swift @@ -0,0 +1,9 @@ +import Foundation + +public struct GetPopUpCommentResponse { + public init(commentList: [GetPopUpDetailCommentResponse]) { + self.commentList = commentList + } + + public let commentList: [GetPopUpDetailCommentResponse] +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetPopUpDetailResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetPopUpDetailResponse.swift new file mode 100644 index 00000000..fcb8137c --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetPopUpDetailResponse.swift @@ -0,0 +1,89 @@ +import Foundation + +public struct GetPopUpDetailResponse { + public init(name: String?, desc: String?, startDate: String?, endDate: String?, startTime: String?, endTime: String?, address: String?, commentCount: Int64, bookmarkYn: Bool, loginYn: Bool, hasCommented: Bool, mainImageUrl: String?, imageList: [GetPopUpDetailImageResponse], commentList: [GetPopUpDetailCommentResponse], similarPopUpStoreList: [GetPopUpDetailSimilarResponse]) { + self.name = name + self.desc = desc + self.startDate = startDate + self.endDate = endDate + self.startTime = startTime + self.endTime = endTime + self.address = address + self.commentCount = commentCount + self.bookmarkYn = bookmarkYn + self.loginYn = loginYn + self.hasCommented = hasCommented + self.mainImageUrl = mainImageUrl + self.imageList = imageList + self.commentList = commentList + self.similarPopUpStoreList = similarPopUpStoreList + } + + public let name: String? + public let desc: String? + public let startDate: String? + public let endDate: String? + public let startTime: String? + public let endTime: String? + public let address: String? + public let commentCount: Int64 + public let bookmarkYn: Bool + public let loginYn: Bool + public let hasCommented: Bool + public let mainImageUrl: String? + public let imageList: [GetPopUpDetailImageResponse] + public let commentList: [GetPopUpDetailCommentResponse] + public let similarPopUpStoreList: [GetPopUpDetailSimilarResponse] +} + +public struct GetPopUpDetailImageResponse { + public init(id: Int64, imageUrl: String?) { + self.id = id + self.imageUrl = imageUrl + } + + public let id: Int64 + public let imageUrl: String? +} + +public struct GetPopUpDetailCommentResponse { + public init(commentId: Int64, creator: String?, nickname: String?, instagramId: String?, profileImageUrl: String?, content: String?, likeYn: Bool, likeCount: Int64, myCommentYn: Bool, createDateTime: String?, commentImageList: [GetPopUpDetailImageResponse]) { + self.commentId = commentId + self.creator = creator + self.nickname = nickname + self.instagramId = instagramId + self.profileImageUrl = profileImageUrl + self.content = content + self.likeYn = likeYn + self.likeCount = likeCount + self.myCommentYn = myCommentYn + self.createDateTime = createDateTime + self.commentImageList = commentImageList + } + + public let commentId: Int64 + public let creator: String? + public let nickname: String? + public let instagramId: String? + public let profileImageUrl: String? + public let content: String? + public let likeYn: Bool + public let likeCount: Int64 + public let myCommentYn: Bool + public let createDateTime: String? + public let commentImageList: [GetPopUpDetailImageResponse] +} + +public struct GetPopUpDetailSimilarResponse { + public init(id: Int64, name: String?, mainImageUrl: String?, endDate: String?) { + self.id = id + self.name = name + self.mainImageUrl = mainImageUrl + self.endDate = endDate + } + + public let id: Int64 + public let name: String? + public let mainImageUrl: String? + public let endDate: String? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetPopUpDirectionResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetPopUpDirectionResponse.swift new file mode 100644 index 00000000..60157404 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetPopUpDirectionResponse.swift @@ -0,0 +1,29 @@ +import Foundation + +public struct GetPopUpDirectionResponse { + public init(id: Int64, categoryName: String, name: String, address: String, startDate: String, endDate: String, latitude: Double, longitude: Double, markerId: Int64, markerTitle: String, markerSnippet: String) { + self.id = id + self.categoryName = categoryName + self.name = name + self.address = address + self.startDate = startDate + self.endDate = endDate + self.latitude = latitude + self.longitude = longitude + self.markerId = markerId + self.markerTitle = markerTitle + self.markerSnippet = markerSnippet + } + + public let id: Int64 + public let categoryName: String + public let name: String + public let address: String + public let startDate: String + public let endDate: String + public let latitude: Double + public let longitude: Double + public let markerId: Int64 + public let markerTitle: String + public let markerSnippet: String +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetSearchBottomPopUpListResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetSearchBottomPopUpListResponse.swift new file mode 100644 index 00000000..acaab501 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetSearchBottomPopUpListResponse.swift @@ -0,0 +1,15 @@ +import Foundation + +public struct GetSearchBottomPopUpListResponse { + public init(popUpStoreList: [PopUpStoreResponse], loginYn: Bool, totalPages: Int32, totalElements: Int64) { + self.popUpStoreList = popUpStoreList + self.loginYn = loginYn + self.totalPages = totalPages + self.totalElements = totalElements + } + + public var popUpStoreList: [PopUpStoreResponse] + public var loginYn: Bool + public var totalPages: Int32 + public var totalElements: Int64 +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetSearchPopUpListResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetSearchPopUpListResponse.swift new file mode 100644 index 00000000..93c13fa5 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/GetSearchPopUpListResponse.swift @@ -0,0 +1,11 @@ +import Foundation + +public struct GetSearchPopUpListResponse { + public init(popUpStoreList: [PopUpStoreResponse], loginYn: Bool) { + self.popUpStoreList = popUpStoreList + self.loginYn = loginYn + } + + public var popUpStoreList: [PopUpStoreResponse] + public var loginYn: Bool +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/PopUpStoreResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/PopUpStoreResponse.swift new file mode 100644 index 00000000..5c487da6 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/PopUpResponse/PopUpStoreResponse.swift @@ -0,0 +1,23 @@ +import Foundation + +public struct PopUpStoreResponse { + public init(id: Int64, category: String?, name: String?, address: String?, mainImageUrl: String?, startDate: String?, endDate: String?, bookmarkYn: Bool) { + self.id = id + self.category = category + self.name = name + self.address = address + self.mainImageUrl = mainImageUrl + self.startDate = startDate + self.endDate = endDate + self.bookmarkYn = bookmarkYn + } + + public let id: Int64 + public let category: String? + public let name: String? + public let address: String? + public let mainImageUrl: String? + public let startDate: String? + public let endDate: String? + public let bookmarkYn: Bool +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetBlockUserListResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetBlockUserListResponse.swift new file mode 100644 index 00000000..a63aaf7f --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetBlockUserListResponse.swift @@ -0,0 +1,27 @@ +import Foundation + +public struct GetBlockUserListResponse { + public init(blockedUserInfoList: [GetBlockUserListDataResponse], totalPages: Int32, totalElements: Int32) { + self.blockedUserInfoList = blockedUserInfoList + self.totalPages = totalPages + self.totalElements = totalElements + } + + public var blockedUserInfoList: [GetBlockUserListDataResponse] + public var totalPages: Int32 + public var totalElements: Int32 +} + +public struct GetBlockUserListDataResponse { + public init(userId: String? = nil, profileImageUrl: String? = nil, nickname: String? = nil, instagramId: String? = nil) { + self.userId = userId + self.profileImageUrl = profileImageUrl + self.nickname = nickname + self.instagramId = instagramId + } + + public var userId: String? + public var profileImageUrl: String? + public var nickname: String? + public var instagramId: String? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetMyCommentResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetMyCommentResponse.swift new file mode 100644 index 00000000..0f1ecacf --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetMyCommentResponse.swift @@ -0,0 +1,31 @@ +import Foundation + +public struct GetMyCommentedPopUpResponse { + public init(popUpInfoList: [GetMyCommentedPopUpDataResponse]) { + self.popUpInfoList = popUpInfoList + } + + public var popUpInfoList: [GetMyCommentedPopUpDataResponse] +} + +public struct GetMyCommentedPopUpDataResponse { + public init(popUpStoreId: Int64, popUpStoreName: String? = nil, desc: String? = nil, mainImageUrl: String? = nil, startDate: String? = nil, endDate: String? = nil, address: String? = nil, closedYn: Bool) { + self.popUpStoreId = popUpStoreId + self.popUpStoreName = popUpStoreName + self.desc = desc + self.mainImageUrl = mainImageUrl + self.startDate = startDate + self.endDate = endDate + self.address = address + self.closedYn = closedYn + } + + public var popUpStoreId: Int64 + public var popUpStoreName: String? + public var desc: String? + public var mainImageUrl: String? + public var startDate: String? + public var endDate: String? + public var address: String? + public var closedYn: Bool +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetMyPageResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetMyPageResponse.swift new file mode 100644 index 00000000..47bfb54b --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetMyPageResponse.swift @@ -0,0 +1,33 @@ +import Foundation + +public struct GetMyPageResponse { + public init(nickname: String? = nil, profileImageUrl: String? = nil, intro: String? = nil, instagramId: String? = nil, loginYn: Bool, adminYn: Bool, myCommentedPopUpList: [GetMyPagePopUpResponse]) { + self.nickname = nickname + self.profileImageUrl = profileImageUrl + self.intro = intro + self.instagramId = instagramId + self.loginYn = loginYn + self.adminYn = adminYn + self.myCommentedPopUpList = myCommentedPopUpList + } + + public var nickname: String? + public var profileImageUrl: String? + public var intro: String? + public var instagramId: String? + public var loginYn: Bool + public var adminYn: Bool + public var myCommentedPopUpList: [GetMyPagePopUpResponse] +} + +public struct GetMyPagePopUpResponse { + public init(popUpStoreId: Int64, popUpStoreName: String? = nil, mainImageUrl: String? = nil) { + self.popUpStoreId = popUpStoreId + self.popUpStoreName = popUpStoreName + self.mainImageUrl = mainImageUrl + } + + public var popUpStoreId: Int64 + public var popUpStoreName: String? + public var mainImageUrl: String? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetMyProfileResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetMyProfileResponse.swift new file mode 100644 index 00000000..671433c8 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetMyProfileResponse.swift @@ -0,0 +1,23 @@ +import Foundation + +public struct GetMyProfileResponse { + public init(profileImageUrl: String? = nil, nickname: String? = nil, email: String? = nil, instagramId: String? = nil, intro: String? = nil, gender: String? = nil, age: Int32, interestCategoryList: [CategoryResponse]) { + self.profileImageUrl = profileImageUrl + self.nickname = nickname + self.email = email + self.instagramId = instagramId + self.intro = intro + self.gender = gender + self.age = age + self.interestCategoryList = interestCategoryList + } + + public var profileImageUrl: String? + public var nickname: String? + public var email: String? + public var instagramId: String? + public var intro: String? + public var gender: String? + public var age: Int32 + public var interestCategoryList: [CategoryResponse] +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetNoticeDetailResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetNoticeDetailResponse.swift new file mode 100644 index 00000000..a1e20371 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetNoticeDetailResponse.swift @@ -0,0 +1,15 @@ +import Foundation + +public struct GetNoticeDetailResponse { + public init(id: Int64, title: String? = nil, content: String? = nil, createDateTime: String? = nil) { + self.id = id + self.title = title + self.content = content + self.createDateTime = createDateTime + } + + var id: Int64 + public var title: String? + public var content: String? + public var createDateTime: String? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetNoticeListResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetNoticeListResponse.swift new file mode 100644 index 00000000..fe085bfc --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetNoticeListResponse.swift @@ -0,0 +1,21 @@ +import Foundation + +public struct GetNoticeListResponse { + public init(noticeInfoList: [GetNoticeListDataResponse]) { + self.noticeInfoList = noticeInfoList + } + + public var noticeInfoList: [GetNoticeListDataResponse] +} + +public struct GetNoticeListDataResponse { + public init(id: Int64, title: String? = nil, createdDateTime: String? = nil) { + self.id = id + self.title = title + self.createdDateTime = createdDateTime + } + + public var id: Int64 + public var title: String? + public var createdDateTime: String? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetOtherUserCommentedPopUpListResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetOtherUserCommentedPopUpListResponse.swift new file mode 100644 index 00000000..65c2f463 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetOtherUserCommentedPopUpListResponse.swift @@ -0,0 +1,31 @@ +import Foundation + +public struct GetOtherUserCommentedPopUpListResponse { + public init(popUpInfoList: [GetOtherUserCommentedPopUpResponse]) { + self.popUpInfoList = popUpInfoList + } + + public var popUpInfoList: [GetOtherUserCommentedPopUpResponse] +} + +public struct GetOtherUserCommentedPopUpResponse { + public init(popUpStoreId: Int64, popUpStoreName: String? = nil, desc: String? = nil, mainImageUrl: String? = nil, startDate: String? = nil, endDate: String? = nil, address: String? = nil, closedYn: Bool) { + self.popUpStoreId = popUpStoreId + self.popUpStoreName = popUpStoreName + self.desc = desc + self.mainImageUrl = mainImageUrl + self.startDate = startDate + self.endDate = endDate + self.address = address + self.closedYn = closedYn + } + + public var popUpStoreId: Int64 + public var popUpStoreName: String? + public var desc: String? + public var mainImageUrl: String? + public var startDate: String? + public var endDate: String? + public var address: String? + public var closedYn: Bool +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetRecentPopUpResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetRecentPopUpResponse.swift new file mode 100644 index 00000000..0e84a1f6 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetRecentPopUpResponse.swift @@ -0,0 +1,35 @@ +import Foundation + +public struct GetRecentPopUpResponse { + public init(popUpInfoList: [GetRecentPopUpDataResponse], totalPages: Int32, totalElements: Int32) { + self.popUpInfoList = popUpInfoList + self.totalPages = totalPages + self.totalElements = totalElements + } + + public var popUpInfoList: [GetRecentPopUpDataResponse] + public var totalPages: Int32 + public var totalElements: Int32 +} + +public struct GetRecentPopUpDataResponse { + public init(popUpStoreId: Int64, popUpStoreName: String? = nil, desc: String? = nil, mainImageUrl: String? = nil, startDate: String? = nil, endDate: String? = nil, address: String? = nil, closeYn: Bool) { + self.popUpStoreId = popUpStoreId + self.popUpStoreName = popUpStoreName + self.desc = desc + self.mainImageUrl = mainImageUrl + self.startDate = startDate + self.endDate = endDate + self.address = address + self.closeYn = closeYn + } + + public var popUpStoreId: Int64 + public var popUpStoreName: String? + public var desc: String? + public var mainImageUrl: String? + public var startDate: String? + public var endDate: String? + public var address: String? + public var closeYn: Bool +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetWithdrawlListResponse.swift b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetWithdrawlListResponse.swift new file mode 100644 index 00000000..830001e0 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Entity/UserResponse/GetWithdrawlListResponse.swift @@ -0,0 +1,19 @@ +import Foundation + +public struct GetWithdrawlListResponse { + public init(withDrawlSurveyList: [GetWithdrawlListDataResponse]) { + self.withDrawlSurveyList = withDrawlSurveyList + } + + public var withDrawlSurveyList: [GetWithdrawlListDataResponse] +} + +public struct GetWithdrawlListDataResponse { + public init(id: Int64, survey: String? = nil) { + self.id = id + self.survey = survey + } + + public var id: Int64 + public var survey: String? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Repository/AdminRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/AdminRepository.swift new file mode 100644 index 00000000..4a9f2972 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/AdminRepository.swift @@ -0,0 +1,18 @@ +import Foundation + +import RxSwift + +public protocol AdminRepository { + 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/DomainLayer/Domain/DomainInterface/Repository/AuthAPIRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/AuthAPIRepository.swift new file mode 100644 index 00000000..33154753 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/AuthAPIRepository.swift @@ -0,0 +1,8 @@ +import Foundation + +import RxSwift + +public protocol AuthAPIRepository { + func tryLogIn(userCredential: Encodable, socialType: String) -> Observable + func postTokenReissue() -> Observable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Repository/CommentAPIRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/CommentAPIRepository.swift new file mode 100644 index 00000000..64fc0fbd --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/CommentAPIRepository.swift @@ -0,0 +1,24 @@ +import Foundation + +import RxSwift + +public protocol CommentAPIRepository { + 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: [String?]? + ) -> Completable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Repository/HomeAPIRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/HomeAPIRepository.swift new file mode 100644 index 00000000..d417f03a --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/HomeAPIRepository.swift @@ -0,0 +1,10 @@ +import Foundation + +import RxSwift + +public protocol HomeAPIRepository { + func fetchHome(page: Int32?, size: Int32?, sort: String?) -> Observable + func fetchCustomPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable + func fetchNewPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable + func fetchPopularPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Repository/MapDirectionRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/MapDirectionRepository.swift new file mode 100644 index 00000000..ba17d266 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/MapDirectionRepository.swift @@ -0,0 +1,7 @@ +import Foundation + +import RxSwift + +public protocol MapDirectionRepository { + func getPopUpDirection(popUpStoreId: Int64) -> Observable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Repository/MapRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/MapRepository.swift new file mode 100644 index 00000000..4f086267 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/MapRepository.swift @@ -0,0 +1,20 @@ +import Foundation + +import RxSwift + +public protocol MapRepository { + func fetchStoresInBounds( + northEastLat: Double, + northEastLon: Double, + southWestLat: Double, + southWestLon: Double, + categories: [Int64] + ) -> Observable<[MapPopUpStore]> + + func searchStores( + query: String, + categories: [Int64] + ) -> Observable<[MapPopUpStore]> + + func fetchCategories() -> Observable<[CategoryResponse]> +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Repository/PopUpAPIRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/PopUpAPIRepository.swift new file mode 100644 index 00000000..b6c000ec --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/PopUpAPIRepository.swift @@ -0,0 +1,44 @@ +import Foundation + +import RxSwift + +public protocol PopUpAPIRepository { + func postBookmarkPopUp(popUpStoreId: Int64) -> Completable + + func getClosePopUpList( + categories: String?, + page: Int32?, + size: Int32?, + sort: String?, + query: String?, + sortCode: String? + ) -> Observable + + func getOpenPopUpList( + categories: String?, + page: Int32?, + size: Int32?, + sort: String?, + query: String?, + sortCode: String? + ) -> Observable + + func getSearchPopUpList( + categories: String?, + page: Int32?, + size: Int32?, + sort: String?, + query: String?, + sortCode: String? + ) -> Observable + + func getPopUpDetail(commentType: String?, popUpStoreId: Int64, viewCountYn: Bool?) -> Observable + + func getPopUpComment( + commentType: String?, + page: Int32?, + size: Int32?, + sort: String?, + popUpStoreId: Int64 + ) -> Observable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Repository/PreSignedRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/PreSignedRepository.swift new file mode 100644 index 00000000..483becff --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/PreSignedRepository.swift @@ -0,0 +1,9 @@ +import UIKit + +import RxSwift + +public protocol PreSignedRepository { + func tryUpload(presignedURLRequest: [(filePath: String, image: UIImage)]) -> Single + func tryDelete(objectKeyList: [String]) -> Completable + func fullImageURL(from filePath: String) -> URL? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Repository/SignUpRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/SignUpRepository.swift new file mode 100644 index 00000000..7ce31985 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/SignUpRepository.swift @@ -0,0 +1,17 @@ +import Foundation + +import RxSwift + +public protocol SignUpRepository { + func checkNickName(nickName: String) -> Observable + func fetchCategoryList() -> Observable<[CategoryResponse]> + func trySignUp( + nickName: String, + gender: String, + age: Int32, + socialEmail: String, + socialType: String, + interests: [Int64], + appleAuthorizationCode: String? + ) -> Completable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/Repository/UserAPIRepository.swift b/Poppool/DomainLayer/Domain/DomainInterface/Repository/UserAPIRepository.swift new file mode 100644 index 00000000..2b2658a0 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/Repository/UserAPIRepository.swift @@ -0,0 +1,49 @@ +import Foundation + +import RxSwift + +public protocol UserAPIRepository { + func postBookmarkPopUp(popUpStoreId: Int64) -> Completable + func deleteBookmarkPopUp(popUpStoreId: Int64) -> Completable + func postCommentLike(commentId: Int64) -> Completable + func deleteCommentLike(commentId: Int64) -> Completable + func postUserBlock(blockedUserId: String?) -> Completable + func deleteUserBlock(blockedUserId: String?) -> Completable + + func getOtherUserCommentList( + commenterId: String?, + commentType: String?, + page: Int32?, + size: Int32?, + sort: String? + ) -> Observable + + func getMyPage() -> Observable + func postLogout() -> Completable + func getWithdrawlList() -> Observable + func postWithdrawl(list: [(Int64, String?)]) -> Completable + + func getMyProfile() -> Observable + func putUserTailoredInfo(gender: String?, age: Int32) -> Completable + + func putUserCategory( + interestCategoriesToAdd: [Int64], + interestCategoriesToDelete: [Int64], + interestCategoriesToKeep: [Int64] + ) -> Completable + + func putUserProfile( + profileImageUrl: String?, + nickname: String?, + email: String?, + instagramId: String?, + intro: String? + ) -> Completable + + func getMyCommentedPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable + func getBlockUserList(page: Int32?, size: Int32?, sort: String?) -> Observable + func getNoticeList() -> Observable + func getNoticeDetail(noticeID: Int64) -> Observable + func getRecentPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable + func getBookmarkPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/UseCase/AdminUseCase.swift b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/AdminUseCase.swift new file mode 100644 index 00000000..5e083d73 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/AdminUseCase.swift @@ -0,0 +1,19 @@ +import Foundation + +import RxSwift + +public protocol AdminUseCase { + + 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/DomainLayer/Domain/DomainInterface/UseCase/AuthAPIUseCase.swift b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/AuthAPIUseCase.swift new file mode 100644 index 00000000..44ce761c --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/AuthAPIUseCase.swift @@ -0,0 +1,8 @@ +import Foundation + +import RxSwift + +public protocol AuthAPIUseCase { + func postTryLogin(userCredential: Encodable, socialType: String) -> Observable + func postTokenReissue() -> Observable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/UseCase/CommentAPIUseCase.swift b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/CommentAPIUseCase.swift new file mode 100644 index 00000000..5114f0d3 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/CommentAPIUseCase.swift @@ -0,0 +1,9 @@ +import Foundation + +import RxSwift + +public 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: [String?]?) -> Completable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/UseCase/HomeAPIUseCase.swift b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/HomeAPIUseCase.swift new file mode 100644 index 00000000..30f6d2f0 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/HomeAPIUseCase.swift @@ -0,0 +1,10 @@ +import Foundation + +import RxSwift + +public protocol HomeAPIUseCase { + func fetchHome(page: Int32?, size: Int32?, sort: String?) -> Observable + func fetchCustomPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable + func fetchNewPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable + func fetchPopularPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/UseCase/MapUseCase.swift b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/MapUseCase.swift new file mode 100644 index 00000000..b4c82a70 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/MapUseCase.swift @@ -0,0 +1,21 @@ +import Foundation + +import RxSwift + +public protocol MapUseCase { + func fetchCategories() -> Observable<[CategoryResponse]> + func fetchStoresInBounds( + northEastLat: Double, + northEastLon: Double, + southWestLat: Double, + southWestLon: Double, + categories: [Int64] + ) -> Observable<[MapPopUpStore]> + + func searchStores( + query: String, + categories: [Int64] + ) -> Observable<[MapPopUpStore]> + + func filterStoresByLocation(_ stores: [MapPopUpStore], selectedRegions: [String]) -> [MapPopUpStore] +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/UseCase/PopUpAPIUseCase.swift b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/PopUpAPIUseCase.swift new file mode 100644 index 00000000..7748b47f --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/PopUpAPIUseCase.swift @@ -0,0 +1,10 @@ +import Foundation + +import RxSwift + +public protocol PopUpAPIUseCase { + func getSearchBottomPopUpList(isOpen: Bool, categories: [Int64], page: Int32?, size: Int32, sort: String?) -> Observable + func getSearchPopUpList(query: String?) -> Observable + func getPopUpDetail(commentType: String?, popUpStoredId: Int64, isViewCount: Bool?) -> Observable + func getPopUpComment(commentType: String?, page: Int32?, size: Int32?, sort: String?, popUpStoreId: Int64) -> Observable +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/UseCase/PreSignedUseCase.swift b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/PreSignedUseCase.swift new file mode 100644 index 00000000..13b92620 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/PreSignedUseCase.swift @@ -0,0 +1,9 @@ +import UIKit + +import RxSwift + +public protocol PreSignedUseCase { + func tryUpload(presignedURLRequest: [(filePath: String, image: UIImage)]) -> Single + func tryDelete(objectKeyList: [String]) -> Completable + func fullImageURL(from filePath: String) -> URL? +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/UseCase/SignUpAPIUseCase.swift b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/SignUpAPIUseCase.swift new file mode 100644 index 00000000..dc8fb97d --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/SignUpAPIUseCase.swift @@ -0,0 +1,19 @@ +import Foundation + +import RxSwift + +public protocol SignUpAPIUseCase { + func trySignUp( + nickName: String, + gender: String, + age: Int32, + socialEmail: String, + socialType: String, + interests: [Int64], + appleAuthorizationCode: String? + ) -> Completable + + func checkNickName(nickName: String) -> Observable + + func fetchCategoryList() -> Observable<[CategoryResponse]> +} diff --git a/Poppool/DomainLayer/Domain/DomainInterface/UseCase/UserAPIUseCase.swift b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/UserAPIUseCase.swift new file mode 100644 index 00000000..6f74f9f8 --- /dev/null +++ b/Poppool/DomainLayer/Domain/DomainInterface/UseCase/UserAPIUseCase.swift @@ -0,0 +1,27 @@ +import Foundation + +import RxSwift + +public protocol UserAPIUseCase { + func postBookmarkPopUp(popUpID: Int64) -> Completable + func deleteBookmarkPopUp(popUpID: Int64) -> Completable + func postCommentLike(commentId: Int64) -> Completable + func deleteCommentLike(commentId: Int64) -> Completable + func postUserBlock(blockedUserId: String?) -> Completable + func deleteUserBlock(blockedUserId: String?) -> Completable + func getOtherUserCommentedPopUpList(commenterId: String?, commentType: String?, page: Int32?, size: Int32?, sort: String?) -> Observable + func getMyPage() -> Observable + func postLogout() -> Completable + func getWithdrawlList() -> Observable + func postWithdrawl(surveyList: [GetWithdrawlListDataResponse]) -> Completable + func getMyProfile() -> Observable + func putUserTailoredInfo(gender: String?, age: Int32) -> Completable + func putUserCategory(interestCategoriesToAdd: [Int64], interestCategoriesToDelete: [Int64], interestCategoriesToKeep: [Int64]) -> Completable + func putUserProfile(profileImageUrl: String?, nickname: String?, email: String?, instagramId: String?, intro: String?) -> Completable + func getMyCommentedPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable + func getBlockUserList(page: Int32?, size: Int32?, sort: String?) -> Observable + func getNoticeList() -> Observable + func getNoticeDetail(noticeID: Int64) -> Observable + func getRecentPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable + func getBookmarkPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable +} diff --git a/Poppool/Poppool.xcodeproj/project.pbxproj b/Poppool/Poppool.xcodeproj/project.pbxproj index f8e92c85..3970791e 100644 --- a/Poppool/Poppool.xcodeproj/project.pbxproj +++ b/Poppool/Poppool.xcodeproj/project.pbxproj @@ -3,2921 +3,122 @@ archiveVersion = 1; classes = { }; - objectVersion = 56; + objectVersion = 76; objects = { /* Begin PBXBuildFile section */ - 0818988E2D295DC30067BF01 /* MyPageLogoutSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818988D2D295DC30067BF01 /* MyPageLogoutSection.swift */; }; - 081898902D295DC80067BF01 /* MyPageLogoutSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818988F2D295DC80067BF01 /* MyPageLogoutSectionCell.swift */; }; - 081898942D2965C20067BF01 /* ProfileEditController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898932D2965C20067BF01 /* ProfileEditController.swift */; }; - 081898962D2965C90067BF01 /* ProfileEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898952D2965C90067BF01 /* ProfileEditView.swift */; }; - 081898982D2965D20067BF01 /* ProfileEditReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898972D2965D20067BF01 /* ProfileEditReactor.swift */; }; - 0818989C2D2BAA570067BF01 /* WithdrawlCheckModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818989B2D2BAA570067BF01 /* WithdrawlCheckModalView.swift */; }; - 0818989E2D2BAA610067BF01 /* WithdrawlCheckModalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818989D2D2BAA610067BF01 /* WithdrawlCheckModalController.swift */; }; - 081898A02D2BAA670067BF01 /* WithdrawlCheckModalReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818989F2D2BAA670067BF01 /* WithdrawlCheckModalReactor.swift */; }; - 081898A32D2CC0110067BF01 /* WithdrawlReasonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898A22D2CC0110067BF01 /* WithdrawlReasonView.swift */; }; - 081898A52D2CC0180067BF01 /* WithdrawlReasonController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898A42D2CC0180067BF01 /* WithdrawlReasonController.swift */; }; - 081898A72D2CC01D0067BF01 /* WithdrawlReasonReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898A62D2CC01D0067BF01 /* WithdrawlReasonReactor.swift */; }; - 081898AA2D2CEA2F0067BF01 /* WithdrawlCheckSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898A92D2CEA2F0067BF01 /* WithdrawlCheckSectionCell.swift */; }; - 081898AC2D2CEA940067BF01 /* WithdrawlCheckSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898AB2D2CEA940067BF01 /* WithdrawlCheckSection.swift */; }; - 081898AE2D2CFC230067BF01 /* GetWithdrawlListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898AD2D2CFC230067BF01 /* GetWithdrawlListResponseDTO.swift */; }; - 081898B02D2CFCA40067BF01 /* GetWithdrawlListResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898AF2D2CFCA40067BF01 /* GetWithdrawlListResponse.swift */; }; - 081898B32D2D20D70067BF01 /* WithdrawlCompleteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898B22D2D20D70067BF01 /* WithdrawlCompleteView.swift */; }; - 081898B52D2D20E30067BF01 /* WithdrawlCompleteController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898B42D2D20E30067BF01 /* WithdrawlCompleteController.swift */; }; - 081898B72D2D23A90067BF01 /* UINavigationController+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898B62D2D23A90067BF01 /* UINavigationController+.swift */; }; - 081898BA2D2E5F4C0067BF01 /* MyCommentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898B92D2E5F4C0067BF01 /* MyCommentView.swift */; }; - 081898BC2D2E5F510067BF01 /* MyCommentReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898BB2D2E5F510067BF01 /* MyCommentReactor.swift */; }; - 081898BE2D2E5F590067BF01 /* MyCommentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898BD2D2E5F590067BF01 /* MyCommentController.swift */; }; - 081898C32D30AE2C0067BF01 /* GetMyProfileResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898C22D30AE2C0067BF01 /* GetMyProfileResponseDTO.swift */; }; - 081898C52D30AEF40067BF01 /* GetMyProfileResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898C42D30AEF40067BF01 /* GetMyProfileResponse.swift */; }; - 081898CA2D30D5BA0067BF01 /* InfoEditModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898C92D30D5BA0067BF01 /* InfoEditModalView.swift */; }; - 081898CC2D30D5BF0067BF01 /* InfoEditModalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898CB2D30D5BF0067BF01 /* InfoEditModalController.swift */; }; - 081898CE2D30D5C60067BF01 /* InfoEditModalReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898CD2D30D5C60067BF01 /* InfoEditModalReactor.swift */; }; - 081898D02D30EA900067BF01 /* PutUserTailoredInfoRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898CF2D30EA900067BF01 /* PutUserTailoredInfoRequestDTO.swift */; }; - 081898D22D30F57D0067BF01 /* CategoryEditModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898D12D30F57D0067BF01 /* CategoryEditModalView.swift */; }; - 081898D42D30F5840067BF01 /* CategoryEditModalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898D32D30F5840067BF01 /* CategoryEditModalController.swift */; }; - 081898D62D30F58A0067BF01 /* CategoryEditModalReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898D52D30F58A0067BF01 /* CategoryEditModalReactor.swift */; }; - 081898D82D310C160067BF01 /* PutUserCategoryRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898D72D310C160067BF01 /* PutUserCategoryRequestDTO.swift */; }; - 081898DA2D32559B0067BF01 /* PutUserProfileRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898D92D32559B0067BF01 /* PutUserProfileRequestDTO.swift */; }; - 081898DC2D326DC10067BF01 /* IntroState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898DB2D326DC10067BF01 /* IntroState.swift */; }; - 081898E02D338F9C0067BF01 /* ListCountButtonSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898DF2D338F9C0067BF01 /* ListCountButtonSection.swift */; }; - 081898E22D338FA40067BF01 /* ListCountButtonSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898E12D338FA40067BF01 /* ListCountButtonSectionCell.swift */; }; - 081898E42D3391550067BF01 /* GetMyCommentedPopUpResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898E32D3391550067BF01 /* GetMyCommentedPopUpResponseDTO.swift */; }; - 081898E62D3391CB0067BF01 /* GetMyCommentResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898E52D3391CB0067BF01 /* GetMyCommentResponse.swift */; }; - 081898E82D3392480067BF01 /* GetMyCommentRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898E72D3392480067BF01 /* GetMyCommentRequestDTO.swift */; }; - 081898EC2D33A3960067BF01 /* MyCommentSortedModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898EB2D33A3960067BF01 /* MyCommentSortedModalView.swift */; }; - 081898EE2D33A39D0067BF01 /* MyCommentSortedModalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898ED2D33A39D0067BF01 /* MyCommentSortedModalController.swift */; }; - 081898F02D33A3A30067BF01 /* MyCommentSortedModalReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898EF2D33A3A30067BF01 /* MyCommentSortedModalReactor.swift */; }; - 081898F32D33D6AC0067BF01 /* BlockUserManageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898F22D33D6AC0067BF01 /* BlockUserManageView.swift */; }; - 081898F52D33D6B10067BF01 /* BlockUserManageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898F42D33D6B10067BF01 /* BlockUserManageController.swift */; }; - 081898F72D33D6B70067BF01 /* BlockUserManageReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898F62D33D6B70067BF01 /* BlockUserManageReactor.swift */; }; - 081898FB2D33D9320067BF01 /* GetBlockUserListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898FA2D33D9320067BF01 /* GetBlockUserListResponseDTO.swift */; }; - 081898FD2D33D9ED0067BF01 /* GetBlockUserListResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898FC2D33D9ED0067BF01 /* GetBlockUserListResponse.swift */; }; - 081898FF2D33DA440067BF01 /* GetBlockUserListRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898FE2D33DA440067BF01 /* GetBlockUserListRequestDTO.swift */; }; - 081899022D3407F50067BF01 /* BlockUserListSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899012D3407F50067BF01 /* BlockUserListSection.swift */; }; - 081899052D34080B0067BF01 /* BlockUserListSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899042D34080B0067BF01 /* BlockUserListSectionCell.swift */; }; - 081899082D34B35A0067BF01 /* MyPageNoticeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899072D34B35A0067BF01 /* MyPageNoticeView.swift */; }; - 0818990A2D34B3620067BF01 /* MyPageNoticeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899092D34B3620067BF01 /* MyPageNoticeController.swift */; }; - 0818990C2D34B3670067BF01 /* MyPageNoticeReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818990B2D34B3670067BF01 /* MyPageNoticeReactor.swift */; }; - 0818990E2D34B68C0067BF01 /* GetNoticeListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818990D2D34B68C0067BF01 /* GetNoticeListResponseDTO.swift */; }; - 081899102D34B7240067BF01 /* GetNoticeListResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818990F2D34B7240067BF01 /* GetNoticeListResponse.swift */; }; - 081899122D34CA9E0067BF01 /* GetNoticeDetailResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899112D34CA9E0067BF01 /* GetNoticeDetailResponseDTO.swift */; }; - 081899142D34CAEA0067BF01 /* GetNoticeDetailResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899132D34CAEA0067BF01 /* GetNoticeDetailResponse.swift */; }; - 081899182D34D63E0067BF01 /* NoticeListSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899172D34D63E0067BF01 /* NoticeListSection.swift */; }; - 0818991A2D34D6430067BF01 /* NoticeListSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899192D34D6430067BF01 /* NoticeListSectionCell.swift */; }; - 0818991E2D34DF7D0067BF01 /* MyPageNoticeDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818991D2D34DF7D0067BF01 /* MyPageNoticeDetailView.swift */; }; - 081899202D34DF880067BF01 /* MyPageNoticeDetailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818991F2D34DF880067BF01 /* MyPageNoticeDetailController.swift */; }; - 081899222D34DF8E0067BF01 /* MyPageNoticeDetailReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899212D34DF8E0067BF01 /* MyPageNoticeDetailReactor.swift */; }; - 081899252D3500B80067BF01 /* FAQView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899242D3500B80067BF01 /* FAQView.swift */; }; - 081899272D3500BF0067BF01 /* FAQController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899262D3500BF0067BF01 /* FAQController.swift */; }; - 081899292D3500C50067BF01 /* FAQReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899282D3500C50067BF01 /* FAQReactor.swift */; }; - 0818992D2D3506240067BF01 /* FAQDropdownSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818992C2D3506240067BF01 /* FAQDropdownSectionCell.swift */; }; - 0818992F2D3506290067BF01 /* FAQDropdownSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818992E2D3506290067BF01 /* FAQDropdownSection.swift */; }; - 081899332D35F1090067BF01 /* MyPageBookmarkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899322D35F1090067BF01 /* MyPageBookmarkView.swift */; }; - 081899352D35F10F0067BF01 /* MyPageBookmarkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899342D35F10F0067BF01 /* MyPageBookmarkController.swift */; }; - 081899372D35F1140067BF01 /* MyPageBookmarkReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899362D35F1140067BF01 /* MyPageBookmarkReactor.swift */; }; - 081899392D35F11F0067BF01 /* MyPageRecentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899382D35F11F0067BF01 /* MyPageRecentView.swift */; }; - 0818993B2D35F1250067BF01 /* MyPageRecentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818993A2D35F1250067BF01 /* MyPageRecentController.swift */; }; - 0818993D2D35F12A0067BF01 /* MyPageRecentReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818993C2D35F12A0067BF01 /* MyPageRecentReactor.swift */; }; - 0818993F2D35FBE00067BF01 /* GetRecentPopUpResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818993E2D35FBE00067BF01 /* GetRecentPopUpResponseDTO.swift */; }; - 081899412D35FDA10067BF01 /* GetRecentPopUpResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899402D35FDA10067BF01 /* GetRecentPopUpResponse.swift */; }; - 081899452D35FEA10067BF01 /* RecentPopUpSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899442D35FEA10067BF01 /* RecentPopUpSection.swift */; }; - 0818994A2D36322B0067BF01 /* PopUpCardSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899492D36322B0067BF01 /* PopUpCardSection.swift */; }; - 0818994C2D3632320067BF01 /* PopUpCardSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818994B2D3632320067BF01 /* PopUpCardSectionCell.swift */; }; - 081899502D363E5C0067BF01 /* BookMarkPopUpViewTypeModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0818994F2D363E5C0067BF01 /* BookMarkPopUpViewTypeModalView.swift */; }; - 081899522D363E640067BF01 /* BookMarkPopUpViewTypeModalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899512D363E640067BF01 /* BookMarkPopUpViewTypeModalController.swift */; }; - 081899542D363E6A0067BF01 /* BookMarkPopUpViewTypeModalReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081899532D363E6A0067BF01 /* BookMarkPopUpViewTypeModalReactor.swift */; }; - 082197A12D426DCB0054094A /* Then in Frameworks */ = {isa = PBXBuildFile; productRef = 082197A02D426DCB0054094A /* Then */; }; - 082197A72D4E3EE00054094A /* CommentMyMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082197A62D4E3EE00054094A /* CommentMyMenuView.swift */; }; - 082197A92D4E3EE90054094A /* CommentMyMenuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082197A82D4E3EE90054094A /* CommentMyMenuController.swift */; }; - 082197AB2D4E3EEF0054094A /* CommentMyMenuReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082197AA2D4E3EEF0054094A /* CommentMyMenuReactor.swift */; }; - 082197AD2D4E49370054094A /* DeleteCommentRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082197AC2D4E49370054094A /* DeleteCommentRequestDTO.swift */; }; - 082197B02D4E4E190054094A /* NormalCommentEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082197AF2D4E4E190054094A /* NormalCommentEditView.swift */; }; - 082197B22D4E4E200054094A /* NormalCommentEditController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082197B12D4E4E200054094A /* NormalCommentEditController.swift */; }; - 082197B42D4E4E280054094A /* NormalCommentEditReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082197B32D4E4E280054094A /* NormalCommentEditReactor.swift */; }; - 083A25822CF361EF0099B58E /* BaseTabmanController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A257F2CF361EF0099B58E /* BaseTabmanController.swift */; }; - 083A25832CF361EF0099B58E /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25802CF361EF0099B58E /* BaseViewController.swift */; }; - 083A25992CF362090099B58E /* Sectionable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25932CF362090099B58E /* Sectionable.swift */; }; - 083A259A2CF362090099B58E /* SectionDecorationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25942CF362090099B58E /* SectionDecorationItem.swift */; }; - 083A259B2CF362090099B58E /* SectionSupplementaryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25952CF362090099B58E /* SectionSupplementaryItem.swift */; }; - 083A259C2CF362090099B58E /* InOutputable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25972CF362090099B58E /* InOutputable.swift */; }; - 083A25B22CF362670099B58E /* NetworkError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25A12CF362670099B58E /* NetworkError.swift */; }; - 083A25B32CF362670099B58E /* Requestable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25A22CF362670099B58E /* Requestable.swift */; }; - 083A25B42CF362670099B58E /* Responsable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25A32CF362670099B58E /* Responsable.swift */; }; - 083A25B52CF362670099B58E /* Endpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25A52CF362670099B58E /* Endpoint.swift */; }; - 083A25B62CF362670099B58E /* MultipartEndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25A62CF362670099B58E /* MultipartEndPoint.swift */; }; - 083A25B72CF362670099B58E /* RequestEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25A72CF362670099B58E /* RequestEndpoint.swift */; }; - 083A25B82CF362670099B58E /* IndicatorMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25A92CF362670099B58E /* IndicatorMaker.swift */; }; - 083A25B92CF362670099B58E /* FormDataInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25AB2CF362670099B58E /* FormDataInterceptor.swift */; }; - 083A25BA2CF362670099B58E /* TokenInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25AC2CF362670099B58E /* TokenInterceptor.swift */; }; - 083A25BB2CF362670099B58E /* Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25AE2CF362670099B58E /* Provider.swift */; }; - 083A25BC2CF362670099B58E /* ProviderImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25AF2CF362670099B58E /* ProviderImpl.swift */; }; - 083A25BF2CF362770099B58E /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25BD2CF362770099B58E /* Logger.swift */; }; - 083A25C82CF363C00099B58E /* LoginController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25C72CF363C00099B58E /* LoginController.swift */; }; - 083A25CA2CF363C60099B58E /* LoginReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25C92CF363C60099B58E /* LoginReactor.swift */; }; - 083A25CC2CF363CB0099B58E /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083A25CB2CF363CB0099B58E /* LoginView.swift */; }; - 083A25D02CF364B70099B58E /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 083A25CF2CF364B70099B58E /* Alamofire */; }; - 083C860B2D073A15003F441C /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C860A2D073A15003F441C /* DetailView.swift */; }; - 083C860D2D073A1C003F441C /* DetailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C860C2D073A1C003F441C /* DetailController.swift */; }; - 083C860F2D073A23003F441C /* DetailReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C860E2D073A23003F441C /* DetailReactor.swift */; }; - 083C861C2D087337003F441C /* GetPopUpDetailRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C861B2D087337003F441C /* GetPopUpDetailRequestDTO.swift */; }; - 083C861E2D08737F003F441C /* GetPopUpDetailResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C861D2D08737F003F441C /* GetPopUpDetailResponseDTO.swift */; }; - 083C86202D087445003F441C /* GetPopUpDetailResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C861F2D087445003F441C /* GetPopUpDetailResponse.swift */; }; - 083C86242D087A44003F441C /* DetailTitleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86232D087A44003F441C /* DetailTitleSection.swift */; }; - 083C86262D087A4E003F441C /* DetailTitleSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86252D087A4E003F441C /* DetailTitleSectionCell.swift */; }; - 083C86292D088080003F441C /* DetailContentSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86282D088080003F441C /* DetailContentSection.swift */; }; - 083C862B2D08808C003F441C /* DetailContentSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C862A2D08808C003F441C /* DetailContentSectionCell.swift */; }; - 083C86362D0C7EF4003F441C /* CommentSelectedController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86352D0C7EF4003F441C /* CommentSelectedController.swift */; }; - 083C86382D0C7EFC003F441C /* CommentSelectedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86372D0C7EFC003F441C /* CommentSelectedView.swift */; }; - 083C863A2D0C7F0A003F441C /* CommentSelectedReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86392D0C7F0A003F441C /* CommentSelectedReactor.swift */; }; - 083C863D2D0C8BC4003F441C /* NormalCommentAddController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C863C2D0C8BC4003F441C /* NormalCommentAddController.swift */; }; - 083C863F2D0C8BCE003F441C /* NormalCommentAddView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C863E2D0C8BCE003F441C /* NormalCommentAddView.swift */; }; - 083C86412D0C8BD8003F441C /* NormalCommentAddReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86402D0C8BD8003F441C /* NormalCommentAddReactor.swift */; }; - 083C86452D0DCDE9003F441C /* AddCommentTitleSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86442D0DCDE8003F441C /* AddCommentTitleSectionCell.swift */; }; - 083C86472D0DCDFB003F441C /* AddCommentTitleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86462D0DCDFB003F441C /* AddCommentTitleSection.swift */; }; - 083C864A2D0DCF96003F441C /* AddCommentDescriptionSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86492D0DCF96003F441C /* AddCommentDescriptionSection.swift */; }; - 083C864C2D0DCF9B003F441C /* AddCommentDescriptionSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C864B2D0DCF9B003F441C /* AddCommentDescriptionSectionCell.swift */; }; - 083C864F2D0DD3A6003F441C /* AddCommentImageSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C864E2D0DD3A6003F441C /* AddCommentImageSection.swift */; }; - 083C86512D0DD3AB003F441C /* AddCommentImageSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86502D0DD3AB003F441C /* AddCommentImageSectionCell.swift */; }; - 083C86542D0DD7E9003F441C /* AddCommentSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86532D0DD7E9003F441C /* AddCommentSection.swift */; }; - 083C86562D0DD7EE003F441C /* AddCommentSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86552D0DD7EE003F441C /* AddCommentSectionCell.swift */; }; - 083C86592D0DEFC3003F441C /* CommentCheckView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86582D0DEFC3003F441C /* CommentCheckView.swift */; }; - 083C865B2D0DEFCF003F441C /* CommentCheckController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C865A2D0DEFCF003F441C /* CommentCheckController.swift */; }; - 083C865D2D0DEFD5003F441C /* CommentCheckReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C865C2D0DEFD5003F441C /* CommentCheckReactor.swift */; }; - 083C86602D0EC496003F441C /* InstaCommentAddView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C865F2D0EC496003F441C /* InstaCommentAddView.swift */; }; - 083C86622D0EC49E003F441C /* InstaCommentAddController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86612D0EC49E003F441C /* InstaCommentAddController.swift */; }; - 083C86642D0EC4A5003F441C /* InstaCommentAddReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86632D0EC4A5003F441C /* InstaCommentAddReactor.swift */; }; - 083C86692D0ECB47003F441C /* InstaGuideSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86682D0ECB47003F441C /* InstaGuideSection.swift */; }; - 083C866B2D0ECB4F003F441C /* InstaGuideSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C866A2D0ECB4F003F441C /* InstaGuideSectionCell.swift */; }; - 083C866E2D0ECB87003F441C /* InstaGuideChildSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C866D2D0ECB87003F441C /* InstaGuideChildSection.swift */; }; - 083C86702D0ECB8E003F441C /* InstaGuideChildSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C866F2D0ECB8E003F441C /* InstaGuideChildSectionCell.swift */; }; - 083C86732D0EE2B1003F441C /* CommentAPIEndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86722D0EE2B1003F441C /* CommentAPIEndPoint.swift */; }; - 083C86762D0EE2CF003F441C /* PostCommentRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86752D0EE2CF003F441C /* PostCommentRequestDTO.swift */; }; - 083C86782D0EE382003F441C /* CommentAPIRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86772D0EE382003F441C /* CommentAPIRepository.swift */; }; - 083C867A2D0EE3BB003F441C /* CommentAPIUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083C86792D0EE3BB003F441C /* CommentAPIUseCaseImpl.swift */; }; - 0841BA802CF9F34100049E31 /* ImageBannerChildSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BA7F2CF9F34100049E31 /* ImageBannerChildSectionCell.swift */; }; - 0841BA822CF9F5DF00049E31 /* PreSignedService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BA812CF9F5DF00049E31 /* PreSignedService.swift */; }; - 0841BA872CF9F62400049E31 /* PreSignedURLDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BA842CF9F62300049E31 /* PreSignedURLDTO.swift */; }; - 0841BA882CF9F62400049E31 /* PresignedURLRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BA852CF9F62300049E31 /* PresignedURLRequestDTO.swift */; }; - 0841BA892CF9F62400049E31 /* PreSignedURLResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BA862CF9F62300049E31 /* PreSignedURLResponseDTO.swift */; }; - 0841BA8C2CF9F67100049E31 /* PreSignedAPIEndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BA8B2CF9F67100049E31 /* PreSignedAPIEndPoint.swift */; }; - 0841BA8E2CF9F8A100049E31 /* ImageBannerChildSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BA8D2CF9F8A100049E31 /* ImageBannerChildSection.swift */; }; - 0841BAA32CFA31A300049E31 /* SpacingSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAA22CFA31A300049E31 /* SpacingSection.swift */; }; - 0841BAA52CFA31A900049E31 /* SpacingSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAA42CFA31A900049E31 /* SpacingSectionCell.swift */; }; - 0841BAA82CFA354500049E31 /* HomeTitleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAA72CFA354500049E31 /* HomeTitleSection.swift */; }; - 0841BAAA2CFA354C00049E31 /* HomeTitleSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAA92CFA354C00049E31 /* HomeTitleSectionCell.swift */; }; - 0841BAAC2CFA35F300049E31 /* UILabel+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAAB2CFA35F300049E31 /* UILabel+.swift */; }; - 0841BAAF2CFA38EA00049E31 /* HomeCardSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAAE2CFA38EA00049E31 /* HomeCardSection.swift */; }; - 0841BAB12CFA38F500049E31 /* HomeCardSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAB02CFA38F500049E31 /* HomeCardSectionCell.swift */; }; - 0841BAB42CFABED700049E31 /* HomePopularCardSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAB32CFABED700049E31 /* HomePopularCardSection.swift */; }; - 0841BAB62CFABEDC00049E31 /* HomePopularCardSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAB52CFABEDC00049E31 /* HomePopularCardSectionCell.swift */; }; - 0841BAB82CFAC41300049E31 /* SectionBackGroundDecorationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAB72CFAC41300049E31 /* SectionBackGroundDecorationView.swift */; }; - 0841BABA2CFAE5BE00049E31 /* HomeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAB92CFAE5BE00049E31 /* HomeHeaderView.swift */; }; - 0841BABC2CFB59E200049E31 /* String?+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BABB2CFB59E200049E31 /* String?+.swift */; }; - 0841BABE2CFB5AA600049E31 /* Date?+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BABD2CFB5AA600049E31 /* Date?+.swift */; }; - 0841BAC32CFB600800049E31 /* TabbarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841BAC22CFB600800049E31 /* TabbarController.swift */; }; - 086DD8C82CFDEA9200B97D3B /* UIView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8C72CFDEA9200B97D3B /* UIView+.swift */; }; - 086DD8CC2CFDFEA800B97D3B /* HomeListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8CB2CFDFEA800B97D3B /* HomeListController.swift */; }; - 086DD8CE2CFDFEB000B97D3B /* HomeListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8CD2CFDFEB000B97D3B /* HomeListView.swift */; }; - 086DD8D02CFDFEB900B97D3B /* HomeListReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8CF2CFDFEB900B97D3B /* HomeListReactor.swift */; }; - 086DD8D32CFDFF1500B97D3B /* HomePopUpType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8D22CFDFF1500B97D3B /* HomePopUpType.swift */; }; - 086DD8D62CFF182100B97D3B /* UserAPIEndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8D52CFF182100B97D3B /* UserAPIEndPoint.swift */; }; - 086DD8D82CFF185200B97D3B /* PostBookmarkPopUpRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8D72CFF185200B97D3B /* PostBookmarkPopUpRequestDTO.swift */; }; - 086DD8DA2CFF194700B97D3B /* UserAPIRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8D92CFF194700B97D3B /* UserAPIRepositoryImpl.swift */; }; - 086DD8DE2CFF19C400B97D3B /* UserAPIUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8DD2CFF19C400B97D3B /* UserAPIUseCaseImpl.swift */; }; - 086DD8E02CFF2C3700B97D3B /* UIImageView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8DF2CFF2C3700B97D3B /* UIImageView+.swift */; }; - 086DD8E32CFF356300B97D3B /* HomeCardGridSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD8E22CFF356300B97D3B /* HomeCardGridSection.swift */; }; - 086DD92A2D0086AA00B97D3B /* SearchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD9292D0086AA00B97D3B /* SearchController.swift */; }; - 086DD92C2D0086B100B97D3B /* SearchReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD92B2D0086B100B97D3B /* SearchReactor.swift */; }; - 086DD92E2D0086B900B97D3B /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD92D2D0086B900B97D3B /* SearchView.swift */; }; - 086DD9302D0090E900B97D3B /* UITextField+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD92F2D0090E900B97D3B /* UITextField+.swift */; }; - 086DD9342D00962500B97D3B /* SearchTitleSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD9332D00962500B97D3B /* SearchTitleSectionCell.swift */; }; - 086DD9362D00963900B97D3B /* SearchTitleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD9352D00963900B97D3B /* SearchTitleSection.swift */; }; - 086DD93B2D009A1C00B97D3B /* CancelableTagSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD93A2D009A1C00B97D3B /* CancelableTagSection.swift */; }; - 086DD93D2D009A2600B97D3B /* CancelableTagSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD93C2D009A2600B97D3B /* CancelableTagSectionCell.swift */; }; - 086DD9402D01EEEB00B97D3B /* SearchCountTitleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD93F2D01EEEB00B97D3B /* SearchCountTitleSection.swift */; }; - 086DD9422D01EEF700B97D3B /* SearchCountTitleSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086DD9412D01EEF700B97D3B /* SearchCountTitleSectionCell.swift */; }; - 086F89C32D1E347700CA4FC9 /* CommentUserInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89C22D1E347700CA4FC9 /* CommentUserInfoView.swift */; }; - 086F89C52D1E347E00CA4FC9 /* CommentUserInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89C42D1E347E00CA4FC9 /* CommentUserInfoController.swift */; }; - 086F89C72D1E348400CA4FC9 /* CommentUserInfoReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89C62D1E348400CA4FC9 /* CommentUserInfoReactor.swift */; }; - 086F89CA2D1E42A700CA4FC9 /* CommentUserBlockView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89C92D1E42A700CA4FC9 /* CommentUserBlockView.swift */; }; - 086F89CC2D1E42B000CA4FC9 /* CommentUserBlockController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89CB2D1E42B000CA4FC9 /* CommentUserBlockController.swift */; }; - 086F89CE2D1E42B500CA4FC9 /* CommentUserBlockReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89CD2D1E42B500CA4FC9 /* CommentUserBlockReactor.swift */; }; - 086F89D02D1E60A100CA4FC9 /* PostUserBlockRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89CF2D1E60A100CA4FC9 /* PostUserBlockRequestDTO.swift */; }; - 086F89D32D1E6DA600CA4FC9 /* OtherUserCommentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89D22D1E6DA600CA4FC9 /* OtherUserCommentView.swift */; }; - 086F89D52D1E6DB100CA4FC9 /* OtherUserCommentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89D42D1E6DB100CA4FC9 /* OtherUserCommentController.swift */; }; - 086F89D72D1E6DB700CA4FC9 /* OtherUserCommentReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89D62D1E6DB700CA4FC9 /* OtherUserCommentReactor.swift */; }; - 086F89D92D1E79E200CA4FC9 /* GetOtherUserCommentListRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89D82D1E79E200CA4FC9 /* GetOtherUserCommentListRequestDTO.swift */; }; - 086F89DB2D1E7A6C00CA4FC9 /* GetOtherUserCommentedPopUpListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89DA2D1E7A6C00CA4FC9 /* GetOtherUserCommentedPopUpListResponseDTO.swift */; }; - 086F89E02D1E7CC700CA4FC9 /* GetOtherUserCommentedPopUpListResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89DF2D1E7CC700CA4FC9 /* GetOtherUserCommentedPopUpListResponse.swift */; }; - 086F89E42D1FE91300CA4FC9 /* OtherUserCommentSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89E32D1FE91300CA4FC9 /* OtherUserCommentSection.swift */; }; - 086F89E62D1FE91800CA4FC9 /* OtherUserCommentSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89E52D1FE91800CA4FC9 /* OtherUserCommentSectionCell.swift */; }; - 086F89EA2D2009E300CA4FC9 /* SubLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89E92D2009E300CA4FC9 /* SubLoginView.swift */; }; - 086F89EC2D2009EB00CA4FC9 /* SubLoginController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89EB2D2009EB00CA4FC9 /* SubLoginController.swift */; }; - 086F89EE2D2009F100CA4FC9 /* SubLoginReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89ED2D2009F100CA4FC9 /* SubLoginReactor.swift */; }; - 086F89F12D2269D800CA4FC9 /* MyPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89F02D2269D800CA4FC9 /* MyPageView.swift */; }; - 086F89F32D2269DE00CA4FC9 /* MyPageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89F22D2269DE00CA4FC9 /* MyPageController.swift */; }; - 086F89F52D2269E300CA4FC9 /* MyPageReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89F42D2269E300CA4FC9 /* MyPageReactor.swift */; }; - 086F89F72D226DF600CA4FC9 /* GetMyPageResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89F62D226DF600CA4FC9 /* GetMyPageResponseDTO.swift */; }; - 086F89F92D226EEB00CA4FC9 /* GetMyPageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F89F82D226EEB00CA4FC9 /* GetMyPageResponse.swift */; }; - 086F8A052D23CB3300CA4FC9 /* MyPageProfileSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F8A042D23CB3300CA4FC9 /* MyPageProfileSection.swift */; }; - 086F8A072D23CB3800CA4FC9 /* MyPageProfileSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F8A062D23CB3800CA4FC9 /* MyPageProfileSectionCell.swift */; }; - 086F8A0A2D2621EE00CA4FC9 /* MyPageMyCommentTitleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F8A092D2621EE00CA4FC9 /* MyPageMyCommentTitleSection.swift */; }; - 086F8A0C2D2621F400CA4FC9 /* MyPageMyCommentTitleSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F8A0B2D2621F400CA4FC9 /* MyPageMyCommentTitleSectionCell.swift */; }; - 086F8A0F2D26297900CA4FC9 /* MyPageCommentSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F8A0E2D26297900CA4FC9 /* MyPageCommentSection.swift */; }; - 086F8A112D26297D00CA4FC9 /* MyPageCommentSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F8A102D26297D00CA4FC9 /* MyPageCommentSectionCell.swift */; }; - 086F8A182D265C5F00CA4FC9 /* MyPageListSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F8A172D265C5F00CA4FC9 /* MyPageListSection.swift */; }; - 086F8A1A2D265C6300CA4FC9 /* MyPageListSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 086F8A192D265C6300CA4FC9 /* MyPageListSectionCell.swift */; }; - 088DE2442D104EE70030FA9E /* SwiftSoup in Frameworks */ = {isa = PBXBuildFile; productRef = 088DE2432D104EE70030FA9E /* SwiftSoup */; }; - 088DE24A2D12F3360030FA9E /* DetailInfoSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE2492D12F3360030FA9E /* DetailInfoSection.swift */; }; - 088DE24C2D12F33B0030FA9E /* DetailInfoSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE24B2D12F33B0030FA9E /* DetailInfoSectionCell.swift */; }; - 088DE24F2D13019A0030FA9E /* DetailCommentTitleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE24E2D13019A0030FA9E /* DetailCommentTitleSection.swift */; }; - 088DE2512D13019E0030FA9E /* DetailCommentTitleSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE2502D13019E0030FA9E /* DetailCommentTitleSectionCell.swift */; }; - 088DE2542D144A7E0030FA9E /* DetailCommentSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE2532D144A7E0030FA9E /* DetailCommentSection.swift */; }; - 088DE2562D144A830030FA9E /* DetailCommentSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE2552D144A830030FA9E /* DetailCommentSectionCell.swift */; }; - 088DE2582D144B0F0030FA9E /* DetailCommentProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE2572D144B0F0030FA9E /* DetailCommentProfileView.swift */; }; - 088DE25A2D1458620030FA9E /* DetailCommentImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE2592D1458620030FA9E /* DetailCommentImageCell.swift */; }; - 088DE25D2D145E3A0030FA9E /* DetailSimilarSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE25C2D145E3A0030FA9E /* DetailSimilarSection.swift */; }; - 088DE25F2D145E3F0030FA9E /* DetailSimilarSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088DE25E2D145E3F0030FA9E /* DetailSimilarSectionCell.swift */; }; - 089952422D031E650022AEF9 /* SearchSortedController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952412D031E650022AEF9 /* SearchSortedController.swift */; }; - 089952442D031E6D0022AEF9 /* SearchSortedReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952432D031E6D0022AEF9 /* SearchSortedReactor.swift */; }; - 089952462D031E740022AEF9 /* SearchSortedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952452D031E740022AEF9 /* SearchSortedView.swift */; }; - 089952492D033A1C0022AEF9 /* PopUpAPIEndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952482D033A1C0022AEF9 /* PopUpAPIEndPoint.swift */; }; - 0899524B2D033A9C0022AEF9 /* GetClosePopUpListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0899524A2D033A9C0022AEF9 /* GetClosePopUpListResponseDTO.swift */; }; - 0899524D2D033AA70022AEF9 /* GetOpenPopUpListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0899524C2D033AA70022AEF9 /* GetOpenPopUpListResponseDTO.swift */; }; - 0899524F2D033B5A0022AEF9 /* GetSearchPopUpListRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0899524E2D033B5A0022AEF9 /* GetSearchPopUpListRequestDTO.swift */; }; - 089952512D033C410022AEF9 /* GetSearchBottomPopUpListResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952502D033C410022AEF9 /* GetSearchBottomPopUpListResponse.swift */; }; - 089952532D033C940022AEF9 /* PopUpAPIRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952522D033C940022AEF9 /* PopUpAPIRepositoryImpl.swift */; }; - 089952552D033D480022AEF9 /* PopUpAPIUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952542D033D480022AEF9 /* PopUpAPIUseCaseImpl.swift */; }; - 089952582D0347AC0022AEF9 /* SearchCategoryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952572D0347AC0022AEF9 /* SearchCategoryController.swift */; }; - 0899525A2D0347B40022AEF9 /* SearchCategoryReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952592D0347B40022AEF9 /* SearchCategoryReactor.swift */; }; - 0899525C2D0347BD0022AEF9 /* SearchCategoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0899525B2D0347BD0022AEF9 /* SearchCategoryView.swift */; }; - 089952602D0366C40022AEF9 /* SearchMainController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0899525F2D0366C40022AEF9 /* SearchMainController.swift */; }; - 089952622D0366D30022AEF9 /* SearchMainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952612D0366D30022AEF9 /* SearchMainView.swift */; }; - 089952642D0366DA0022AEF9 /* SearchMainReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952632D0366DA0022AEF9 /* SearchMainReactor.swift */; }; - 089952662D046CCD0022AEF9 /* SearchResultController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952652D046CCD0022AEF9 /* SearchResultController.swift */; }; - 089952682D046CD80022AEF9 /* SearchResultReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952672D046CD80022AEF9 /* SearchResultReactor.swift */; }; - 0899526A2D046CDE0022AEF9 /* SearchResultView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952692D046CDE0022AEF9 /* SearchResultView.swift */; }; - 0899526C2D0473EC0022AEF9 /* GetSearchPopUpListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0899526B2D0473EC0022AEF9 /* GetSearchPopUpListResponseDTO.swift */; }; - 0899526E2D0474340022AEF9 /* GetSearchPopUpListResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0899526D2D0474340022AEF9 /* GetSearchPopUpListResponse.swift */; }; - 089952732D0475E90022AEF9 /* SearchResultCountSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952722D0475E90022AEF9 /* SearchResultCountSection.swift */; }; - 089952752D0475F20022AEF9 /* SearchResultCountSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089952742D0475F20022AEF9 /* SearchResultCountSectionCell.swift */; }; - 089B4FD82D9A57AE00FC0CC3 /* ImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089B4FD72D9A57AE00FC0CC3 /* ImageLoader.swift */; }; - 089B4FDF2D9A8F9A00FC0CC3 /* MemoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089B4FDE2D9A8F9A00FC0CC3 /* MemoryStorage.swift */; }; - 08A2E46C2D15BC5000102313 /* CommentLikeRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E46B2D15BC5000102313 /* CommentLikeRequestDTO.swift */; }; - 08A2E4792D1B06A300102313 /* ImageDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4782D1B06A300102313 /* ImageDetailView.swift */; }; - 08A2E47B2D1B06AA00102313 /* ImageDetailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E47A2D1B06AA00102313 /* ImageDetailController.swift */; }; - 08A2E47D2D1B06B000102313 /* ImageDetailReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E47C2D1B06B000102313 /* ImageDetailReactor.swift */; }; - 08A2E4802D1BCDE300102313 /* CommentDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E47F2D1BCDE300102313 /* CommentDetailView.swift */; }; - 08A2E4822D1BCDEA00102313 /* CommentDetailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4812D1BCDEA00102313 /* CommentDetailController.swift */; }; - 08A2E4842D1BCDEF00102313 /* CommentDetailReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4832D1BCDEF00102313 /* CommentDetailReactor.swift */; }; - 08A2E4862D1BD85C00102313 /* CommentDetailImageSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4852D1BD85C00102313 /* CommentDetailImageSection.swift */; }; - 08A2E48A2D1BDA8400102313 /* CommentDetailContentSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4892D1BDA8400102313 /* CommentDetailContentSection.swift */; }; - 08A2E48C2D1BDA8A00102313 /* CommentDetailContentSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E48B2D1BDA8A00102313 /* CommentDetailContentSectionCell.swift */; }; - 08A2E48F2D1BF6E500102313 /* CommentListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E48E2D1BF6E500102313 /* CommentListView.swift */; }; - 08A2E4912D1BF6EA00102313 /* CommentListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4902D1BF6EA00102313 /* CommentListController.swift */; }; - 08A2E4932D1BF6EF00102313 /* CommentListReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4922D1BF6EF00102313 /* CommentListReactor.swift */; }; - 08A2E4952D1C078300102313 /* GetPopUpCommentRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4942D1C078300102313 /* GetPopUpCommentRequestDTO.swift */; }; - 08A2E4972D1C07F500102313 /* GetPopUpCommentResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4962D1C07F500102313 /* GetPopUpCommentResponseDTO.swift */; }; - 08A2E4992D1C08D600102313 /* GetPopUpCommentResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E4982D1C08D600102313 /* GetPopUpCommentResponse.swift */; }; - 08A2E49D2D1C416800102313 /* CommentListTitleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E49C2D1C416800102313 /* CommentListTitleSection.swift */; }; - 08A2E49F2D1C417000102313 /* CommentListTitleSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A2E49E2D1C417000102313 /* CommentListTitleSectionCell.swift */; }; - 08B191372CF366680057BC04 /* UICollectionViewCell+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191342CF366670057BC04 /* UICollectionViewCell+.swift */; }; - 08B191382CF366680057BC04 /* UICollectionReusableView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191352CF366670057BC04 /* UICollectionReusableView+.swift */; }; - 08B191392CF366680057BC04 /* UITableViewCell+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191362CF366670057BC04 /* UITableViewCell+.swift */; }; - 08B1913B2CF366A00057BC04 /* UIApplication+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1913A2CF366A00057BC04 /* UIApplication+.swift */; }; - 08B1913F2CF367FA0057BC04 /* UIColor+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1913E2CF367FA0057BC04 /* UIColor+.swift */; }; - 08B191412CF367FF0057BC04 /* UIFont+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191402CF367FF0057BC04 /* UIFont+.swift */; }; - 08B1914B2CF41D690057BC04 /* GothicA1-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 08B191422CF41D680057BC04 /* GothicA1-Bold.ttf */; }; - 08B1914C2CF41D690057BC04 /* GothicA1-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 08B191432CF41D680057BC04 /* GothicA1-Light.ttf */; }; - 08B1914D2CF41D690057BC04 /* GothicA1-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 08B191442CF41D680057BC04 /* GothicA1-Medium.ttf */; }; - 08B1914E2CF41D690057BC04 /* GothicA1-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 08B191452CF41D680057BC04 /* GothicA1-Regular.ttf */; }; - 08B1914F2CF41D690057BC04 /* Poppins-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 08B191462CF41D680057BC04 /* Poppins-Bold.ttf */; }; - 08B191502CF41D690057BC04 /* Poppins-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 08B191472CF41D680057BC04 /* Poppins-Light.ttf */; }; - 08B191512CF41D690057BC04 /* Poppins-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 08B191482CF41D680057BC04 /* Poppins-Medium.ttf */; }; - 08B191522CF41D690057BC04 /* Poppins-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 08B191492CF41D680057BC04 /* Poppins-Regular.ttf */; }; - 08B191552CF41D6F0057BC04 /* PP_loading.json in Resources */ = {isa = PBXBuildFile; fileRef = 08B191532CF41D6F0057BC04 /* PP_loading.json */; }; - 08B191562CF41D6F0057BC04 /* PP_splash.json in Resources */ = {isa = PBXBuildFile; fileRef = 08B191542CF41D6F0057BC04 /* PP_splash.json */; }; - 08B191592CF41E610057BC04 /* SignUpMainController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191582CF41E610057BC04 /* SignUpMainController.swift */; }; - 08B1915B2CF41E690057BC04 /* SignUpMainReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1915A2CF41E690057BC04 /* SignUpMainReactor.swift */; }; - 08B1915D2CF41E6F0057BC04 /* SignUpMainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1915C2CF41E6F0057BC04 /* SignUpMainView.swift */; }; - 08B191612CF430E70057BC04 /* PPProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191602CF430E70057BC04 /* PPProgressView.swift */; }; - 08B191632CF430F30057BC04 /* PPProgressIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191622CF430F30057BC04 /* PPProgressIndicator.swift */; }; - 08B191672CF432220057BC04 /* PPCancelHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191662CF432220057BC04 /* PPCancelHeaderView.swift */; }; - 08B1916A2CF434B80057BC04 /* SignUpStep1Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191692CF434B80057BC04 /* SignUpStep1Controller.swift */; }; - 08B1916C2CF434C30057BC04 /* SignUpStep1View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1916B2CF434C30057BC04 /* SignUpStep1View.swift */; }; - 08B1916E2CF434CF0057BC04 /* SignUpStep1Reactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1916D2CF434CF0057BC04 /* SignUpStep1Reactor.swift */; }; - 08B191712CF4398D0057BC04 /* PPLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191702CF4398D0057BC04 /* PPLabel.swift */; }; - 08B191742CF43DF40057BC04 /* SignUpCheckBoxButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191732CF43DF40057BC04 /* SignUpCheckBoxButton.swift */; }; - 08B191762CF440C40057BC04 /* PPButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191752CF440C40057BC04 /* PPButton.swift */; }; - 08B191782CF442230057BC04 /* UIImage+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191772CF442230057BC04 /* UIImage+.swift */; }; - 08B1917A2CF452B30057BC04 /* SignUpTermsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191792CF452B30057BC04 /* SignUpTermsView.swift */; }; - 08B1917D2CF46DE30057BC04 /* TermsDetailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1917C2CF46DE30057BC04 /* TermsDetailController.swift */; }; - 08B1917F2CF46DF20057BC04 /* TermsDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1917E2CF46DF20057BC04 /* TermsDetailView.swift */; }; - 08B191822CF48A7B0057BC04 /* SignUpStep2Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191812CF48A7B0057BC04 /* SignUpStep2Controller.swift */; }; - 08B191842CF48A820057BC04 /* SignUpStep2View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191832CF48A820057BC04 /* SignUpStep2View.swift */; }; - 08B191862CF48A8B0057BC04 /* SignUpStep2Reactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191852CF48A8B0057BC04 /* SignUpStep2Reactor.swift */; }; - 08B191882CF48FAE0057BC04 /* NickNameState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191872CF48FAE0057BC04 /* NickNameState.swift */; }; - 08B1918D2CF49FF70057BC04 /* SignUpStep3View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1918C2CF49FF70057BC04 /* SignUpStep3View.swift */; }; - 08B1918F2CF4A0020057BC04 /* SignUpStep3Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1918E2CF4A0020057BC04 /* SignUpStep3Controller.swift */; }; - 08B191912CF4A00E0057BC04 /* SignUpStep3Reactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191902CF4A00E0057BC04 /* SignUpStep3Reactor.swift */; }; - 08B191942CF4A0F00057BC04 /* SignUpStep4View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191932CF4A0F00057BC04 /* SignUpStep4View.swift */; }; - 08B191962CF4A0FA0057BC04 /* SignUpStep4Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191952CF4A0FA0057BC04 /* SignUpStep4Controller.swift */; }; - 08B191982CF4A1010057BC04 /* SignUpStep4Reactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191972CF4A1010057BC04 /* SignUpStep4Reactor.swift */; }; - 08B1919C2CF4A77C0057BC04 /* TagSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1919B2CF4A77C0057BC04 /* TagSection.swift */; }; - 08B1919E2CF4A7830057BC04 /* TagSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1919D2CF4A7830057BC04 /* TagSectionCell.swift */; }; - 08B191A02CF4AA0E0057BC04 /* Reactive+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B1919F2CF4AA0E0057BC04 /* Reactive+.swift */; }; - 08B191A22CF4AE890057BC04 /* ToastMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191A12CF4AE890057BC04 /* ToastMaker.swift */; }; - 08B191A42CF5A7030057BC04 /* PPSegmentedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191A32CF5A7030057BC04 /* PPSegmentedControl.swift */; }; - 08B191A72CF5A9430057BC04 /* AgeSelectedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191A62CF5A9430057BC04 /* AgeSelectedButton.swift */; }; - 08B191AC2CF5BF9D0057BC04 /* AgeSelectedController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191AB2CF5BF9D0057BC04 /* AgeSelectedController.swift */; }; - 08B191AE2CF5BFA60057BC04 /* AgeSelectedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191AD2CF5BFA60057BC04 /* AgeSelectedView.swift */; }; - 08B191B02CF5BFAE0057BC04 /* AgeSelectedReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191AF2CF5BFAE0057BC04 /* AgeSelectedReactor.swift */; }; - 08B191B22CF5C0A60057BC04 /* PPPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191B12CF5C0A60057BC04 /* PPPicker.swift */; }; - 08B191B42CF609260057BC04 /* KakaoLoginService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191B32CF609260057BC04 /* KakaoLoginService.swift */; }; - 08B191B62CF6092B0057BC04 /* AppleLoginService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191B52CF6092B0057BC04 /* AppleLoginService.swift */; }; - 08B191B82CF6092F0057BC04 /* AuthServiceable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191B72CF6092F0057BC04 /* AuthServiceable.swift */; }; - 08B191C22CF615CA0057BC04 /* KeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B191C12CF615CA0057BC04 /* KeyPath.swift */; }; - 08CBEA032D38989E00248007 /* PostTokenReissueResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CBEA022D38989E00248007 /* PostTokenReissueResponseDTO.swift */; }; - 08CBEA062D38991600248007 /* PostTokenReissueResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CBEA052D38991600248007 /* PostTokenReissueResponse.swift */; }; - 08CBEA0B2D38DBD600248007 /* LastLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CBEA0A2D38DBD600248007 /* LastLoginView.swift */; }; - 08CBEA0D2D38ED0D00248007 /* CountButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CBEA0C2D38ED0D00248007 /* CountButtonView.swift */; }; - 08CBEA3A2D3FABE100248007 /* ToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CBEA392D3FABE100248007 /* ToastView.swift */; }; - 08CBEA3C2D3FABED00248007 /* BookMarkToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CBEA3B2D3FABED00248007 /* BookMarkToastView.swift */; }; - 08CBEA3E2D3FF6A100248007 /* PopUpCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CBEA3D2D3FF6A100248007 /* PopUpCardView.swift */; }; - 08CFD3922D9BDE99004CDD50 /* DiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CFD3912D9BDE99004CDD50 /* DiskStorage.swift */; }; - 08DC61F32CF75037002A2F44 /* KeyChainService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC61F22CF75037002A2F44 /* KeyChainService.swift */; }; - 08DC61F52CF765B5002A2F44 /* UserDefaultService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC61F42CF765B5002A2F44 /* UserDefaultService.swift */; }; - 08DC61F82CF76843002A2F44 /* SignUpCompleteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC61F72CF76843002A2F44 /* SignUpCompleteView.swift */; }; - 08DC61FA2CF7684F002A2F44 /* SignUpCompleteController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC61F92CF7684F002A2F44 /* SignUpCompleteController.swift */; }; - 08DC61FC2CF76862002A2F44 /* SignUpCompleteReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC61FB2CF76862002A2F44 /* SignUpCompleteReactor.swift */; }; - 08DC62032CF8AC06002A2F44 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC62022CF8AC06002A2F44 /* HomeView.swift */; }; - 08DC62052CF8AC0E002A2F44 /* HomeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC62042CF8AC0E002A2F44 /* HomeController.swift */; }; - 08DC62072CF8AC14002A2F44 /* HomeReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC62062CF8AC14002A2F44 /* HomeReactor.swift */; }; - 08DC620B2CF8AE0F002A2F44 /* ImageBannerSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC620A2CF8AE0F002A2F44 /* ImageBannerSection.swift */; }; - 08DC620D2CF8AE16002A2F44 /* ImageBannerSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC620C2CF8AE16002A2F44 /* ImageBannerSectionCell.swift */; }; - 08DC62112CF8B446002A2F44 /* SortedRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DC62102CF8B446002A2F44 /* SortedRequestDTO.swift */; }; - 08DE8A0D2D5236840049BCAC /* PutCommentRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DE8A0C2D5236840049BCAC /* PutCommentRequestDTO.swift */; }; - 08DE8A102D5255110049BCAC /* DetailEmptyCommetSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DE8A0F2D5255110049BCAC /* DetailEmptyCommetSection.swift */; }; - 08DE8A122D5255180049BCAC /* DetailEmptyCommetSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DE8A112D5255180049BCAC /* DetailEmptyCommetSectionCell.swift */; }; - 08DE8A182D525BA20049BCAC /* Terms.plist in Resources */ = {isa = PBXBuildFile; fileRef = 08DE8A172D525BA20049BCAC /* Terms.plist */; }; - 08DE8A1B2D5261DE0049BCAC /* MyPageTermsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DE8A1A2D5261DE0049BCAC /* MyPageTermsController.swift */; }; - 08DE8A1D2D5261E70049BCAC /* MyPageTermsReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DE8A1C2D5261E70049BCAC /* MyPageTermsReactor.swift */; }; - 08DE8A3F2D54DCC40049BCAC /* MyCommentedPopUpGridSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DE8A3E2D54DCC40049BCAC /* MyCommentedPopUpGridSection.swift */; }; - 08DE8A412D54DCCA0049BCAC /* MyCommentedPopUpGridSectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DE8A402D54DCCA0049BCAC /* MyCommentedPopUpGridSectionCell.swift */; }; + 0522C1D92DB67C5900B141FF /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0522C1D82DB67C5900B141FF /* RxSwift */; }; + 0522C3C62DB67D7800B141FF /* RxGesture in Frameworks */ = {isa = PBXBuildFile; productRef = 0522C3C52DB67D7800B141FF /* RxGesture */; }; + 05BDD3D62DB66E1700C1E192 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05BDD3D52DB66E1700C1E192 /* DomainInterface.framework */; }; + 05BDD3D72DB66E1700C1E192 /* DomainInterface.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05BDD3D52DB66E1700C1E192 /* DomainInterface.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 05C1D60B2DB53A4900508FFD /* Data.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D6072DB53A4900508FFD /* Data.framework */; }; + 05C1D60C2DB53A4900508FFD /* Data.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D6072DB53A4900508FFD /* Data.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 05C1D60D2DB53A4900508FFD /* Domain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D6082DB53A4900508FFD /* Domain.framework */; }; + 05C1D60E2DB53A4900508FFD /* Domain.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D6082DB53A4900508FFD /* Domain.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 05C1D60F2DB53A4900508FFD /* Infrastructure.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D6092DB53A4900508FFD /* Infrastructure.framework */; }; + 05C1D6102DB53A4900508FFD /* Infrastructure.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D6092DB53A4900508FFD /* Infrastructure.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 05C1D6112DB53A4900508FFD /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D60A2DB53A4900508FFD /* Presentation.framework */; }; + 05C1D6122DB53A4900508FFD /* Presentation.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D60A2DB53A4900508FFD /* Presentation.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 4E15142A2D99480200DFD08F /* NMapsMap in Frameworks */ = {isa = PBXBuildFile; productRef = 4E1514292D99480200DFD08F /* NMapsMap */; }; - 4E15142C2D994A3A00DFD08F /* KakaoSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 4E15142B2D994A3A00DFD08F /* KakaoSDK */; }; 4E15142E2D994A3A00DFD08F /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 4E15142D2D994A3A00DFD08F /* KakaoSDKAuth */; }; 4E1514302D994A3A00DFD08F /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 4E15142F2D994A3A00DFD08F /* KakaoSDKCommon */; }; - 4E5825672D1951DF00EE83EF /* FloatingPanel in Frameworks */ = {isa = PBXBuildFile; productRef = 4E5825662D1951DF00EE83EF /* FloatingPanel */; }; - 4E643FC12D738D7F0046AF29 /* PopUpStoreRegisterReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E643FC02D738D7F0046AF29 /* PopUpStoreRegisterReactor.swift */; }; - 4E643FC32D738D930046AF29 /* PopUpStoreRegisterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E643FC22D738D930046AF29 /* PopUpStoreRegisterView.swift */; }; - 4E685ECE2D12CEB6001EF91C /* BalloonBackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EAA2D12CEB6001EF91C /* BalloonBackgroundView.swift */; }; - 4E685ECF2D12CEB6001EF91C /* BalloonChipCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EAB2D12CEB6001EF91C /* BalloonChipCell.swift */; }; - 4E685ED12D12CEB6001EF91C /* FilterBottomSheetReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EAD2D12CEB6001EF91C /* FilterBottomSheetReactor.swift */; }; - 4E685ED22D12CEB6001EF91C /* FilterBottomSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EAE2D12CEB6001EF91C /* FilterBottomSheetView.swift */; }; - 4E685ED32D12CEB6001EF91C /* FilterBottomSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EAF2D12CEB6001EF91C /* FilterBottomSheetViewController.swift */; }; - 4E685ED42D12CEB6001EF91C /* FilterCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EB02D12CEB6001EF91C /* FilterCell.swift */; }; - 4E685ED52D12CEB6001EF91C /* FilterChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EB12D12CEB6001EF91C /* FilterChip.swift */; }; - 4E685ED62D12CEB6001EF91C /* FilterChipsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EB22D12CEB6001EF91C /* FilterChipsView.swift */; }; - 4E685ED92D12CEB6001EF91C /* MapRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EB62D12CEB6001EF91C /* MapRepository.swift */; }; - 4E685EDA2D12CEB6001EF91C /* MapUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EB82D12CEB6001EF91C /* MapUseCase.swift */; }; - 4E685EDB2D12CEB6001EF91C /* MapAPIEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EBA2D12CEB6001EF91C /* MapAPIEndpoint.swift */; }; - 4E685EDD2D12CEB6001EF91C /* MapPopUpStoreDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EBC2D12CEB6001EF91C /* MapPopUpStoreDTO.swift */; }; - 4E685EDE2D12CEB6001EF91C /* MapPopupCarouselView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EBE2D12CEB6001EF91C /* MapPopupCarouselView.swift */; }; - 4E685EDF2D12CEB6001EF91C /* PopupCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EBF2D12CEB6001EF91C /* PopupCardCell.swift */; }; - 4E685EE02D12CEB6001EF91C /* StoreListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EC12D12CEB6001EF91C /* StoreListCell.swift */; }; - 4E685EE12D12CEB6001EF91C /* StoreListReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EC22D12CEB6001EF91C /* StoreListReactor.swift */; }; - 4E685EE22D12CEB6001EF91C /* StoreListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EC32D12CEB6001EF91C /* StoreListView.swift */; }; - 4E685EE32D12CEB6001EF91C /* StoreListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EC42D12CEB6001EF91C /* StoreListViewController.swift */; }; - 4E685EE42D12CEB6001EF91C /* MapFilterChips.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EC62D12CEB6001EF91C /* MapFilterChips.swift */; }; - 4E685EE52D12CEB6001EF91C /* MapMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EC72D12CEB6001EF91C /* MapMarker.swift */; }; - 4E685EE62D12CEB6001EF91C /* MapReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EC82D12CEB6001EF91C /* MapReactor.swift */; }; - 4E685EE72D12CEB6001EF91C /* MapSearchInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EC92D12CEB6001EF91C /* MapSearchInput.swift */; }; - 4E685EE92D12CEB6001EF91C /* MapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685ECB2D12CEB6001EF91C /* MapView.swift */; }; - 4E685EEA2D12CEB6001EF91C /* MapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685ECC2D12CEB6001EF91C /* MapViewController.swift */; }; - 4E6A06702D42A96100B2A658 /* FullScreenMapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6A066F2D42A96100B2A658 /* FullScreenMapViewController.swift */; }; - 4E6C07062D4B6E56008A962A /* RegionDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6C07052D4B6E56008A962A /* RegionDefinitions.swift */; }; - 4E6C07082D4B6E74008A962A /* ClusteringModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6C07072D4B6E74008A962A /* ClusteringModels.swift */; }; - 4E6C070A2D4B6E81008A962A /* ClusteringManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6C07092D4B6E81008A962A /* ClusteringManager.swift */; }; - 4E6CA4852D34D6ED0034D09A /* AdminBottomSheetReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6CA4842D34D6ED0034D09A /* AdminBottomSheetReactor.swift */; }; - 4E755B1D2D2B9AD300ADFB21 /* GetAdminPopUpStoreListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B1C2D2B9AD300ADFB21 /* GetAdminPopUpStoreListResponseDTO.swift */; }; - 4E755B1F2D2B9AE500ADFB21 /* AdminAPIEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B1E2D2B9AE500ADFB21 /* AdminAPIEndpoint.swift */; }; - 4E755B212D2B9BAB00ADFB21 /* AdminResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B202D2B9BAB00ADFB21 /* AdminResponseDTO.swift */; }; - 4E755B232D2B9C5D00ADFB21 /* AdminViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B222D2B9C5D00ADFB21 /* AdminViewController.swift */; }; - 4E755B252D2B9C6C00ADFB21 /* AdminView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B242D2B9C6C00ADFB21 /* AdminView.swift */; }; - 4E755B292D2BA65A00ADFB21 /* AdminReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B282D2BA65A00ADFB21 /* AdminReactor.swift */; }; - 4E755B2B2D2BA76E00ADFB21 /* AdminUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B2A2D2BA76E00ADFB21 /* AdminUseCase.swift */; }; - 4E7823A82D2E84E800AC5110 /* AdminRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B2E2D2BA7FB00ADFB21 /* AdminRepository.swift */; }; - 4E7823A92D2E84FB00AC5110 /* AdminStoreCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B262D2B9C7C00ADFB21 /* AdminStoreCell.swift */; }; - 4E78706E2D37CB1900465FC9 /* ProfileEditListButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081898BF2D2FBD130067BF01 /* ProfileEditListButton.swift */; }; - 4E78706F2D37CB2200465FC9 /* PopUpStoreRegisterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E9C12802D2BE0A6006744D6 /* PopUpStoreRegisterViewController.swift */; }; - 4E8AA29D2D59A2340029DF75 /* MarkerTooltipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8AA29C2D59A2340029DF75 /* MarkerTooltipView.swift */; }; - 4E9790C52D40E13500210499 /* MapGuideViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E9790C42D40E13500210499 /* MapGuideViewController.swift */; }; - 4E9A46602D55D1270010578A /* MapUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E9A465F2D55D1270010578A /* MapUtilities.swift */; }; - 4E9C12782D2BC7A0006744D6 /* AdminBottomSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E9C12772D2BC7A0006744D6 /* AdminBottomSheetView.swift */; }; - 4E9C127A2D2BC811006744D6 /* AdminBottomSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E9C12792D2BC811006744D6 /* AdminBottomSheetViewController.swift */; }; - 4EA2C93D2D424D3300F4D97C /* MapDirectionRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA2C93C2D424D3300F4D97C /* MapDirectionRepository.swift */; }; - 4EA2C93F2D424D7400F4D97C /* MapDirectionUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA2C93E2D424D7400F4D97C /* MapDirectionUseCase.swift */; }; - 4EA2C9412D424D8400F4D97C /* GetPopUpDirectionResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA2C9402D424D8400F4D97C /* GetPopUpDirectionResponseDTO.swift */; }; - 4EA2C9432D424DF900F4D97C /* FindDirectionEndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA2C9422D424DF900F4D97C /* FindDirectionEndPoint.swift */; }; - 4EA9989A2D21C2FC009DC30B /* StoreListSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA998992D21C2FC009DC30B /* StoreListSection.swift */; }; - 4EA9989D2D21C404009DC30B /* RxDataSources in Frameworks */ = {isa = PBXBuildFile; productRef = 4EA9989C2D21C404009DC30B /* RxDataSources */; }; - 4EAB809D2D3F78AA0041AF30 /* NMFMapViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EAB809C2D3F78AA0041AF30 /* NMFMapViewDelegateProxy.swift */; }; - 4EAB809F2D3F8EF50041AF30 /* ViewportBounds.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EAB809E2D3F8EF50041AF30 /* ViewportBounds.swift */; }; - 4EDDEFB42D2D285900CFAFA5 /* DateTimePickerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EDDEFB32D2D285900CFAFA5 /* DateTimePickerManager.swift */; }; - 4EDE57032D5E70650014D924 /* LocationPermissionBottomSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EDE57022D5E70650014D924 /* LocationPermissionBottomSheet.swift */; }; 4EE360FD2D91876300D2441D /* NMapsMap in Frameworks */ = {isa = PBXBuildFile; productRef = 4EE360FC2D91876300D2441D /* NMapsMap */; }; - 4EE5A3D32D40E4A600A2469A /* MapGuideReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE5A3D22D40E4A600A2469A /* MapGuideReactor.swift */; }; - 4EEA13072DA7CDDA00775256 /* PopUpImagesCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EEA13062DA7CDDA00775256 /* PopUpImagesCollectionView.swift */; }; - 4EEA1D8F2D352012003E7DE9 /* ImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EEA1D8E2D352012003E7DE9 /* ImageCell.swift */; }; - 4EEA1D912D352027003E7DE9 /* ExtendedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EEA1D902D352027003E7DE9 /* ExtendedImage.swift */; }; - 4EECA3942D56770B00A07CCA /* MapPopUpStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E685EBB2D12CEB6001EF91C /* MapPopUpStore.swift */; }; - 4EED9BAC2D22730400B288E7 /* FilterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EED9BAB2D22730400B288E7 /* FilterType.swift */; }; - BD226D512CF6DB290038C984 /* PPReturnHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD226D502CF6DB290038C984 /* PPReturnHeaderView.swift */; }; - BD9103612CF6149D00BBCCAE /* AuthAPIEndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD91034E2CF6149D00BBCCAE /* AuthAPIEndPoint.swift */; }; - BD9103622CF6149D00BBCCAE /* LoginResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD91034F2CF6149D00BBCCAE /* LoginResponseDTO.swift */; }; - BD9103632CF6149D00BBCCAE /* BannerPopUpStoreDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103512CF6149D00BBCCAE /* BannerPopUpStoreDTO.swift */; }; - BD9103642CF6149D00BBCCAE /* GetHomeInfoResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103522CF6149D00BBCCAE /* GetHomeInfoResponseDTO.swift */; }; - BD9103652CF6149D00BBCCAE /* HomeAPIEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103532CF6149D00BBCCAE /* HomeAPIEndpoint.swift */; }; - BD9103662CF6149D00BBCCAE /* PopUpStoreResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103542CF6149D00BBCCAE /* PopUpStoreResponseDTO.swift */; }; - BD9103682CF6149D00BBCCAE /* AuthAPIRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103572CF6149D00BBCCAE /* AuthAPIRepositoryImpl.swift */; }; - BD9103692CF6149D00BBCCAE /* HomeAPIRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103582CF6149D00BBCCAE /* HomeAPIRepository.swift */; }; - BD91036A2CF6149D00BBCCAE /* SignUpRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103592CF6149D00BBCCAE /* SignUpRepositoryImpl.swift */; }; - BD91036B2CF6149D00BBCCAE /* CheckNickNameRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD91035B2CF6149D00BBCCAE /* CheckNickNameRequestDTO.swift */; }; - BD91036C2CF6149D00BBCCAE /* GetCategoryListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD91035C2CF6149D00BBCCAE /* GetCategoryListResponseDTO.swift */; }; - BD91036D2CF6149D00BBCCAE /* SignUpAPIEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD91035D2CF6149D00BBCCAE /* SignUpAPIEndpoint.swift */; }; - BD91036E2CF6149D00BBCCAE /* SignUpRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD91035E2CF6149D00BBCCAE /* SignUpRequestDTO.swift */; }; - BD9103812CF614A900BBCCAE /* HomeAPIUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103702CF614A900BBCCAE /* HomeAPIUseCaseImpl.swift */; }; - BD9103832CF614A900BBCCAE /* SignUpAPIUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103722CF614A900BBCCAE /* SignUpAPIUseCaseImpl.swift */; }; - BD9103852CF614A900BBCCAE /* AuthAPIUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103742CF614A900BBCCAE /* AuthAPIUseCaseImpl.swift */; }; - BD9103862CF614A900BBCCAE /* BannerPopUpStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103762CF614A900BBCCAE /* BannerPopUpStore.swift */; }; - BD9103872CF614A900BBCCAE /* Category.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103772CF614A900BBCCAE /* Category.swift */; }; - BD9103882CF614A900BBCCAE /* GetHomeInfoResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103782CF614A900BBCCAE /* GetHomeInfoResponse.swift */; }; - BD9103892CF614A900BBCCAE /* PopUpStoreResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103792CF614A900BBCCAE /* PopUpStoreResponse.swift */; }; - BD91038A2CF614A900BBCCAE /* LoginResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD91037A2CF614A900BBCCAE /* LoginResponse.swift */; }; - BD91038B2CF614A900BBCCAE /* AuthRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD91037C2CF614A900BBCCAE /* AuthRepository.swift */; }; - BD9103922CF6166800BBCCAE /* SplashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD91038E2CF6166800BBCCAE /* SplashView.swift */; }; - BD9103932CF6166800BBCCAE /* SplashController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD9103902CF6166800BBCCAE /* SplashController.swift */; }; - BDCA41C12CF35AC0005EECF6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDCA41C02CF35AC0005EECF6 /* AppDelegate.swift */; }; - BDCA41C32CF35AC0005EECF6 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDCA41C22CF35AC0005EECF6 /* SceneDelegate.swift */; }; - BDCA41CA2CF35AC1005EECF6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BDCA41C92CF35AC1005EECF6 /* Assets.xcassets */; }; - BDCA41CD2CF35AC1005EECF6 /* Base in Resources */ = {isa = PBXBuildFile; fileRef = BDCA41CC2CF35AC1005EECF6 /* Base */; }; - BDCA41F22CF35D0D005EECF6 /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = BDCA41F12CF35D0D005EECF6 /* SnapKit */; }; - BDCA41F82CF35D9A005EECF6 /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = BDCA41F72CF35D9A005EECF6 /* RxSwift */; }; - BDCA41FE2CF35EE7005EECF6 /* ReactorKit in Frameworks */ = {isa = PBXBuildFile; productRef = BDCA41FD2CF35EE7005EECF6 /* ReactorKit */; }; - BDCA42012CF35EFE005EECF6 /* RxKeyboard in Frameworks */ = {isa = PBXBuildFile; productRef = BDCA42002CF35EFE005EECF6 /* RxKeyboard */; }; - BDCA42042CF35F76005EECF6 /* PanModal in Frameworks */ = {isa = PBXBuildFile; productRef = BDCA42032CF35F76005EECF6 /* PanModal */; }; - BDCA42072CF35FA6005EECF6 /* Tabman in Frameworks */ = {isa = PBXBuildFile; productRef = BDCA42062CF35FA6005EECF6 /* Tabman */; }; - BDCA420A2CF35FB1005EECF6 /* Pageboy in Frameworks */ = {isa = PBXBuildFile; productRef = BDCA42092CF35FB1005EECF6 /* Pageboy */; }; - BDCA420D2CF35FD2005EECF6 /* RxGesture in Frameworks */ = {isa = PBXBuildFile; productRef = BDCA420C2CF35FD2005EECF6 /* RxGesture */; }; - BDCA42102CF35FF5005EECF6 /* Lottie in Frameworks */ = {isa = PBXBuildFile; productRef = BDCA420F2CF35FF5005EECF6 /* Lottie */; }; /* End PBXBuildFile section */ -/* Begin PBXFileReference section */ - 05229DD02D99519200D88E73 /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = ""; }; - 057151572D9D2E0800260615 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 0818988D2D295DC30067BF01 /* MyPageLogoutSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageLogoutSection.swift; sourceTree = ""; }; - 0818988F2D295DC80067BF01 /* MyPageLogoutSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageLogoutSectionCell.swift; sourceTree = ""; }; - 081898932D2965C20067BF01 /* ProfileEditController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileEditController.swift; sourceTree = ""; }; - 081898952D2965C90067BF01 /* ProfileEditView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileEditView.swift; sourceTree = ""; }; - 081898972D2965D20067BF01 /* ProfileEditReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileEditReactor.swift; sourceTree = ""; }; - 0818989B2D2BAA570067BF01 /* WithdrawlCheckModalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlCheckModalView.swift; sourceTree = ""; }; - 0818989D2D2BAA610067BF01 /* WithdrawlCheckModalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlCheckModalController.swift; sourceTree = ""; }; - 0818989F2D2BAA670067BF01 /* WithdrawlCheckModalReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlCheckModalReactor.swift; sourceTree = ""; }; - 081898A22D2CC0110067BF01 /* WithdrawlReasonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlReasonView.swift; sourceTree = ""; }; - 081898A42D2CC0180067BF01 /* WithdrawlReasonController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlReasonController.swift; sourceTree = ""; }; - 081898A62D2CC01D0067BF01 /* WithdrawlReasonReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlReasonReactor.swift; sourceTree = ""; }; - 081898A92D2CEA2F0067BF01 /* WithdrawlCheckSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlCheckSectionCell.swift; sourceTree = ""; }; - 081898AB2D2CEA940067BF01 /* WithdrawlCheckSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlCheckSection.swift; sourceTree = ""; }; - 081898AD2D2CFC230067BF01 /* GetWithdrawlListResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetWithdrawlListResponseDTO.swift; sourceTree = ""; }; - 081898AF2D2CFCA40067BF01 /* GetWithdrawlListResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetWithdrawlListResponse.swift; sourceTree = ""; }; - 081898B22D2D20D70067BF01 /* WithdrawlCompleteView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlCompleteView.swift; sourceTree = ""; }; - 081898B42D2D20E30067BF01 /* WithdrawlCompleteController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawlCompleteController.swift; sourceTree = ""; }; - 081898B62D2D23A90067BF01 /* UINavigationController+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationController+.swift"; sourceTree = ""; }; - 081898B92D2E5F4C0067BF01 /* MyCommentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCommentView.swift; sourceTree = ""; }; - 081898BB2D2E5F510067BF01 /* MyCommentReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCommentReactor.swift; sourceTree = ""; }; - 081898BD2D2E5F590067BF01 /* MyCommentController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCommentController.swift; sourceTree = ""; }; - 081898BF2D2FBD130067BF01 /* ProfileEditListButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileEditListButton.swift; sourceTree = ""; }; - 081898C22D30AE2C0067BF01 /* GetMyProfileResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetMyProfileResponseDTO.swift; sourceTree = ""; }; - 081898C42D30AEF40067BF01 /* GetMyProfileResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetMyProfileResponse.swift; sourceTree = ""; }; - 081898C92D30D5BA0067BF01 /* InfoEditModalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoEditModalView.swift; sourceTree = ""; }; - 081898CB2D30D5BF0067BF01 /* InfoEditModalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoEditModalController.swift; sourceTree = ""; }; - 081898CD2D30D5C60067BF01 /* InfoEditModalReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoEditModalReactor.swift; sourceTree = ""; }; - 081898CF2D30EA900067BF01 /* PutUserTailoredInfoRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PutUserTailoredInfoRequestDTO.swift; sourceTree = ""; }; - 081898D12D30F57D0067BF01 /* CategoryEditModalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategoryEditModalView.swift; sourceTree = ""; }; - 081898D32D30F5840067BF01 /* CategoryEditModalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategoryEditModalController.swift; sourceTree = ""; }; - 081898D52D30F58A0067BF01 /* CategoryEditModalReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategoryEditModalReactor.swift; sourceTree = ""; }; - 081898D72D310C160067BF01 /* PutUserCategoryRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PutUserCategoryRequestDTO.swift; sourceTree = ""; }; - 081898D92D32559B0067BF01 /* PutUserProfileRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PutUserProfileRequestDTO.swift; sourceTree = ""; }; - 081898DB2D326DC10067BF01 /* IntroState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroState.swift; sourceTree = ""; }; - 081898DF2D338F9C0067BF01 /* ListCountButtonSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListCountButtonSection.swift; sourceTree = ""; }; - 081898E12D338FA40067BF01 /* ListCountButtonSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListCountButtonSectionCell.swift; sourceTree = ""; }; - 081898E32D3391550067BF01 /* GetMyCommentedPopUpResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetMyCommentedPopUpResponseDTO.swift; sourceTree = ""; }; - 081898E52D3391CB0067BF01 /* GetMyCommentResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetMyCommentResponse.swift; sourceTree = ""; }; - 081898E72D3392480067BF01 /* GetMyCommentRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetMyCommentRequestDTO.swift; sourceTree = ""; }; - 081898EB2D33A3960067BF01 /* MyCommentSortedModalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCommentSortedModalView.swift; sourceTree = ""; }; - 081898ED2D33A39D0067BF01 /* MyCommentSortedModalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCommentSortedModalController.swift; sourceTree = ""; }; - 081898EF2D33A3A30067BF01 /* MyCommentSortedModalReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCommentSortedModalReactor.swift; sourceTree = ""; }; - 081898F22D33D6AC0067BF01 /* BlockUserManageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockUserManageView.swift; sourceTree = ""; }; - 081898F42D33D6B10067BF01 /* BlockUserManageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockUserManageController.swift; sourceTree = ""; }; - 081898F62D33D6B70067BF01 /* BlockUserManageReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockUserManageReactor.swift; sourceTree = ""; }; - 081898FA2D33D9320067BF01 /* GetBlockUserListResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetBlockUserListResponseDTO.swift; sourceTree = ""; }; - 081898FC2D33D9ED0067BF01 /* GetBlockUserListResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetBlockUserListResponse.swift; sourceTree = ""; }; - 081898FE2D33DA440067BF01 /* GetBlockUserListRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetBlockUserListRequestDTO.swift; sourceTree = ""; }; - 081899012D3407F50067BF01 /* BlockUserListSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockUserListSection.swift; sourceTree = ""; }; - 081899042D34080B0067BF01 /* BlockUserListSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockUserListSectionCell.swift; sourceTree = ""; }; - 081899072D34B35A0067BF01 /* MyPageNoticeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageNoticeView.swift; sourceTree = ""; }; - 081899092D34B3620067BF01 /* MyPageNoticeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageNoticeController.swift; sourceTree = ""; }; - 0818990B2D34B3670067BF01 /* MyPageNoticeReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageNoticeReactor.swift; sourceTree = ""; }; - 0818990D2D34B68C0067BF01 /* GetNoticeListResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetNoticeListResponseDTO.swift; sourceTree = ""; }; - 0818990F2D34B7240067BF01 /* GetNoticeListResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetNoticeListResponse.swift; sourceTree = ""; }; - 081899112D34CA9E0067BF01 /* GetNoticeDetailResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetNoticeDetailResponseDTO.swift; sourceTree = ""; }; - 081899132D34CAEA0067BF01 /* GetNoticeDetailResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetNoticeDetailResponse.swift; sourceTree = ""; }; - 081899172D34D63E0067BF01 /* NoticeListSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoticeListSection.swift; sourceTree = ""; }; - 081899192D34D6430067BF01 /* NoticeListSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoticeListSectionCell.swift; sourceTree = ""; }; - 0818991D2D34DF7D0067BF01 /* MyPageNoticeDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageNoticeDetailView.swift; sourceTree = ""; }; - 0818991F2D34DF880067BF01 /* MyPageNoticeDetailController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageNoticeDetailController.swift; sourceTree = ""; }; - 081899212D34DF8E0067BF01 /* MyPageNoticeDetailReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageNoticeDetailReactor.swift; sourceTree = ""; }; - 081899242D3500B80067BF01 /* FAQView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAQView.swift; sourceTree = ""; }; - 081899262D3500BF0067BF01 /* FAQController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAQController.swift; sourceTree = ""; }; - 081899282D3500C50067BF01 /* FAQReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAQReactor.swift; sourceTree = ""; }; - 0818992C2D3506240067BF01 /* FAQDropdownSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAQDropdownSectionCell.swift; sourceTree = ""; }; - 0818992E2D3506290067BF01 /* FAQDropdownSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAQDropdownSection.swift; sourceTree = ""; }; - 081899322D35F1090067BF01 /* MyPageBookmarkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageBookmarkView.swift; sourceTree = ""; }; - 081899342D35F10F0067BF01 /* MyPageBookmarkController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageBookmarkController.swift; sourceTree = ""; }; - 081899362D35F1140067BF01 /* MyPageBookmarkReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageBookmarkReactor.swift; sourceTree = ""; }; - 081899382D35F11F0067BF01 /* MyPageRecentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageRecentView.swift; sourceTree = ""; }; - 0818993A2D35F1250067BF01 /* MyPageRecentController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageRecentController.swift; sourceTree = ""; }; - 0818993C2D35F12A0067BF01 /* MyPageRecentReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageRecentReactor.swift; sourceTree = ""; }; - 0818993E2D35FBE00067BF01 /* GetRecentPopUpResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetRecentPopUpResponseDTO.swift; sourceTree = ""; }; - 081899402D35FDA10067BF01 /* GetRecentPopUpResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetRecentPopUpResponse.swift; sourceTree = ""; }; - 081899442D35FEA10067BF01 /* RecentPopUpSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentPopUpSection.swift; sourceTree = ""; }; - 081899492D36322B0067BF01 /* PopUpCardSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpCardSection.swift; sourceTree = ""; }; - 0818994B2D3632320067BF01 /* PopUpCardSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpCardSectionCell.swift; sourceTree = ""; }; - 0818994F2D363E5C0067BF01 /* BookMarkPopUpViewTypeModalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookMarkPopUpViewTypeModalView.swift; sourceTree = ""; }; - 081899512D363E640067BF01 /* BookMarkPopUpViewTypeModalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookMarkPopUpViewTypeModalController.swift; sourceTree = ""; }; - 081899532D363E6A0067BF01 /* BookMarkPopUpViewTypeModalReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookMarkPopUpViewTypeModalReactor.swift; sourceTree = ""; }; - 082197A62D4E3EE00054094A /* CommentMyMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentMyMenuView.swift; sourceTree = ""; }; - 082197A82D4E3EE90054094A /* CommentMyMenuController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentMyMenuController.swift; sourceTree = ""; }; - 082197AA2D4E3EEF0054094A /* CommentMyMenuReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentMyMenuReactor.swift; sourceTree = ""; }; - 082197AC2D4E49370054094A /* DeleteCommentRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteCommentRequestDTO.swift; sourceTree = ""; }; - 082197AF2D4E4E190054094A /* NormalCommentEditView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NormalCommentEditView.swift; sourceTree = ""; }; - 082197B12D4E4E200054094A /* NormalCommentEditController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NormalCommentEditController.swift; sourceTree = ""; }; - 082197B32D4E4E280054094A /* NormalCommentEditReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NormalCommentEditReactor.swift; sourceTree = ""; }; - 083A257F2CF361EF0099B58E /* BaseTabmanController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTabmanController.swift; sourceTree = ""; }; - 083A25802CF361EF0099B58E /* BaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = ""; }; - 083A25932CF362090099B58E /* Sectionable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sectionable.swift; sourceTree = ""; }; - 083A25942CF362090099B58E /* SectionDecorationItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionDecorationItem.swift; sourceTree = ""; }; - 083A25952CF362090099B58E /* SectionSupplementaryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionSupplementaryItem.swift; sourceTree = ""; }; - 083A25972CF362090099B58E /* InOutputable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InOutputable.swift; sourceTree = ""; }; - 083A25A12CF362670099B58E /* NetworkError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkError.swift; sourceTree = ""; }; - 083A25A22CF362670099B58E /* Requestable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Requestable.swift; sourceTree = ""; }; - 083A25A32CF362670099B58E /* Responsable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Responsable.swift; sourceTree = ""; }; - 083A25A52CF362670099B58E /* Endpoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Endpoint.swift; sourceTree = ""; }; - 083A25A62CF362670099B58E /* MultipartEndPoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipartEndPoint.swift; sourceTree = ""; }; - 083A25A72CF362670099B58E /* RequestEndpoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestEndpoint.swift; sourceTree = ""; }; - 083A25A92CF362670099B58E /* IndicatorMaker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IndicatorMaker.swift; sourceTree = ""; }; - 083A25AB2CF362670099B58E /* FormDataInterceptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormDataInterceptor.swift; sourceTree = ""; }; - 083A25AC2CF362670099B58E /* TokenInterceptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenInterceptor.swift; sourceTree = ""; }; - 083A25AE2CF362670099B58E /* Provider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Provider.swift; sourceTree = ""; }; - 083A25AF2CF362670099B58E /* ProviderImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProviderImpl.swift; sourceTree = ""; }; - 083A25BD2CF362770099B58E /* Logger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; - 083A25C72CF363C00099B58E /* LoginController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginController.swift; sourceTree = ""; }; - 083A25C92CF363C60099B58E /* LoginReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginReactor.swift; sourceTree = ""; }; - 083A25CB2CF363CB0099B58E /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; - 083C860A2D073A15003F441C /* DetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailView.swift; sourceTree = ""; }; - 083C860C2D073A1C003F441C /* DetailController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailController.swift; sourceTree = ""; }; - 083C860E2D073A23003F441C /* DetailReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailReactor.swift; sourceTree = ""; }; - 083C861B2D087337003F441C /* GetPopUpDetailRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetPopUpDetailRequestDTO.swift; sourceTree = ""; }; - 083C861D2D08737F003F441C /* GetPopUpDetailResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetPopUpDetailResponseDTO.swift; sourceTree = ""; }; - 083C861F2D087445003F441C /* GetPopUpDetailResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetPopUpDetailResponse.swift; sourceTree = ""; }; - 083C86232D087A44003F441C /* DetailTitleSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailTitleSection.swift; sourceTree = ""; }; - 083C86252D087A4E003F441C /* DetailTitleSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailTitleSectionCell.swift; sourceTree = ""; }; - 083C86282D088080003F441C /* DetailContentSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailContentSection.swift; sourceTree = ""; }; - 083C862A2D08808C003F441C /* DetailContentSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailContentSectionCell.swift; sourceTree = ""; }; - 083C86352D0C7EF4003F441C /* CommentSelectedController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentSelectedController.swift; sourceTree = ""; }; - 083C86372D0C7EFC003F441C /* CommentSelectedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentSelectedView.swift; sourceTree = ""; }; - 083C86392D0C7F0A003F441C /* CommentSelectedReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentSelectedReactor.swift; sourceTree = ""; }; - 083C863C2D0C8BC4003F441C /* NormalCommentAddController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NormalCommentAddController.swift; sourceTree = ""; }; - 083C863E2D0C8BCE003F441C /* NormalCommentAddView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NormalCommentAddView.swift; sourceTree = ""; }; - 083C86402D0C8BD8003F441C /* NormalCommentAddReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NormalCommentAddReactor.swift; sourceTree = ""; }; - 083C86442D0DCDE8003F441C /* AddCommentTitleSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCommentTitleSectionCell.swift; sourceTree = ""; }; - 083C86462D0DCDFB003F441C /* AddCommentTitleSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCommentTitleSection.swift; sourceTree = ""; }; - 083C86492D0DCF96003F441C /* AddCommentDescriptionSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCommentDescriptionSection.swift; sourceTree = ""; }; - 083C864B2D0DCF9B003F441C /* AddCommentDescriptionSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCommentDescriptionSectionCell.swift; sourceTree = ""; }; - 083C864E2D0DD3A6003F441C /* AddCommentImageSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCommentImageSection.swift; sourceTree = ""; }; - 083C86502D0DD3AB003F441C /* AddCommentImageSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCommentImageSectionCell.swift; sourceTree = ""; }; - 083C86532D0DD7E9003F441C /* AddCommentSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCommentSection.swift; sourceTree = ""; }; - 083C86552D0DD7EE003F441C /* AddCommentSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCommentSectionCell.swift; sourceTree = ""; }; - 083C86582D0DEFC3003F441C /* CommentCheckView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentCheckView.swift; sourceTree = ""; }; - 083C865A2D0DEFCF003F441C /* CommentCheckController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentCheckController.swift; sourceTree = ""; }; - 083C865C2D0DEFD5003F441C /* CommentCheckReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentCheckReactor.swift; sourceTree = ""; }; - 083C865F2D0EC496003F441C /* InstaCommentAddView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstaCommentAddView.swift; sourceTree = ""; }; - 083C86612D0EC49E003F441C /* InstaCommentAddController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstaCommentAddController.swift; sourceTree = ""; }; - 083C86632D0EC4A5003F441C /* InstaCommentAddReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstaCommentAddReactor.swift; sourceTree = ""; }; - 083C86682D0ECB47003F441C /* InstaGuideSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstaGuideSection.swift; sourceTree = ""; }; - 083C866A2D0ECB4F003F441C /* InstaGuideSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstaGuideSectionCell.swift; sourceTree = ""; }; - 083C866D2D0ECB87003F441C /* InstaGuideChildSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstaGuideChildSection.swift; sourceTree = ""; }; - 083C866F2D0ECB8E003F441C /* InstaGuideChildSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstaGuideChildSectionCell.swift; sourceTree = ""; }; - 083C86722D0EE2B1003F441C /* CommentAPIEndPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentAPIEndPoint.swift; sourceTree = ""; }; - 083C86752D0EE2CF003F441C /* PostCommentRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostCommentRequestDTO.swift; sourceTree = ""; }; - 083C86772D0EE382003F441C /* CommentAPIRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentAPIRepository.swift; sourceTree = ""; }; - 083C86792D0EE3BB003F441C /* CommentAPIUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentAPIUseCaseImpl.swift; sourceTree = ""; }; - 0841BA7F2CF9F34100049E31 /* ImageBannerChildSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageBannerChildSectionCell.swift; sourceTree = ""; }; - 0841BA812CF9F5DF00049E31 /* PreSignedService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreSignedService.swift; sourceTree = ""; }; - 0841BA842CF9F62300049E31 /* PreSignedURLDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreSignedURLDTO.swift; sourceTree = ""; }; - 0841BA852CF9F62300049E31 /* PresignedURLRequestDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresignedURLRequestDTO.swift; sourceTree = ""; }; - 0841BA862CF9F62300049E31 /* PreSignedURLResponseDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreSignedURLResponseDTO.swift; sourceTree = ""; }; - 0841BA8B2CF9F67100049E31 /* PreSignedAPIEndPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreSignedAPIEndPoint.swift; sourceTree = ""; }; - 0841BA8D2CF9F8A100049E31 /* ImageBannerChildSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageBannerChildSection.swift; sourceTree = ""; }; - 0841BAA22CFA31A300049E31 /* SpacingSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacingSection.swift; sourceTree = ""; }; - 0841BAA42CFA31A900049E31 /* SpacingSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacingSectionCell.swift; sourceTree = ""; }; - 0841BAA72CFA354500049E31 /* HomeTitleSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTitleSection.swift; sourceTree = ""; }; - 0841BAA92CFA354C00049E31 /* HomeTitleSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTitleSectionCell.swift; sourceTree = ""; }; - 0841BAAB2CFA35F300049E31 /* UILabel+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+.swift"; sourceTree = ""; }; - 0841BAAE2CFA38EA00049E31 /* HomeCardSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCardSection.swift; sourceTree = ""; }; - 0841BAB02CFA38F500049E31 /* HomeCardSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCardSectionCell.swift; sourceTree = ""; }; - 0841BAB32CFABED700049E31 /* HomePopularCardSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomePopularCardSection.swift; sourceTree = ""; }; - 0841BAB52CFABEDC00049E31 /* HomePopularCardSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomePopularCardSectionCell.swift; sourceTree = ""; }; - 0841BAB72CFAC41300049E31 /* SectionBackGroundDecorationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SectionBackGroundDecorationView.swift; sourceTree = ""; }; - 0841BAB92CFAE5BE00049E31 /* HomeHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeHeaderView.swift; sourceTree = ""; }; - 0841BABB2CFB59E200049E31 /* String?+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String?+.swift"; sourceTree = ""; }; - 0841BABD2CFB5AA600049E31 /* Date?+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date?+.swift"; sourceTree = ""; }; - 0841BAC22CFB600800049E31 /* TabbarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabbarController.swift; sourceTree = ""; }; - 086DD8C72CFDEA9200B97D3B /* UIView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+.swift"; sourceTree = ""; }; - 086DD8CB2CFDFEA800B97D3B /* HomeListController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListController.swift; sourceTree = ""; }; - 086DD8CD2CFDFEB000B97D3B /* HomeListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListView.swift; sourceTree = ""; }; - 086DD8CF2CFDFEB900B97D3B /* HomeListReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListReactor.swift; sourceTree = ""; }; - 086DD8D22CFDFF1500B97D3B /* HomePopUpType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomePopUpType.swift; sourceTree = ""; }; - 086DD8D52CFF182100B97D3B /* UserAPIEndPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAPIEndPoint.swift; sourceTree = ""; }; - 086DD8D72CFF185200B97D3B /* PostBookmarkPopUpRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostBookmarkPopUpRequestDTO.swift; sourceTree = ""; }; - 086DD8D92CFF194700B97D3B /* UserAPIRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAPIRepositoryImpl.swift; sourceTree = ""; }; - 086DD8DD2CFF19C400B97D3B /* UserAPIUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAPIUseCaseImpl.swift; sourceTree = ""; }; - 086DD8DF2CFF2C3700B97D3B /* UIImageView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImageView+.swift"; sourceTree = ""; }; - 086DD8E22CFF356300B97D3B /* HomeCardGridSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCardGridSection.swift; sourceTree = ""; }; - 086DD9292D0086AA00B97D3B /* SearchController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchController.swift; sourceTree = ""; }; - 086DD92B2D0086B100B97D3B /* SearchReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchReactor.swift; sourceTree = ""; }; - 086DD92D2D0086B900B97D3B /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; }; - 086DD92F2D0090E900B97D3B /* UITextField+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextField+.swift"; sourceTree = ""; }; - 086DD9332D00962500B97D3B /* SearchTitleSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTitleSectionCell.swift; sourceTree = ""; }; - 086DD9352D00963900B97D3B /* SearchTitleSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTitleSection.swift; sourceTree = ""; }; - 086DD93A2D009A1C00B97D3B /* CancelableTagSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CancelableTagSection.swift; sourceTree = ""; }; - 086DD93C2D009A2600B97D3B /* CancelableTagSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CancelableTagSectionCell.swift; sourceTree = ""; }; - 086DD93F2D01EEEB00B97D3B /* SearchCountTitleSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCountTitleSection.swift; sourceTree = ""; }; - 086DD9412D01EEF700B97D3B /* SearchCountTitleSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCountTitleSectionCell.swift; sourceTree = ""; }; - 086F89C22D1E347700CA4FC9 /* CommentUserInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentUserInfoView.swift; sourceTree = ""; }; - 086F89C42D1E347E00CA4FC9 /* CommentUserInfoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentUserInfoController.swift; sourceTree = ""; }; - 086F89C62D1E348400CA4FC9 /* CommentUserInfoReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentUserInfoReactor.swift; sourceTree = ""; }; - 086F89C92D1E42A700CA4FC9 /* CommentUserBlockView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentUserBlockView.swift; sourceTree = ""; }; - 086F89CB2D1E42B000CA4FC9 /* CommentUserBlockController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentUserBlockController.swift; sourceTree = ""; }; - 086F89CD2D1E42B500CA4FC9 /* CommentUserBlockReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentUserBlockReactor.swift; sourceTree = ""; }; - 086F89CF2D1E60A100CA4FC9 /* PostUserBlockRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostUserBlockRequestDTO.swift; sourceTree = ""; }; - 086F89D22D1E6DA600CA4FC9 /* OtherUserCommentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OtherUserCommentView.swift; sourceTree = ""; }; - 086F89D42D1E6DB100CA4FC9 /* OtherUserCommentController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OtherUserCommentController.swift; sourceTree = ""; }; - 086F89D62D1E6DB700CA4FC9 /* OtherUserCommentReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OtherUserCommentReactor.swift; sourceTree = ""; }; - 086F89D82D1E79E200CA4FC9 /* GetOtherUserCommentListRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetOtherUserCommentListRequestDTO.swift; sourceTree = ""; }; - 086F89DA2D1E7A6C00CA4FC9 /* GetOtherUserCommentedPopUpListResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetOtherUserCommentedPopUpListResponseDTO.swift; sourceTree = ""; }; - 086F89DF2D1E7CC700CA4FC9 /* GetOtherUserCommentedPopUpListResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetOtherUserCommentedPopUpListResponse.swift; sourceTree = ""; }; - 086F89E32D1FE91300CA4FC9 /* OtherUserCommentSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OtherUserCommentSection.swift; sourceTree = ""; }; - 086F89E52D1FE91800CA4FC9 /* OtherUserCommentSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OtherUserCommentSectionCell.swift; sourceTree = ""; }; - 086F89E92D2009E300CA4FC9 /* SubLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubLoginView.swift; sourceTree = ""; }; - 086F89EB2D2009EB00CA4FC9 /* SubLoginController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubLoginController.swift; sourceTree = ""; }; - 086F89ED2D2009F100CA4FC9 /* SubLoginReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubLoginReactor.swift; sourceTree = ""; }; - 086F89F02D2269D800CA4FC9 /* MyPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageView.swift; sourceTree = ""; }; - 086F89F22D2269DE00CA4FC9 /* MyPageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageController.swift; sourceTree = ""; }; - 086F89F42D2269E300CA4FC9 /* MyPageReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageReactor.swift; sourceTree = ""; }; - 086F89F62D226DF600CA4FC9 /* GetMyPageResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetMyPageResponseDTO.swift; sourceTree = ""; }; - 086F89F82D226EEB00CA4FC9 /* GetMyPageResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetMyPageResponse.swift; sourceTree = ""; }; - 086F8A042D23CB3300CA4FC9 /* MyPageProfileSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageProfileSection.swift; sourceTree = ""; }; - 086F8A062D23CB3800CA4FC9 /* MyPageProfileSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageProfileSectionCell.swift; sourceTree = ""; }; - 086F8A092D2621EE00CA4FC9 /* MyPageMyCommentTitleSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageMyCommentTitleSection.swift; sourceTree = ""; }; - 086F8A0B2D2621F400CA4FC9 /* MyPageMyCommentTitleSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageMyCommentTitleSectionCell.swift; sourceTree = ""; }; - 086F8A0E2D26297900CA4FC9 /* MyPageCommentSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageCommentSection.swift; sourceTree = ""; }; - 086F8A102D26297D00CA4FC9 /* MyPageCommentSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageCommentSectionCell.swift; sourceTree = ""; }; - 086F8A172D265C5F00CA4FC9 /* MyPageListSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageListSection.swift; sourceTree = ""; }; - 086F8A192D265C6300CA4FC9 /* MyPageListSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageListSectionCell.swift; sourceTree = ""; }; - 088DE2492D12F3360030FA9E /* DetailInfoSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailInfoSection.swift; sourceTree = ""; }; - 088DE24B2D12F33B0030FA9E /* DetailInfoSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailInfoSectionCell.swift; sourceTree = ""; }; - 088DE24E2D13019A0030FA9E /* DetailCommentTitleSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailCommentTitleSection.swift; sourceTree = ""; }; - 088DE2502D13019E0030FA9E /* DetailCommentTitleSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailCommentTitleSectionCell.swift; sourceTree = ""; }; - 088DE2532D144A7E0030FA9E /* DetailCommentSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailCommentSection.swift; sourceTree = ""; }; - 088DE2552D144A830030FA9E /* DetailCommentSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailCommentSectionCell.swift; sourceTree = ""; }; - 088DE2572D144B0F0030FA9E /* DetailCommentProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailCommentProfileView.swift; sourceTree = ""; }; - 088DE2592D1458620030FA9E /* DetailCommentImageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailCommentImageCell.swift; sourceTree = ""; }; - 088DE25C2D145E3A0030FA9E /* DetailSimilarSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailSimilarSection.swift; sourceTree = ""; }; - 088DE25E2D145E3F0030FA9E /* DetailSimilarSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailSimilarSectionCell.swift; sourceTree = ""; }; - 089952412D031E650022AEF9 /* SearchSortedController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchSortedController.swift; sourceTree = ""; }; - 089952432D031E6D0022AEF9 /* SearchSortedReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchSortedReactor.swift; sourceTree = ""; }; - 089952452D031E740022AEF9 /* SearchSortedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchSortedView.swift; sourceTree = ""; }; - 089952482D033A1C0022AEF9 /* PopUpAPIEndPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpAPIEndPoint.swift; sourceTree = ""; }; - 0899524A2D033A9C0022AEF9 /* GetClosePopUpListResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetClosePopUpListResponseDTO.swift; sourceTree = ""; }; - 0899524C2D033AA70022AEF9 /* GetOpenPopUpListResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetOpenPopUpListResponseDTO.swift; sourceTree = ""; }; - 0899524E2D033B5A0022AEF9 /* GetSearchPopUpListRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetSearchPopUpListRequestDTO.swift; sourceTree = ""; }; - 089952502D033C410022AEF9 /* GetSearchBottomPopUpListResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetSearchBottomPopUpListResponse.swift; sourceTree = ""; }; - 089952522D033C940022AEF9 /* PopUpAPIRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpAPIRepositoryImpl.swift; sourceTree = ""; }; - 089952542D033D480022AEF9 /* PopUpAPIUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpAPIUseCaseImpl.swift; sourceTree = ""; }; - 089952572D0347AC0022AEF9 /* SearchCategoryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCategoryController.swift; sourceTree = ""; }; - 089952592D0347B40022AEF9 /* SearchCategoryReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCategoryReactor.swift; sourceTree = ""; }; - 0899525B2D0347BD0022AEF9 /* SearchCategoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCategoryView.swift; sourceTree = ""; }; - 0899525F2D0366C40022AEF9 /* SearchMainController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchMainController.swift; sourceTree = ""; }; - 089952612D0366D30022AEF9 /* SearchMainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchMainView.swift; sourceTree = ""; }; - 089952632D0366DA0022AEF9 /* SearchMainReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchMainReactor.swift; sourceTree = ""; }; - 089952652D046CCD0022AEF9 /* SearchResultController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultController.swift; sourceTree = ""; }; - 089952672D046CD80022AEF9 /* SearchResultReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultReactor.swift; sourceTree = ""; }; - 089952692D046CDE0022AEF9 /* SearchResultView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultView.swift; sourceTree = ""; }; - 0899526B2D0473EC0022AEF9 /* GetSearchPopUpListResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetSearchPopUpListResponseDTO.swift; sourceTree = ""; }; - 0899526D2D0474340022AEF9 /* GetSearchPopUpListResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetSearchPopUpListResponse.swift; sourceTree = ""; }; - 089952722D0475E90022AEF9 /* SearchResultCountSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultCountSection.swift; sourceTree = ""; }; - 089952742D0475F20022AEF9 /* SearchResultCountSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultCountSectionCell.swift; sourceTree = ""; }; - 089B4FD72D9A57AE00FC0CC3 /* ImageLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageLoader.swift; sourceTree = ""; }; - 089B4FDE2D9A8F9A00FC0CC3 /* MemoryStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemoryStorage.swift; sourceTree = ""; }; - 08A2E46B2D15BC5000102313 /* CommentLikeRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentLikeRequestDTO.swift; sourceTree = ""; }; - 08A2E4782D1B06A300102313 /* ImageDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageDetailView.swift; sourceTree = ""; }; - 08A2E47A2D1B06AA00102313 /* ImageDetailController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageDetailController.swift; sourceTree = ""; }; - 08A2E47C2D1B06B000102313 /* ImageDetailReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageDetailReactor.swift; sourceTree = ""; }; - 08A2E47F2D1BCDE300102313 /* CommentDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentDetailView.swift; sourceTree = ""; }; - 08A2E4812D1BCDEA00102313 /* CommentDetailController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentDetailController.swift; sourceTree = ""; }; - 08A2E4832D1BCDEF00102313 /* CommentDetailReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentDetailReactor.swift; sourceTree = ""; }; - 08A2E4852D1BD85C00102313 /* CommentDetailImageSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentDetailImageSection.swift; sourceTree = ""; }; - 08A2E4892D1BDA8400102313 /* CommentDetailContentSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentDetailContentSection.swift; sourceTree = ""; }; - 08A2E48B2D1BDA8A00102313 /* CommentDetailContentSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentDetailContentSectionCell.swift; sourceTree = ""; }; - 08A2E48E2D1BF6E500102313 /* CommentListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentListView.swift; sourceTree = ""; }; - 08A2E4902D1BF6EA00102313 /* CommentListController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentListController.swift; sourceTree = ""; }; - 08A2E4922D1BF6EF00102313 /* CommentListReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentListReactor.swift; sourceTree = ""; }; - 08A2E4942D1C078300102313 /* GetPopUpCommentRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetPopUpCommentRequestDTO.swift; sourceTree = ""; }; - 08A2E4962D1C07F500102313 /* GetPopUpCommentResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetPopUpCommentResponseDTO.swift; sourceTree = ""; }; - 08A2E4982D1C08D600102313 /* GetPopUpCommentResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetPopUpCommentResponse.swift; sourceTree = ""; }; - 08A2E49C2D1C416800102313 /* CommentListTitleSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentListTitleSection.swift; sourceTree = ""; }; - 08A2E49E2D1C417000102313 /* CommentListTitleSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentListTitleSectionCell.swift; sourceTree = ""; }; - 08B191342CF366670057BC04 /* UICollectionViewCell+.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UICollectionViewCell+.swift"; sourceTree = ""; }; - 08B191352CF366670057BC04 /* UICollectionReusableView+.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UICollectionReusableView+.swift"; sourceTree = ""; }; - 08B191362CF366670057BC04 /* UITableViewCell+.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITableViewCell+.swift"; sourceTree = ""; }; - 08B1913A2CF366A00057BC04 /* UIApplication+.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIApplication+.swift"; sourceTree = ""; }; - 08B1913E2CF367FA0057BC04 /* UIColor+.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+.swift"; sourceTree = ""; }; - 08B191402CF367FF0057BC04 /* UIFont+.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIFont+.swift"; sourceTree = ""; }; - 08B191422CF41D680057BC04 /* GothicA1-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "GothicA1-Bold.ttf"; sourceTree = ""; }; - 08B191432CF41D680057BC04 /* GothicA1-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "GothicA1-Light.ttf"; sourceTree = ""; }; - 08B191442CF41D680057BC04 /* GothicA1-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "GothicA1-Medium.ttf"; sourceTree = ""; }; - 08B191452CF41D680057BC04 /* GothicA1-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "GothicA1-Regular.ttf"; sourceTree = ""; }; - 08B191462CF41D680057BC04 /* Poppins-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Poppins-Bold.ttf"; sourceTree = ""; }; - 08B191472CF41D680057BC04 /* Poppins-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Poppins-Light.ttf"; sourceTree = ""; }; - 08B191482CF41D680057BC04 /* Poppins-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Poppins-Medium.ttf"; sourceTree = ""; }; - 08B191492CF41D680057BC04 /* Poppins-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Poppins-Regular.ttf"; sourceTree = ""; }; - 08B191532CF41D6F0057BC04 /* PP_loading.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = PP_loading.json; sourceTree = ""; }; - 08B191542CF41D6F0057BC04 /* PP_splash.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = PP_splash.json; sourceTree = ""; }; - 08B191582CF41E610057BC04 /* SignUpMainController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpMainController.swift; sourceTree = ""; }; - 08B1915A2CF41E690057BC04 /* SignUpMainReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpMainReactor.swift; sourceTree = ""; }; - 08B1915C2CF41E6F0057BC04 /* SignUpMainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpMainView.swift; sourceTree = ""; }; - 08B191602CF430E70057BC04 /* PPProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PPProgressView.swift; sourceTree = ""; }; - 08B191622CF430F30057BC04 /* PPProgressIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PPProgressIndicator.swift; sourceTree = ""; }; - 08B191662CF432220057BC04 /* PPCancelHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PPCancelHeaderView.swift; sourceTree = ""; }; - 08B191692CF434B80057BC04 /* SignUpStep1Controller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep1Controller.swift; sourceTree = ""; }; - 08B1916B2CF434C30057BC04 /* SignUpStep1View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep1View.swift; sourceTree = ""; }; - 08B1916D2CF434CF0057BC04 /* SignUpStep1Reactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep1Reactor.swift; sourceTree = ""; }; - 08B191702CF4398D0057BC04 /* PPLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PPLabel.swift; sourceTree = ""; }; - 08B191732CF43DF40057BC04 /* SignUpCheckBoxButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpCheckBoxButton.swift; sourceTree = ""; }; - 08B191752CF440C40057BC04 /* PPButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PPButton.swift; sourceTree = ""; }; - 08B191772CF442230057BC04 /* UIImage+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+.swift"; sourceTree = ""; }; - 08B191792CF452B30057BC04 /* SignUpTermsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpTermsView.swift; sourceTree = ""; }; - 08B1917C2CF46DE30057BC04 /* TermsDetailController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsDetailController.swift; sourceTree = ""; }; - 08B1917E2CF46DF20057BC04 /* TermsDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsDetailView.swift; sourceTree = ""; }; - 08B191812CF48A7B0057BC04 /* SignUpStep2Controller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep2Controller.swift; sourceTree = ""; }; - 08B191832CF48A820057BC04 /* SignUpStep2View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep2View.swift; sourceTree = ""; }; - 08B191852CF48A8B0057BC04 /* SignUpStep2Reactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep2Reactor.swift; sourceTree = ""; }; - 08B191872CF48FAE0057BC04 /* NickNameState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NickNameState.swift; sourceTree = ""; }; - 08B1918C2CF49FF70057BC04 /* SignUpStep3View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep3View.swift; sourceTree = ""; }; - 08B1918E2CF4A0020057BC04 /* SignUpStep3Controller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep3Controller.swift; sourceTree = ""; }; - 08B191902CF4A00E0057BC04 /* SignUpStep3Reactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep3Reactor.swift; sourceTree = ""; }; - 08B191932CF4A0F00057BC04 /* SignUpStep4View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep4View.swift; sourceTree = ""; }; - 08B191952CF4A0FA0057BC04 /* SignUpStep4Controller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep4Controller.swift; sourceTree = ""; }; - 08B191972CF4A1010057BC04 /* SignUpStep4Reactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpStep4Reactor.swift; sourceTree = ""; }; - 08B1919B2CF4A77C0057BC04 /* TagSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagSection.swift; sourceTree = ""; }; - 08B1919D2CF4A7830057BC04 /* TagSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagSectionCell.swift; sourceTree = ""; }; - 08B1919F2CF4AA0E0057BC04 /* Reactive+.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Reactive+.swift"; sourceTree = ""; }; - 08B191A12CF4AE890057BC04 /* ToastMaker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastMaker.swift; sourceTree = ""; }; - 08B191A32CF5A7030057BC04 /* PPSegmentedControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PPSegmentedControl.swift; sourceTree = ""; }; - 08B191A62CF5A9430057BC04 /* AgeSelectedButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgeSelectedButton.swift; sourceTree = ""; }; - 08B191AB2CF5BF9D0057BC04 /* AgeSelectedController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgeSelectedController.swift; sourceTree = ""; }; - 08B191AD2CF5BFA60057BC04 /* AgeSelectedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgeSelectedView.swift; sourceTree = ""; }; - 08B191AF2CF5BFAE0057BC04 /* AgeSelectedReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgeSelectedReactor.swift; sourceTree = ""; }; - 08B191B12CF5C0A60057BC04 /* PPPicker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PPPicker.swift; sourceTree = ""; }; - 08B191B32CF609260057BC04 /* KakaoLoginService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KakaoLoginService.swift; sourceTree = ""; }; - 08B191B52CF6092B0057BC04 /* AppleLoginService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppleLoginService.swift; sourceTree = ""; }; - 08B191B72CF6092F0057BC04 /* AuthServiceable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthServiceable.swift; sourceTree = ""; }; - 08B191C12CF615CA0057BC04 /* KeyPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyPath.swift; sourceTree = ""; }; - 08CBEA022D38989E00248007 /* PostTokenReissueResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostTokenReissueResponseDTO.swift; sourceTree = ""; }; - 08CBEA052D38991600248007 /* PostTokenReissueResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostTokenReissueResponse.swift; sourceTree = ""; }; - 08CBEA0A2D38DBD600248007 /* LastLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastLoginView.swift; sourceTree = ""; }; - 08CBEA0C2D38ED0D00248007 /* CountButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountButtonView.swift; sourceTree = ""; }; - 08CBEA392D3FABE100248007 /* ToastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastView.swift; sourceTree = ""; }; - 08CBEA3B2D3FABED00248007 /* BookMarkToastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookMarkToastView.swift; sourceTree = ""; }; - 08CBEA3D2D3FF6A100248007 /* PopUpCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpCardView.swift; sourceTree = ""; }; - 08CFD3912D9BDE99004CDD50 /* DiskStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiskStorage.swift; sourceTree = ""; }; - 08DC61F22CF75037002A2F44 /* KeyChainService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyChainService.swift; sourceTree = ""; }; - 08DC61F42CF765B5002A2F44 /* UserDefaultService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultService.swift; sourceTree = ""; }; - 08DC61F72CF76843002A2F44 /* SignUpCompleteView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpCompleteView.swift; sourceTree = ""; }; - 08DC61F92CF7684F002A2F44 /* SignUpCompleteController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpCompleteController.swift; sourceTree = ""; }; - 08DC61FB2CF76862002A2F44 /* SignUpCompleteReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpCompleteReactor.swift; sourceTree = ""; }; - 08DC62022CF8AC06002A2F44 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; - 08DC62042CF8AC0E002A2F44 /* HomeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeController.swift; sourceTree = ""; }; - 08DC62062CF8AC14002A2F44 /* HomeReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeReactor.swift; sourceTree = ""; }; - 08DC620A2CF8AE0F002A2F44 /* ImageBannerSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageBannerSection.swift; sourceTree = ""; }; - 08DC620C2CF8AE16002A2F44 /* ImageBannerSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageBannerSectionCell.swift; sourceTree = ""; }; - 08DC62102CF8B446002A2F44 /* SortedRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortedRequestDTO.swift; sourceTree = ""; }; - 08DE8A0C2D5236840049BCAC /* PutCommentRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PutCommentRequestDTO.swift; sourceTree = ""; }; - 08DE8A0F2D5255110049BCAC /* DetailEmptyCommetSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailEmptyCommetSection.swift; sourceTree = ""; }; - 08DE8A112D5255180049BCAC /* DetailEmptyCommetSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailEmptyCommetSectionCell.swift; sourceTree = ""; }; - 08DE8A162D525A9B0049BCAC /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/LaunchScreen.strings; sourceTree = ""; }; - 08DE8A172D525BA20049BCAC /* Terms.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Terms.plist; sourceTree = ""; }; - 08DE8A1A2D5261DE0049BCAC /* MyPageTermsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageTermsController.swift; sourceTree = ""; }; - 08DE8A1C2D5261E70049BCAC /* MyPageTermsReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageTermsReactor.swift; sourceTree = ""; }; - 08DE8A3E2D54DCC40049BCAC /* MyCommentedPopUpGridSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCommentedPopUpGridSection.swift; sourceTree = ""; }; - 08DE8A402D54DCCA0049BCAC /* MyCommentedPopUpGridSectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCommentedPopUpGridSectionCell.swift; sourceTree = ""; }; - 4E643FC02D738D7F0046AF29 /* PopUpStoreRegisterReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpStoreRegisterReactor.swift; sourceTree = ""; }; - 4E643FC22D738D930046AF29 /* PopUpStoreRegisterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpStoreRegisterView.swift; sourceTree = ""; }; - 4E685EAA2D12CEB6001EF91C /* BalloonBackgroundView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalloonBackgroundView.swift; sourceTree = ""; }; - 4E685EAB2D12CEB6001EF91C /* BalloonChipCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalloonChipCell.swift; sourceTree = ""; }; - 4E685EAD2D12CEB6001EF91C /* FilterBottomSheetReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilterBottomSheetReactor.swift; sourceTree = ""; }; - 4E685EAE2D12CEB6001EF91C /* FilterBottomSheetView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilterBottomSheetView.swift; sourceTree = ""; }; - 4E685EAF2D12CEB6001EF91C /* FilterBottomSheetViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilterBottomSheetViewController.swift; sourceTree = ""; }; - 4E685EB02D12CEB6001EF91C /* FilterCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilterCell.swift; sourceTree = ""; }; - 4E685EB12D12CEB6001EF91C /* FilterChip.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilterChip.swift; sourceTree = ""; }; - 4E685EB22D12CEB6001EF91C /* FilterChipsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilterChipsView.swift; sourceTree = ""; }; - 4E685EB62D12CEB6001EF91C /* MapRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapRepository.swift; sourceTree = ""; }; - 4E685EB82D12CEB6001EF91C /* MapUseCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapUseCase.swift; sourceTree = ""; }; - 4E685EBA2D12CEB6001EF91C /* MapAPIEndpoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapAPIEndpoint.swift; sourceTree = ""; }; - 4E685EBB2D12CEB6001EF91C /* MapPopUpStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapPopUpStore.swift; sourceTree = ""; }; - 4E685EBC2D12CEB6001EF91C /* MapPopUpStoreDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapPopUpStoreDTO.swift; sourceTree = ""; }; - 4E685EBE2D12CEB6001EF91C /* MapPopupCarouselView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapPopupCarouselView.swift; sourceTree = ""; }; - 4E685EBF2D12CEB6001EF91C /* PopupCardCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PopupCardCell.swift; sourceTree = ""; }; - 4E685EC12D12CEB6001EF91C /* StoreListCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreListCell.swift; sourceTree = ""; }; - 4E685EC22D12CEB6001EF91C /* StoreListReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreListReactor.swift; sourceTree = ""; }; - 4E685EC32D12CEB6001EF91C /* StoreListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreListView.swift; sourceTree = ""; }; - 4E685EC42D12CEB6001EF91C /* StoreListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreListViewController.swift; sourceTree = ""; }; - 4E685EC62D12CEB6001EF91C /* MapFilterChips.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapFilterChips.swift; sourceTree = ""; }; - 4E685EC72D12CEB6001EF91C /* MapMarker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapMarker.swift; sourceTree = ""; }; - 4E685EC82D12CEB6001EF91C /* MapReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapReactor.swift; sourceTree = ""; }; - 4E685EC92D12CEB6001EF91C /* MapSearchInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapSearchInput.swift; sourceTree = ""; }; - 4E685ECB2D12CEB6001EF91C /* MapView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapView.swift; sourceTree = ""; }; - 4E685ECC2D12CEB6001EF91C /* MapViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapViewController.swift; sourceTree = ""; }; - 4E6A066F2D42A96100B2A658 /* FullScreenMapViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullScreenMapViewController.swift; sourceTree = ""; }; - 4E6C07052D4B6E56008A962A /* RegionDefinitions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegionDefinitions.swift; sourceTree = ""; }; - 4E6C07072D4B6E74008A962A /* ClusteringModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClusteringModels.swift; sourceTree = ""; }; - 4E6C07092D4B6E81008A962A /* ClusteringManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClusteringManager.swift; sourceTree = ""; }; - 4E6CA4842D34D6ED0034D09A /* AdminBottomSheetReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminBottomSheetReactor.swift; sourceTree = ""; }; - 4E755B1C2D2B9AD300ADFB21 /* GetAdminPopUpStoreListResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetAdminPopUpStoreListResponseDTO.swift; sourceTree = ""; }; - 4E755B1E2D2B9AE500ADFB21 /* AdminAPIEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminAPIEndpoint.swift; sourceTree = ""; }; - 4E755B202D2B9BAB00ADFB21 /* AdminResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminResponseDTO.swift; sourceTree = ""; }; - 4E755B222D2B9C5D00ADFB21 /* AdminViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminViewController.swift; sourceTree = ""; }; - 4E755B242D2B9C6C00ADFB21 /* AdminView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminView.swift; sourceTree = ""; }; - 4E755B262D2B9C7C00ADFB21 /* AdminStoreCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminStoreCell.swift; sourceTree = ""; }; - 4E755B282D2BA65A00ADFB21 /* AdminReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminReactor.swift; sourceTree = ""; }; - 4E755B2A2D2BA76E00ADFB21 /* AdminUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminUseCase.swift; sourceTree = ""; }; - 4E755B2E2D2BA7FB00ADFB21 /* AdminRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminRepository.swift; sourceTree = ""; }; - 4E8AA29C2D59A2340029DF75 /* MarkerTooltipView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkerTooltipView.swift; sourceTree = ""; }; - 4E9790C42D40E13500210499 /* MapGuideViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapGuideViewController.swift; sourceTree = ""; }; - 4E9A465F2D55D1270010578A /* MapUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapUtilities.swift; sourceTree = ""; }; - 4E9C12772D2BC7A0006744D6 /* AdminBottomSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminBottomSheetView.swift; sourceTree = ""; }; - 4E9C12792D2BC811006744D6 /* AdminBottomSheetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminBottomSheetViewController.swift; sourceTree = ""; }; - 4E9C12802D2BE0A6006744D6 /* PopUpStoreRegisterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpStoreRegisterViewController.swift; sourceTree = ""; }; - 4EA2C93C2D424D3300F4D97C /* MapDirectionRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapDirectionRepository.swift; sourceTree = ""; }; - 4EA2C93E2D424D7400F4D97C /* MapDirectionUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapDirectionUseCase.swift; sourceTree = ""; }; - 4EA2C9402D424D8400F4D97C /* GetPopUpDirectionResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetPopUpDirectionResponseDTO.swift; sourceTree = ""; }; - 4EA2C9422D424DF900F4D97C /* FindDirectionEndPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindDirectionEndPoint.swift; sourceTree = ""; }; - 4EA998992D21C2FC009DC30B /* StoreListSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreListSection.swift; sourceTree = ""; }; - 4EAB809C2D3F78AA0041AF30 /* NMFMapViewDelegateProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NMFMapViewDelegateProxy.swift; sourceTree = ""; }; - 4EAB809E2D3F8EF50041AF30 /* ViewportBounds.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewportBounds.swift; sourceTree = ""; }; - 4EDDEFB32D2D285900CFAFA5 /* DateTimePickerManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateTimePickerManager.swift; sourceTree = ""; }; - 4EDE57022D5E70650014D924 /* LocationPermissionBottomSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationPermissionBottomSheet.swift; sourceTree = ""; }; - 4EE5A3D22D40E4A600A2469A /* MapGuideReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapGuideReactor.swift; sourceTree = ""; }; - 4EEA13062DA7CDDA00775256 /* PopUpImagesCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUpImagesCollectionView.swift; sourceTree = ""; }; - 4EEA1D8E2D352012003E7DE9 /* ImageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCell.swift; sourceTree = ""; }; - 4EEA1D902D352027003E7DE9 /* ExtendedImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtendedImage.swift; sourceTree = ""; }; - 4EED9BAB2D22730400B288E7 /* FilterType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterType.swift; sourceTree = ""; }; - BD226D502CF6DB290038C984 /* PPReturnHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PPReturnHeaderView.swift; sourceTree = ""; }; - BD91034E2CF6149D00BBCCAE /* AuthAPIEndPoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthAPIEndPoint.swift; sourceTree = ""; }; - BD91034F2CF6149D00BBCCAE /* LoginResponseDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginResponseDTO.swift; sourceTree = ""; }; - BD9103512CF6149D00BBCCAE /* BannerPopUpStoreDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BannerPopUpStoreDTO.swift; sourceTree = ""; }; - BD9103522CF6149D00BBCCAE /* GetHomeInfoResponseDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetHomeInfoResponseDTO.swift; sourceTree = ""; }; - BD9103532CF6149D00BBCCAE /* HomeAPIEndpoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeAPIEndpoint.swift; sourceTree = ""; }; - BD9103542CF6149D00BBCCAE /* PopUpStoreResponseDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PopUpStoreResponseDTO.swift; sourceTree = ""; }; - BD9103572CF6149D00BBCCAE /* AuthAPIRepositoryImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthAPIRepositoryImpl.swift; sourceTree = ""; }; - BD9103582CF6149D00BBCCAE /* HomeAPIRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeAPIRepository.swift; sourceTree = ""; }; - BD9103592CF6149D00BBCCAE /* SignUpRepositoryImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignUpRepositoryImpl.swift; sourceTree = ""; }; - BD91035B2CF6149D00BBCCAE /* CheckNickNameRequestDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckNickNameRequestDTO.swift; sourceTree = ""; }; - BD91035C2CF6149D00BBCCAE /* GetCategoryListResponseDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetCategoryListResponseDTO.swift; sourceTree = ""; }; - BD91035D2CF6149D00BBCCAE /* SignUpAPIEndpoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignUpAPIEndpoint.swift; sourceTree = ""; }; - BD91035E2CF6149D00BBCCAE /* SignUpRequestDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignUpRequestDTO.swift; sourceTree = ""; }; - BD9103702CF614A900BBCCAE /* HomeAPIUseCaseImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeAPIUseCaseImpl.swift; sourceTree = ""; }; - BD9103722CF614A900BBCCAE /* SignUpAPIUseCaseImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignUpAPIUseCaseImpl.swift; sourceTree = ""; }; - BD9103742CF614A900BBCCAE /* AuthAPIUseCaseImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthAPIUseCaseImpl.swift; sourceTree = ""; }; - BD9103762CF614A900BBCCAE /* BannerPopUpStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BannerPopUpStore.swift; sourceTree = ""; }; - BD9103772CF614A900BBCCAE /* Category.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Category.swift; sourceTree = ""; }; - BD9103782CF614A900BBCCAE /* GetHomeInfoResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetHomeInfoResponse.swift; sourceTree = ""; }; - BD9103792CF614A900BBCCAE /* PopUpStoreResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PopUpStoreResponse.swift; sourceTree = ""; }; - BD91037A2CF614A900BBCCAE /* LoginResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginResponse.swift; sourceTree = ""; }; - BD91037C2CF614A900BBCCAE /* AuthRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthRepository.swift; sourceTree = ""; }; - BD91038E2CF6166800BBCCAE /* SplashView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SplashView.swift; sourceTree = ""; }; - BD9103902CF6166800BBCCAE /* SplashController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SplashController.swift; sourceTree = ""; }; - BDCA41BD2CF35AC0005EECF6 /* Poppool.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Poppool.app; sourceTree = BUILT_PRODUCTS_DIR; }; - BDCA41C02CF35AC0005EECF6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - BDCA41C22CF35AC0005EECF6 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - BDCA41C92CF35AC1005EECF6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - BDCA41CC2CF35AC1005EECF6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - BDCA41CE2CF35AC1005EECF6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - BDE30CE02CF87A9700C21E08 /* Poppool.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Poppool.entitlements; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - BDCA41BA2CF35AC0005EECF6 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BDCA41F82CF35D9A005EECF6 /* RxSwift in Frameworks */, - BDCA420D2CF35FD2005EECF6 /* RxGesture in Frameworks */, - BDCA42072CF35FA6005EECF6 /* Tabman in Frameworks */, - BDCA42042CF35F76005EECF6 /* PanModal in Frameworks */, - 082197A12D426DCB0054094A /* Then in Frameworks */, - 4E15142E2D994A3A00DFD08F /* KakaoSDKAuth in Frameworks */, - 083A25D02CF364B70099B58E /* Alamofire in Frameworks */, - 4E1514302D994A3A00DFD08F /* KakaoSDKCommon in Frameworks */, - BDCA42102CF35FF5005EECF6 /* Lottie in Frameworks */, - BDCA41FE2CF35EE7005EECF6 /* ReactorKit in Frameworks */, - BDCA41F22CF35D0D005EECF6 /* SnapKit in Frameworks */, - BDCA420A2CF35FB1005EECF6 /* Pageboy in Frameworks */, - 4E5825672D1951DF00EE83EF /* FloatingPanel in Frameworks */, - 4EA9989D2D21C404009DC30B /* RxDataSources in Frameworks */, - 4EE360FD2D91876300D2441D /* NMapsMap in Frameworks */, - BDCA42012CF35EFE005EECF6 /* RxKeyboard in Frameworks */, - 4E15142A2D99480200DFD08F /* NMapsMap in Frameworks */, - 088DE2442D104EE70030FA9E /* SwiftSoup in Frameworks */, - 4E15142C2D994A3A00DFD08F /* KakaoSDK in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 05FBCABE2DABE79A00215BE6 /* AdminAPI */ = { - isa = PBXGroup; - children = ( - 05FBCABF2DABE7AC00215BE6 /* ResponseDTO */, - 4E755B1E2D2B9AE500ADFB21 /* AdminAPIEndpoint.swift */, - ); - path = AdminAPI; - sourceTree = ""; - }; - 05FBCABF2DABE7AC00215BE6 /* ResponseDTO */ = { - isa = PBXGroup; - children = ( - 4E755B1C2D2B9AD300ADFB21 /* GetAdminPopUpStoreListResponseDTO.swift */, - 4E755B202D2B9BAB00ADFB21 /* AdminResponseDTO.swift */, - ); - path = ResponseDTO; - sourceTree = ""; - }; - 05FBCAC02DABEB1100215BE6 /* MapAPI */ = { - isa = PBXGroup; - children = ( - 4EA2C9422D424DF900F4D97C /* FindDirectionEndPoint.swift */, - 4E685EBA2D12CEB6001EF91C /* MapAPIEndpoint.swift */, - 05FBCAC12DABEB3B00215BE6 /* ResponseDTO */, - ); - path = MapAPI; - sourceTree = ""; - }; - 05FBCAC12DABEB3B00215BE6 /* ResponseDTO */ = { - isa = PBXGroup; - children = ( - 4E685EBC2D12CEB6001EF91C /* MapPopUpStoreDTO.swift */, - 4EA2C9402D424D8400F4D97C /* GetPopUpDirectionResponseDTO.swift */, - ); - path = ResponseDTO; - sourceTree = ""; - }; - 0818988C2D295DAD0067BF01 /* MyPageLogoutSection */ = { - isa = PBXGroup; - children = ( - 0818988D2D295DC30067BF01 /* MyPageLogoutSection.swift */, - 0818988F2D295DC80067BF01 /* MyPageLogoutSectionCell.swift */, - ); - path = MyPageLogoutSection; - sourceTree = ""; - }; - 081898912D2962E30067BF01 /* Main */ = { - isa = PBXGroup; - children = ( - 086F89FA2D23B84900CA4FC9 /* View */, - 086F89F22D2269DE00CA4FC9 /* MyPageController.swift */, - 086F89F42D2269E300CA4FC9 /* MyPageReactor.swift */, - ); - path = Main; - sourceTree = ""; - }; - 081898922D2965B10067BF01 /* ProfileEdit */ = { - isa = PBXGroup; - children = ( - 081898C82D30D5AC0067BF01 /* CategoryEditModal */, - 081898C72D30D5A10067BF01 /* InfoEditModal */, - 081898C62D30D5940067BF01 /* Main */, - ); - path = ProfileEdit; - sourceTree = ""; - }; - 081898992D2BAA200067BF01 /* Withdrawl */ = { - isa = PBXGroup; - children = ( - 081898B12D2D20C50067BF01 /* Complete */, - 081898A12D2CBFF30067BF01 /* SelectedReason */, - 0818989A2D2BAA400067BF01 /* CheckModal */, - ); - path = Withdrawl; - sourceTree = ""; - }; - 0818989A2D2BAA400067BF01 /* CheckModal */ = { - isa = PBXGroup; - children = ( - 0818989B2D2BAA570067BF01 /* WithdrawlCheckModalView.swift */, - 0818989D2D2BAA610067BF01 /* WithdrawlCheckModalController.swift */, - 0818989F2D2BAA670067BF01 /* WithdrawlCheckModalReactor.swift */, - ); - path = CheckModal; - sourceTree = ""; - }; - 081898A12D2CBFF30067BF01 /* SelectedReason */ = { - isa = PBXGroup; - children = ( - 081898A82D2CEA210067BF01 /* View */, - 081898A42D2CC0180067BF01 /* WithdrawlReasonController.swift */, - 081898A62D2CC01D0067BF01 /* WithdrawlReasonReactor.swift */, - ); - path = SelectedReason; - sourceTree = ""; - }; - 081898A82D2CEA210067BF01 /* View */ = { - isa = PBXGroup; - children = ( - 081898A22D2CC0110067BF01 /* WithdrawlReasonView.swift */, - 081898A92D2CEA2F0067BF01 /* WithdrawlCheckSectionCell.swift */, - 081898AB2D2CEA940067BF01 /* WithdrawlCheckSection.swift */, - ); - path = View; - sourceTree = ""; - }; - 081898B12D2D20C50067BF01 /* Complete */ = { - isa = PBXGroup; - children = ( - 081898B22D2D20D70067BF01 /* WithdrawlCompleteView.swift */, - 081898B42D2D20E30067BF01 /* WithdrawlCompleteController.swift */, - ); - path = Complete; - sourceTree = ""; - }; - 081898B82D2E5F420067BF01 /* MyComment */ = { - isa = PBXGroup; - children = ( - 081898EA2D33A3870067BF01 /* SortedModal */, - 081898E92D33A3800067BF01 /* Main */, - ); - path = MyComment; - sourceTree = ""; - }; - 081898C12D2FBD170067BF01 /* View */ = { - isa = PBXGroup; - children = ( - 081898952D2965C90067BF01 /* ProfileEditView.swift */, - 081898BF2D2FBD130067BF01 /* ProfileEditListButton.swift */, - ); - path = View; - sourceTree = ""; - }; - 081898C62D30D5940067BF01 /* Main */ = { - isa = PBXGroup; - children = ( - 081898C12D2FBD170067BF01 /* View */, - 081898932D2965C20067BF01 /* ProfileEditController.swift */, - 081898972D2965D20067BF01 /* ProfileEditReactor.swift */, - ); - path = Main; - sourceTree = ""; - }; - 081898C72D30D5A10067BF01 /* InfoEditModal */ = { - isa = PBXGroup; - children = ( - 081898C92D30D5BA0067BF01 /* InfoEditModalView.swift */, - 081898CB2D30D5BF0067BF01 /* InfoEditModalController.swift */, - 081898CD2D30D5C60067BF01 /* InfoEditModalReactor.swift */, - ); - path = InfoEditModal; - sourceTree = ""; - }; - 081898C82D30D5AC0067BF01 /* CategoryEditModal */ = { - isa = PBXGroup; - children = ( - 081898D12D30F57D0067BF01 /* CategoryEditModalView.swift */, - 081898D32D30F5840067BF01 /* CategoryEditModalController.swift */, - 081898D52D30F58A0067BF01 /* CategoryEditModalReactor.swift */, - ); - path = CategoryEditModal; - sourceTree = ""; - }; - 081898DD2D338E2B0067BF01 /* View */ = { - isa = PBXGroup; - children = ( - 08DE8A3D2D54DCAF0049BCAC /* MyCommentedPopUpGridSection */, - 081898DE2D338F790067BF01 /* ListCountButtonSection */, - 081898B92D2E5F4C0067BF01 /* MyCommentView.swift */, - ); - path = View; - sourceTree = ""; - }; - 081898DE2D338F790067BF01 /* ListCountButtonSection */ = { - isa = PBXGroup; - children = ( - 081898DF2D338F9C0067BF01 /* ListCountButtonSection.swift */, - 081898E12D338FA40067BF01 /* ListCountButtonSectionCell.swift */, - ); - path = ListCountButtonSection; - sourceTree = ""; - }; - 081898E92D33A3800067BF01 /* Main */ = { - isa = PBXGroup; - children = ( - 081898DD2D338E2B0067BF01 /* View */, - 081898BD2D2E5F590067BF01 /* MyCommentController.swift */, - 081898BB2D2E5F510067BF01 /* MyCommentReactor.swift */, - ); - path = Main; - sourceTree = ""; - }; - 081898EA2D33A3870067BF01 /* SortedModal */ = { - isa = PBXGroup; - children = ( - 081898EB2D33A3960067BF01 /* MyCommentSortedModalView.swift */, - 081898ED2D33A39D0067BF01 /* MyCommentSortedModalController.swift */, - 081898EF2D33A3A30067BF01 /* MyCommentSortedModalReactor.swift */, - ); - path = SortedModal; - sourceTree = ""; - }; - 081898F12D33D6930067BF01 /* Block */ = { - isa = PBXGroup; - children = ( - 081899002D3407DC0067BF01 /* View */, - 081898F42D33D6B10067BF01 /* BlockUserManageController.swift */, - 081898F62D33D6B70067BF01 /* BlockUserManageReactor.swift */, - ); - path = Block; - sourceTree = ""; - }; - 081899002D3407DC0067BF01 /* View */ = { - isa = PBXGroup; - children = ( - 081899032D3407F80067BF01 /* BlockUserListSection */, - 081898F22D33D6AC0067BF01 /* BlockUserManageView.swift */, - ); - path = View; - sourceTree = ""; - }; - 081899032D3407F80067BF01 /* BlockUserListSection */ = { - isa = PBXGroup; - children = ( - 081899012D3407F50067BF01 /* BlockUserListSection.swift */, - 081899042D34080B0067BF01 /* BlockUserListSectionCell.swift */, - ); - path = BlockUserListSection; - sourceTree = ""; - }; - 081899062D34B3470067BF01 /* Notice */ = { - isa = PBXGroup; - children = ( - 0818991C2D34DF5B0067BF01 /* Detail */, - 0818991B2D34DF530067BF01 /* List */, - ); - path = Notice; - sourceTree = ""; - }; - 081899152D34D6060067BF01 /* View */ = { - isa = PBXGroup; - children = ( - 081899162D34D62F0067BF01 /* NoticeListSection */, - 081899072D34B35A0067BF01 /* MyPageNoticeView.swift */, - ); - path = View; - sourceTree = ""; - }; - 081899162D34D62F0067BF01 /* NoticeListSection */ = { - isa = PBXGroup; - children = ( - 081899172D34D63E0067BF01 /* NoticeListSection.swift */, - 081899192D34D6430067BF01 /* NoticeListSectionCell.swift */, - ); - path = NoticeListSection; - sourceTree = ""; - }; - 0818991B2D34DF530067BF01 /* List */ = { - isa = PBXGroup; - children = ( - 081899152D34D6060067BF01 /* View */, - 081899092D34B3620067BF01 /* MyPageNoticeController.swift */, - 0818990B2D34B3670067BF01 /* MyPageNoticeReactor.swift */, - ); - path = List; - sourceTree = ""; - }; - 0818991C2D34DF5B0067BF01 /* Detail */ = { - isa = PBXGroup; - children = ( - 0818991D2D34DF7D0067BF01 /* MyPageNoticeDetailView.swift */, - 0818991F2D34DF880067BF01 /* MyPageNoticeDetailController.swift */, - 081899212D34DF8E0067BF01 /* MyPageNoticeDetailReactor.swift */, - ); - path = Detail; - sourceTree = ""; - }; - 081899232D3500A90067BF01 /* FAQ */ = { - isa = PBXGroup; - children = ( - 0818992A2D3506100067BF01 /* View */, - 081899262D3500BF0067BF01 /* FAQController.swift */, - 081899282D3500C50067BF01 /* FAQReactor.swift */, - ); - path = FAQ; - sourceTree = ""; - }; - 0818992A2D3506100067BF01 /* View */ = { - isa = PBXGroup; - children = ( - 0818992B2D3506160067BF01 /* FAQDropdownSection */, - 081899242D3500B80067BF01 /* FAQView.swift */, - ); - path = View; - sourceTree = ""; - }; - 0818992B2D3506160067BF01 /* FAQDropdownSection */ = { - isa = PBXGroup; - children = ( - 0818992C2D3506240067BF01 /* FAQDropdownSectionCell.swift */, - 0818992E2D3506290067BF01 /* FAQDropdownSection.swift */, - ); - path = FAQDropdownSection; - sourceTree = ""; - }; - 081899302D35F0C40067BF01 /* Bookmark */ = { - isa = PBXGroup; - children = ( - 0818994E2D363E3D0067BF01 /* ViewTypeModal */, - 0818994D2D363E340067BF01 /* Main */, - ); - path = Bookmark; - sourceTree = ""; - }; - 081899312D35F0D40067BF01 /* Recent */ = { - isa = PBXGroup; - children = ( - 081899422D35FE870067BF01 /* View */, - 0818993A2D35F1250067BF01 /* MyPageRecentController.swift */, - 0818993C2D35F12A0067BF01 /* MyPageRecentReactor.swift */, - ); - path = Recent; - sourceTree = ""; - }; - 081899422D35FE870067BF01 /* View */ = { - isa = PBXGroup; - children = ( - 081899432D35FE8D0067BF01 /* RecentPopUpSection */, - 081899382D35F11F0067BF01 /* MyPageRecentView.swift */, - ); - path = View; - sourceTree = ""; - }; - 081899432D35FE8D0067BF01 /* RecentPopUpSection */ = { - isa = PBXGroup; - children = ( - 081899442D35FEA10067BF01 /* RecentPopUpSection.swift */, - ); - path = RecentPopUpSection; - sourceTree = ""; - }; - 081899462D3632030067BF01 /* View */ = { - isa = PBXGroup; - children = ( - 081899472D3632070067BF01 /* PopUpCardSection */, - 08CBEA0C2D38ED0D00248007 /* CountButtonView.swift */, - ); - path = View; - sourceTree = ""; - }; - 081899472D3632070067BF01 /* PopUpCardSection */ = { - isa = PBXGroup; - children = ( - 081899492D36322B0067BF01 /* PopUpCardSection.swift */, - 0818994B2D3632320067BF01 /* PopUpCardSectionCell.swift */, - 08CBEA3D2D3FF6A100248007 /* PopUpCardView.swift */, - ); - path = PopUpCardSection; - sourceTree = ""; - }; - 0818994D2D363E340067BF01 /* Main */ = { - isa = PBXGroup; - children = ( - 081899462D3632030067BF01 /* View */, - 081899322D35F1090067BF01 /* MyPageBookmarkView.swift */, - 081899342D35F10F0067BF01 /* MyPageBookmarkController.swift */, - 081899362D35F1140067BF01 /* MyPageBookmarkReactor.swift */, - ); - path = Main; - sourceTree = ""; - }; - 0818994E2D363E3D0067BF01 /* ViewTypeModal */ = { - isa = PBXGroup; - children = ( - 0818994F2D363E5C0067BF01 /* BookMarkPopUpViewTypeModalView.swift */, - 081899512D363E640067BF01 /* BookMarkPopUpViewTypeModalController.swift */, - 081899532D363E6A0067BF01 /* BookMarkPopUpViewTypeModalReactor.swift */, - ); - path = ViewTypeModal; - sourceTree = ""; - }; - 082197A42D4E3E9B0054094A /* CommentMyMenu */ = { - isa = PBXGroup; - children = ( - 082197A62D4E3EE00054094A /* CommentMyMenuView.swift */, - 082197A82D4E3EE90054094A /* CommentMyMenuController.swift */, - 082197AA2D4E3EEF0054094A /* CommentMyMenuReactor.swift */, - ); - path = CommentMyMenu; - sourceTree = ""; - }; - 082197A52D4E3EAC0054094A /* CommentInfoMenu */ = { - isa = PBXGroup; - children = ( - 086F89C12D1E345D00CA4FC9 /* CommentUserInfo */, - 082197A42D4E3E9B0054094A /* CommentMyMenu */, - ); - path = CommentInfoMenu; - sourceTree = ""; - }; - 082197AE2D4E4E040054094A /* NormalCommentEdit */ = { - isa = PBXGroup; - children = ( - 082197AF2D4E4E190054094A /* NormalCommentEditView.swift */, - 082197B12D4E4E200054094A /* NormalCommentEditController.swift */, - 082197B32D4E4E280054094A /* NormalCommentEditReactor.swift */, - ); - path = NormalCommentEdit; - sourceTree = ""; - }; - 083A256B2CF361190099B58E /* Application */ = { - isa = PBXGroup; - children = ( - BDCA41C02CF35AC0005EECF6 /* AppDelegate.swift */, - BDCA41C22CF35AC0005EECF6 /* SceneDelegate.swift */, - ); - path = Application; - sourceTree = ""; - }; - 083A256C2CF361210099B58E /* Resource */ = { - isa = PBXGroup; - children = ( - 08DE8A132D525A4A0049BCAC /* Strings */, - 08B191C12CF615CA0057BC04 /* KeyPath.swift */, - 057151572D9D2E0800260615 /* Debug.xcconfig */, - 08B191532CF41D6F0057BC04 /* PP_loading.json */, - 08B191542CF41D6F0057BC04 /* PP_splash.json */, - 08B1914A2CF41D680057BC04 /* Font */, - BDCA41C92CF35AC1005EECF6 /* Assets.xcassets */, - BDCA41CB2CF35AC1005EECF6 /* LaunchScreen.storyboard */, - BDCA41CE2CF35AC1005EECF6 /* Info.plist */, - ); - path = Resource; - sourceTree = ""; - }; - 083A256D2CF3613C0099B58E /* Presentation */ = { - isa = PBXGroup; - children = ( - 08B1915F2CF430D40057BC04 /* Components */, - 083A25C22CF3635B0099B58E /* Scene */, - 083A259D2CF3620B0099B58E /* Utills */, - 08B191332CF366500057BC04 /* Extension */, - ); - path = Presentation; - sourceTree = ""; - }; - 083A25812CF361EF0099B58E /* Controllers */ = { - isa = PBXGroup; - children = ( - 083A257F2CF361EF0099B58E /* BaseTabmanController.swift */, - 083A25802CF361EF0099B58E /* BaseViewController.swift */, - ); - path = Controllers; - sourceTree = ""; - }; - 083A25962CF362090099B58E /* Sectionable */ = { - isa = PBXGroup; - children = ( - 083A25932CF362090099B58E /* Sectionable.swift */, - 083A25942CF362090099B58E /* SectionDecorationItem.swift */, - 083A25952CF362090099B58E /* SectionSupplementaryItem.swift */, - ); - path = Sectionable; - sourceTree = ""; - }; - 083A25982CF362090099B58E /* Interfaces */ = { - isa = PBXGroup; - children = ( - 083A25962CF362090099B58E /* Sectionable */, - 083A25972CF362090099B58E /* InOutputable.swift */, - ); - path = Interfaces; - sourceTree = ""; - }; - 083A259D2CF3620B0099B58E /* Utills */ = { - isa = PBXGroup; - children = ( - 083A25982CF362090099B58E /* Interfaces */, - 083A25812CF361EF0099B58E /* Controllers */, - 08CBEA382D3FABD300248007 /* ToastMaker */, - 4EDDEFB22D2D284B00CFAFA5 /* Common */, - ); - path = Utills; - sourceTree = ""; - }; - 083A259E2CF362310099B58E /* Domain */ = { - isa = PBXGroup; - children = ( - BD91037B2CF614A900BBCCAE /* Entities */, - BD91037F2CF614A900BBCCAE /* Repository */, - BD9103752CF614A900BBCCAE /* UseCase */, - ); - path = Domain; - sourceTree = ""; - }; - 083A259F2CF362360099B58E /* Data */ = { - isa = PBXGroup; - children = ( - BD91035A2CF6149D00BBCCAE /* Repository */, - BD9103602CF6149D00BBCCAE /* Network */, - ); - path = Data; - sourceTree = ""; - }; - 083A25A02CF3623C0099B58E /* Infrastructure */ = { - isa = PBXGroup; - children = ( - 089B4FD62D9A576F00FC0CC3 /* ImageLoader */, - 0841BA832CF9F61500049E31 /* PreSignedService */, - 083A25B12CF362670099B58E /* NetworkLayer */, - 08DC61F42CF765B5002A2F44 /* UserDefaultService.swift */, - 08DC61F22CF75037002A2F44 /* KeyChainService.swift */, - 08B191B72CF6092F0057BC04 /* AuthServiceable.swift */, - 08B191B52CF6092B0057BC04 /* AppleLoginService.swift */, - 08B191B32CF609260057BC04 /* KakaoLoginService.swift */, - 083A25BE2CF362770099B58E /* Logger */, - ); - path = Infrastructure; - sourceTree = ""; - }; - 083A25A42CF362670099B58E /* Common */ = { - isa = PBXGroup; - children = ( - 083A25A12CF362670099B58E /* NetworkError.swift */, - 083A25A22CF362670099B58E /* Requestable.swift */, - 083A25A32CF362670099B58E /* Responsable.swift */, - ); - path = Common; - sourceTree = ""; - }; - 083A25A82CF362670099B58E /* EndPoint */ = { - isa = PBXGroup; - children = ( - 083A25A52CF362670099B58E /* Endpoint.swift */, - 083A25A62CF362670099B58E /* MultipartEndPoint.swift */, - 083A25A72CF362670099B58E /* RequestEndpoint.swift */, - ); - path = EndPoint; - sourceTree = ""; - }; - 083A25AA2CF362670099B58E /* IndicatorMaker */ = { - isa = PBXGroup; - children = ( - 083A25A92CF362670099B58E /* IndicatorMaker.swift */, - ); - path = IndicatorMaker; - sourceTree = ""; - }; - 083A25AD2CF362670099B58E /* Interceptor */ = { - isa = PBXGroup; - children = ( - 083A25AB2CF362670099B58E /* FormDataInterceptor.swift */, - 083A25AC2CF362670099B58E /* TokenInterceptor.swift */, - ); - path = Interceptor; - sourceTree = ""; - }; - 083A25B02CF362670099B58E /* Provider */ = { - isa = PBXGroup; - children = ( - 083A25AE2CF362670099B58E /* Provider.swift */, - 083A25AF2CF362670099B58E /* ProviderImpl.swift */, - ); - path = Provider; - sourceTree = ""; - }; - 083A25B12CF362670099B58E /* NetworkLayer */ = { - isa = PBXGroup; - children = ( - 083A25A42CF362670099B58E /* Common */, - 083A25A82CF362670099B58E /* EndPoint */, - 083A25AA2CF362670099B58E /* IndicatorMaker */, - 083A25AD2CF362670099B58E /* Interceptor */, - 083A25B02CF362670099B58E /* Provider */, - ); - path = NetworkLayer; - sourceTree = ""; - }; - 083A25BE2CF362770099B58E /* Logger */ = { - isa = PBXGroup; - children = ( - 083A25BD2CF362770099B58E /* Logger.swift */, - ); - path = Logger; - sourceTree = ""; - }; - 083A25C22CF3635B0099B58E /* Scene */ = { - isa = PBXGroup; - children = ( - 086F89EF2D2269CD00CA4FC9 /* MyPage */, - 08A2E4772D1B069300102313 /* ImageDetail */, - 0841BABF2CFB5EC700049E31 /* TabbarController */, - 08DC62012CF8ABDA002A2F44 /* Home */, - 086DD9282D00869D00B97D3B /* Search */, - 083A25C42CF363A10099B58E /* SignUp */, - 083A25C32CF363650099B58E /* Login */, - BD9103912CF6166800BBCCAE /* Splash */, - 083C86092D073A08003F441C /* Detail */, - 083C86332D0C7EDB003F441C /* Comment */, - 4E755B1B2D2B9ABF00ADFB21 /* Admin */, - 4E685ECD2D12CEB6001EF91C /* Map */, - ); - path = Scene; - sourceTree = ""; - }; - 083A25C32CF363650099B58E /* Login */ = { - isa = PBXGroup; - children = ( - 086F89E72D2009CF00CA4FC9 /* Main */, - 086F89E82D2009D700CA4FC9 /* Sub */, - 08CBEA0A2D38DBD600248007 /* LastLoginView.swift */, - ); - path = Login; - sourceTree = ""; - }; - 083A25C42CF363A10099B58E /* SignUp */ = { - isa = PBXGroup; - children = ( - 08B1917B2CF46DD40057BC04 /* TermsDetail */, - 08B191572CF41E550057BC04 /* Main */, - 08B191682CF434A10057BC04 /* Step1 */, - 08B191802CF48A5C0057BC04 /* Step2 */, - 08B191892CF49FDE0057BC04 /* Step3 */, - 08B191922CF4A0E00057BC04 /* Step4 */, - 08DC61F62CF76831002A2F44 /* SignUpComplete */, - ); - path = SignUp; - sourceTree = ""; - }; - 083C86092D073A08003F441C /* Detail */ = { - isa = PBXGroup; - children = ( - 083C86212D087A14003F441C /* View */, - 083C860C2D073A1C003F441C /* DetailController.swift */, - 083C860E2D073A23003F441C /* DetailReactor.swift */, - ); - path = Detail; - sourceTree = ""; - }; - 083C86192D087316003F441C /* RequestDTO */ = { - isa = PBXGroup; - children = ( - 0899524E2D033B5A0022AEF9 /* GetSearchPopUpListRequestDTO.swift */, - 083C861B2D087337003F441C /* GetPopUpDetailRequestDTO.swift */, - 08A2E4942D1C078300102313 /* GetPopUpCommentRequestDTO.swift */, - ); - path = RequestDTO; - sourceTree = ""; - }; - 083C861A2D08731C003F441C /* ResponseDTO */ = { - isa = PBXGroup; - children = ( - 0899526B2D0473EC0022AEF9 /* GetSearchPopUpListResponseDTO.swift */, - 0899524A2D033A9C0022AEF9 /* GetClosePopUpListResponseDTO.swift */, - 0899524C2D033AA70022AEF9 /* GetOpenPopUpListResponseDTO.swift */, - 083C861D2D08737F003F441C /* GetPopUpDetailResponseDTO.swift */, - 08A2E4962D1C07F500102313 /* GetPopUpCommentResponseDTO.swift */, - ); - path = ResponseDTO; - sourceTree = ""; - }; - 083C86212D087A14003F441C /* View */ = { - isa = PBXGroup; - children = ( - 08DE8A0E2D5255000049BCAC /* DetailEmptyCommetSection */, - 088DE25B2D145E1F0030FA9E /* DetailSimilarSection */, - 088DE2522D144A6E0030FA9E /* DetailCommentSection */, - 088DE24D2D13018C0030FA9E /* DetailCommentTitleSection */, - 088DE2482D12F3250030FA9E /* DetailInfoSection */, - 083C86272D088069003F441C /* DetailContentSection */, - 083C86222D087A37003F441C /* DetailTitleSection */, - 083C860A2D073A15003F441C /* DetailView.swift */, - ); - path = View; - sourceTree = ""; - }; - 083C86222D087A37003F441C /* DetailTitleSection */ = { - isa = PBXGroup; - children = ( - 083C86232D087A44003F441C /* DetailTitleSection.swift */, - 083C86252D087A4E003F441C /* DetailTitleSectionCell.swift */, - ); - path = DetailTitleSection; - sourceTree = ""; - }; - 083C86272D088069003F441C /* DetailContentSection */ = { - isa = PBXGroup; - children = ( - 083C86282D088080003F441C /* DetailContentSection.swift */, - 083C862A2D08808C003F441C /* DetailContentSectionCell.swift */, - ); - path = DetailContentSection; - sourceTree = ""; - }; - 083C86332D0C7EDB003F441C /* Comment */ = { - isa = PBXGroup; - children = ( - 082197AE2D4E4E040054094A /* NormalCommentEdit */, - 082197A52D4E3EAC0054094A /* CommentInfoMenu */, - 086F89D12D1E6D9100CA4FC9 /* OtherUserComment */, - 086F89C82D1E429400CA4FC9 /* CommentUserBlock */, - 08A2E48D2D1BF6D900102313 /* CommentList */, - 08A2E47E2D1BCDB800102313 /* CommentDetail */, - 083C86572D0DEFB1003F441C /* CommentCheck */, - 083C86342D0C7EE3003F441C /* CommentSelected */, - 083C863B2D0C8BAF003F441C /* NormalCommentAdd */, - 083C865E2D0EC47B003F441C /* InstaComment */, - ); - path = Comment; - sourceTree = ""; - }; - 083C86342D0C7EE3003F441C /* CommentSelected */ = { - isa = PBXGroup; - children = ( - 083C86372D0C7EFC003F441C /* CommentSelectedView.swift */, - 083C86352D0C7EF4003F441C /* CommentSelectedController.swift */, - 083C86392D0C7F0A003F441C /* CommentSelectedReactor.swift */, - ); - path = CommentSelected; - sourceTree = ""; - }; - 083C863B2D0C8BAF003F441C /* NormalCommentAdd */ = { - isa = PBXGroup; - children = ( - 083C86422D0DCD9B003F441C /* View */, - 083C863C2D0C8BC4003F441C /* NormalCommentAddController.swift */, - 083C86402D0C8BD8003F441C /* NormalCommentAddReactor.swift */, - ); - path = NormalCommentAdd; - sourceTree = ""; - }; - 083C86422D0DCD9B003F441C /* View */ = { - isa = PBXGroup; - children = ( - 083C864D2D0DD317003F441C /* AddCommentImageSection */, - 083C86432D0DCDD5003F441C /* AddCommentTitleSection */, - 083C86482D0DCF7A003F441C /* AddCommentDescriptionSection */, - 083C86522D0DD7D1003F441C /* AddCommentSection */, - 083C863E2D0C8BCE003F441C /* NormalCommentAddView.swift */, - ); - path = View; - sourceTree = ""; - }; - 083C86432D0DCDD5003F441C /* AddCommentTitleSection */ = { - isa = PBXGroup; - children = ( - 083C86442D0DCDE8003F441C /* AddCommentTitleSectionCell.swift */, - 083C86462D0DCDFB003F441C /* AddCommentTitleSection.swift */, - ); - path = AddCommentTitleSection; - sourceTree = ""; - }; - 083C86482D0DCF7A003F441C /* AddCommentDescriptionSection */ = { - isa = PBXGroup; - children = ( - 083C86492D0DCF96003F441C /* AddCommentDescriptionSection.swift */, - 083C864B2D0DCF9B003F441C /* AddCommentDescriptionSectionCell.swift */, - ); - path = AddCommentDescriptionSection; - sourceTree = ""; - }; - 083C864D2D0DD317003F441C /* AddCommentImageSection */ = { - isa = PBXGroup; - children = ( - 083C864E2D0DD3A6003F441C /* AddCommentImageSection.swift */, - 083C86502D0DD3AB003F441C /* AddCommentImageSectionCell.swift */, - ); - path = AddCommentImageSection; - sourceTree = ""; - }; - 083C86522D0DD7D1003F441C /* AddCommentSection */ = { - isa = PBXGroup; - children = ( - 083C86532D0DD7E9003F441C /* AddCommentSection.swift */, - 083C86552D0DD7EE003F441C /* AddCommentSectionCell.swift */, - ); - path = AddCommentSection; - sourceTree = ""; - }; - 083C86572D0DEFB1003F441C /* CommentCheck */ = { - isa = PBXGroup; - children = ( - 083C86582D0DEFC3003F441C /* CommentCheckView.swift */, - 083C865A2D0DEFCF003F441C /* CommentCheckController.swift */, - 083C865C2D0DEFD5003F441C /* CommentCheckReactor.swift */, - ); - path = CommentCheck; - sourceTree = ""; - }; - 083C865E2D0EC47B003F441C /* InstaComment */ = { - isa = PBXGroup; - children = ( - 083C86652D0ECB23003F441C /* View */, - 083C86612D0EC49E003F441C /* InstaCommentAddController.swift */, - 083C86632D0EC4A5003F441C /* InstaCommentAddReactor.swift */, - ); - path = InstaComment; - sourceTree = ""; - }; - 083C86652D0ECB23003F441C /* View */ = { - isa = PBXGroup; - children = ( - 083C86662D0ECB2B003F441C /* InstaGuideSection */, - 083C865F2D0EC496003F441C /* InstaCommentAddView.swift */, - ); - path = View; - sourceTree = ""; - }; - 083C86662D0ECB2B003F441C /* InstaGuideSection */ = { - isa = PBXGroup; - children = ( - 083C866C2D0ECB7B003F441C /* InstaGuideChildSection */, - 083C86672D0ECB3C003F441C /* InstaGuideSection */, - ); - path = InstaGuideSection; - sourceTree = ""; - }; - 083C86672D0ECB3C003F441C /* InstaGuideSection */ = { - isa = PBXGroup; - children = ( - 083C86682D0ECB47003F441C /* InstaGuideSection.swift */, - 083C866A2D0ECB4F003F441C /* InstaGuideSectionCell.swift */, - ); - path = InstaGuideSection; - sourceTree = ""; - }; - 083C866C2D0ECB7B003F441C /* InstaGuideChildSection */ = { - isa = PBXGroup; - children = ( - 083C866D2D0ECB87003F441C /* InstaGuideChildSection.swift */, - 083C866F2D0ECB8E003F441C /* InstaGuideChildSectionCell.swift */, - ); - path = InstaGuideChildSection; - sourceTree = ""; - }; - 083C86712D0EE2A3003F441C /* CommentAPI */ = { - isa = PBXGroup; - children = ( - 083C86722D0EE2B1003F441C /* CommentAPIEndPoint.swift */, - 083C86742D0EE2B8003F441C /* RequestDTO */, - ); - path = CommentAPI; - sourceTree = ""; - }; - 083C86742D0EE2B8003F441C /* RequestDTO */ = { - isa = PBXGroup; - children = ( - 083C86752D0EE2CF003F441C /* PostCommentRequestDTO.swift */, - 082197AC2D4E49370054094A /* DeleteCommentRequestDTO.swift */, - 08DE8A0C2D5236840049BCAC /* PutCommentRequestDTO.swift */, - ); - path = RequestDTO; - sourceTree = ""; - }; - 0841BA832CF9F61500049E31 /* PreSignedService */ = { - isa = PBXGroup; - children = ( - 0841BA842CF9F62300049E31 /* PreSignedURLDTO.swift */, - 0841BA852CF9F62300049E31 /* PresignedURLRequestDTO.swift */, - 0841BA862CF9F62300049E31 /* PreSignedURLResponseDTO.swift */, - 0841BA812CF9F5DF00049E31 /* PreSignedService.swift */, - 0841BA8B2CF9F67100049E31 /* PreSignedAPIEndPoint.swift */, - ); - path = PreSignedService; - sourceTree = ""; - }; - 0841BA9D2CFA085700049E31 /* ImageBannerSection */ = { - isa = PBXGroup; - children = ( - 08DC620A2CF8AE0F002A2F44 /* ImageBannerSection.swift */, - 08DC620C2CF8AE16002A2F44 /* ImageBannerSectionCell.swift */, - ); - path = ImageBannerSection; - sourceTree = ""; - }; - 0841BA9E2CFA085F00049E31 /* ImageBannerChildSection */ = { - isa = PBXGroup; - children = ( - 0841BA8D2CF9F8A100049E31 /* ImageBannerChildSection.swift */, - 0841BA7F2CF9F34100049E31 /* ImageBannerChildSectionCell.swift */, - ); - path = ImageBannerChildSection; - sourceTree = ""; - }; - 0841BAA12CFA319400049E31 /* SpacingSection */ = { - isa = PBXGroup; - children = ( - 0841BAA22CFA31A300049E31 /* SpacingSection.swift */, - 0841BAA42CFA31A900049E31 /* SpacingSectionCell.swift */, - ); - path = SpacingSection; - sourceTree = ""; - }; - 0841BAA62CFA353500049E31 /* HomeTitleSection */ = { - isa = PBXGroup; - children = ( - 0841BAA72CFA354500049E31 /* HomeTitleSection.swift */, - 0841BAA92CFA354C00049E31 /* HomeTitleSectionCell.swift */, - ); - path = HomeTitleSection; - sourceTree = ""; - }; - 0841BAAD2CFA38CB00049E31 /* HomeCardSection */ = { - isa = PBXGroup; - children = ( - 0841BAAE2CFA38EA00049E31 /* HomeCardSection.swift */, - 0841BAB02CFA38F500049E31 /* HomeCardSectionCell.swift */, - ); - path = HomeCardSection; - sourceTree = ""; - }; - 0841BAB22CFABEA900049E31 /* HomePopularCardSection */ = { - isa = PBXGroup; - children = ( - 0841BAB32CFABED700049E31 /* HomePopularCardSection.swift */, - 0841BAB52CFABEDC00049E31 /* HomePopularCardSectionCell.swift */, - ); - path = HomePopularCardSection; - sourceTree = ""; - }; - 0841BABF2CFB5EC700049E31 /* TabbarController */ = { - isa = PBXGroup; - children = ( - 0841BAC22CFB600800049E31 /* TabbarController.swift */, - ); - path = TabbarController; - sourceTree = ""; - }; - 086DD8C92CFDFE9100B97D3B /* Main */ = { - isa = PBXGroup; - children = ( - 08DC62082CF8ADB7002A2F44 /* View */, - 08DC62042CF8AC0E002A2F44 /* HomeController.swift */, - 08DC62062CF8AC14002A2F44 /* HomeReactor.swift */, - ); - path = Main; - sourceTree = ""; - }; - 086DD8CA2CFDFE9900B97D3B /* List */ = { - isa = PBXGroup; - children = ( - 086DD8E12CFF355200B97D3B /* View */, - 086DD8CB2CFDFEA800B97D3B /* HomeListController.swift */, - 086DD8CF2CFDFEB900B97D3B /* HomeListReactor.swift */, - 086DD8D22CFDFF1500B97D3B /* HomePopUpType.swift */, - ); - path = List; - sourceTree = ""; - }; - 086DD8D42CFF181500B97D3B /* UserAPI */ = { - isa = PBXGroup; - children = ( - 086DD8D52CFF182100B97D3B /* UserAPIEndPoint.swift */, - 086F89DD2D1E7A7A00CA4FC9 /* ResponseDTO */, - 086F89DC2D1E7A7100CA4FC9 /* RequesetDTO */, - ); - path = UserAPI; - sourceTree = ""; - }; - 086DD8E12CFF355200B97D3B /* View */ = { - isa = PBXGroup; - children = ( - 086DD8CD2CFDFEB000B97D3B /* HomeListView.swift */, - 086DD8E22CFF356300B97D3B /* HomeCardGridSection.swift */, - ); - path = View; - sourceTree = ""; - }; - 086DD9282D00869D00B97D3B /* Search */ = { - isa = PBXGroup; - children = ( - 0899523F2D031E470022AEF9 /* Main */, - 0899525E2D0366A20022AEF9 /* AfterSearch */, - 0899525D2D0366950022AEF9 /* BeforeSearch */, - 089952562D03478D0022AEF9 /* CategoryController */, - 089952402D031E500022AEF9 /* SortedController */, - ); - path = Search; - sourceTree = ""; - }; - 086DD9312D0095DA00B97D3B /* View */ = { - isa = PBXGroup; - children = ( - 086DD93E2D01EED200B97D3B /* SearchCountTitleSection */, - 086DD9372D0099FB00B97D3B /* CancelableTagSection */, - 086DD9322D00960700B97D3B /* SearchTitleSection */, - 086DD92D2D0086B900B97D3B /* SearchView.swift */, - ); - path = View; - sourceTree = ""; - }; - 086DD9322D00960700B97D3B /* SearchTitleSection */ = { - isa = PBXGroup; - children = ( - 086DD9332D00962500B97D3B /* SearchTitleSectionCell.swift */, - 086DD9352D00963900B97D3B /* SearchTitleSection.swift */, - ); - path = SearchTitleSection; - sourceTree = ""; - }; - 086DD9372D0099FB00B97D3B /* CancelableTagSection */ = { - isa = PBXGroup; - children = ( - 086DD93A2D009A1C00B97D3B /* CancelableTagSection.swift */, - 086DD93C2D009A2600B97D3B /* CancelableTagSectionCell.swift */, - ); - path = CancelableTagSection; - sourceTree = ""; - }; - 086DD93E2D01EED200B97D3B /* SearchCountTitleSection */ = { - isa = PBXGroup; - children = ( - 086DD93F2D01EEEB00B97D3B /* SearchCountTitleSection.swift */, - 086DD9412D01EEF700B97D3B /* SearchCountTitleSectionCell.swift */, - ); - path = SearchCountTitleSection; - sourceTree = ""; - }; - 086F89C12D1E345D00CA4FC9 /* CommentUserInfo */ = { - isa = PBXGroup; - children = ( - 086F89C22D1E347700CA4FC9 /* CommentUserInfoView.swift */, - 086F89C42D1E347E00CA4FC9 /* CommentUserInfoController.swift */, - 086F89C62D1E348400CA4FC9 /* CommentUserInfoReactor.swift */, - ); - path = CommentUserInfo; - sourceTree = ""; - }; - 086F89C82D1E429400CA4FC9 /* CommentUserBlock */ = { - isa = PBXGroup; - children = ( - 086F89C92D1E42A700CA4FC9 /* CommentUserBlockView.swift */, - 086F89CB2D1E42B000CA4FC9 /* CommentUserBlockController.swift */, - 086F89CD2D1E42B500CA4FC9 /* CommentUserBlockReactor.swift */, - ); - path = CommentUserBlock; - sourceTree = ""; - }; - 086F89D12D1E6D9100CA4FC9 /* OtherUserComment */ = { - isa = PBXGroup; - children = ( - 086F89E12D1FE8F200CA4FC9 /* View */, - 086F89D42D1E6DB100CA4FC9 /* OtherUserCommentController.swift */, - 086F89D62D1E6DB700CA4FC9 /* OtherUserCommentReactor.swift */, - ); - path = OtherUserComment; - sourceTree = ""; - }; - 086F89DC2D1E7A7100CA4FC9 /* RequesetDTO */ = { - isa = PBXGroup; - children = ( - 086DD8D72CFF185200B97D3B /* PostBookmarkPopUpRequestDTO.swift */, - 08A2E46B2D15BC5000102313 /* CommentLikeRequestDTO.swift */, - 086F89CF2D1E60A100CA4FC9 /* PostUserBlockRequestDTO.swift */, - 086F89D82D1E79E200CA4FC9 /* GetOtherUserCommentListRequestDTO.swift */, - 081898CF2D30EA900067BF01 /* PutUserTailoredInfoRequestDTO.swift */, - 081898D72D310C160067BF01 /* PutUserCategoryRequestDTO.swift */, - 081898D92D32559B0067BF01 /* PutUserProfileRequestDTO.swift */, - 081898E72D3392480067BF01 /* GetMyCommentRequestDTO.swift */, - 081898FE2D33DA440067BF01 /* GetBlockUserListRequestDTO.swift */, - ); - path = RequesetDTO; - sourceTree = ""; - }; - 086F89DD2D1E7A7A00CA4FC9 /* ResponseDTO */ = { - isa = PBXGroup; - children = ( - 086F89DA2D1E7A6C00CA4FC9 /* GetOtherUserCommentedPopUpListResponseDTO.swift */, - 081898C22D30AE2C0067BF01 /* GetMyProfileResponseDTO.swift */, - 086F89F62D226DF600CA4FC9 /* GetMyPageResponseDTO.swift */, - 081898AD2D2CFC230067BF01 /* GetWithdrawlListResponseDTO.swift */, - 081898E32D3391550067BF01 /* GetMyCommentedPopUpResponseDTO.swift */, - 081898FA2D33D9320067BF01 /* GetBlockUserListResponseDTO.swift */, - 0818990D2D34B68C0067BF01 /* GetNoticeListResponseDTO.swift */, - 081899112D34CA9E0067BF01 /* GetNoticeDetailResponseDTO.swift */, - 0818993E2D35FBE00067BF01 /* GetRecentPopUpResponseDTO.swift */, - ); - path = ResponseDTO; - sourceTree = ""; - }; - 086F89DE2D1E7CBE00CA4FC9 /* UserAPI */ = { - isa = PBXGroup; - children = ( - 086F89DF2D1E7CC700CA4FC9 /* GetOtherUserCommentedPopUpListResponse.swift */, - 086F89F82D226EEB00CA4FC9 /* GetMyPageResponse.swift */, - 081898AF2D2CFCA40067BF01 /* GetWithdrawlListResponse.swift */, - 081898C42D30AEF40067BF01 /* GetMyProfileResponse.swift */, - 081898E52D3391CB0067BF01 /* GetMyCommentResponse.swift */, - 081898FC2D33D9ED0067BF01 /* GetBlockUserListResponse.swift */, - 0818990F2D34B7240067BF01 /* GetNoticeListResponse.swift */, - 081899132D34CAEA0067BF01 /* GetNoticeDetailResponse.swift */, - 081899402D35FDA10067BF01 /* GetRecentPopUpResponse.swift */, - ); - name = UserAPI; - sourceTree = ""; - }; - 086F89E12D1FE8F200CA4FC9 /* View */ = { - isa = PBXGroup; - children = ( - 086F89E22D1FE8F800CA4FC9 /* OtherUserCommentSection */, - 086F89D22D1E6DA600CA4FC9 /* OtherUserCommentView.swift */, - ); - path = View; - sourceTree = ""; - }; - 086F89E22D1FE8F800CA4FC9 /* OtherUserCommentSection */ = { - isa = PBXGroup; - children = ( - 086F89E32D1FE91300CA4FC9 /* OtherUserCommentSection.swift */, - 086F89E52D1FE91800CA4FC9 /* OtherUserCommentSectionCell.swift */, - ); - path = OtherUserCommentSection; - sourceTree = ""; - }; - 086F89E72D2009CF00CA4FC9 /* Main */ = { - isa = PBXGroup; - children = ( - 083A25CB2CF363CB0099B58E /* LoginView.swift */, - 083A25C72CF363C00099B58E /* LoginController.swift */, - 083A25C92CF363C60099B58E /* LoginReactor.swift */, - ); - path = Main; - sourceTree = ""; - }; - 086F89E82D2009D700CA4FC9 /* Sub */ = { - isa = PBXGroup; - children = ( - 086F89E92D2009E300CA4FC9 /* SubLoginView.swift */, - 086F89EB2D2009EB00CA4FC9 /* SubLoginController.swift */, - 086F89ED2D2009F100CA4FC9 /* SubLoginReactor.swift */, - ); - path = Sub; - sourceTree = ""; - }; - 086F89EF2D2269CD00CA4FC9 /* MyPage */ = { - isa = PBXGroup; - children = ( - 08DE8A192D5261CD0049BCAC /* Terms */, - 081899312D35F0D40067BF01 /* Recent */, - 081899302D35F0C40067BF01 /* Bookmark */, - 081899232D3500A90067BF01 /* FAQ */, - 081899062D34B3470067BF01 /* Notice */, - 081898F12D33D6930067BF01 /* Block */, - 081898B82D2E5F420067BF01 /* MyComment */, - 081898992D2BAA200067BF01 /* Withdrawl */, - 081898922D2965B10067BF01 /* ProfileEdit */, - 081898912D2962E30067BF01 /* Main */, - ); - path = MyPage; - sourceTree = ""; - }; - 086F89FA2D23B84900CA4FC9 /* View */ = { - isa = PBXGroup; - children = ( - 0818988C2D295DAD0067BF01 /* MyPageLogoutSection */, - 086F8A162D265C5200CA4FC9 /* MyPageListSection */, - 086F8A0D2D26296600CA4FC9 /* MyPageCommentSection */, - 086F8A082D2621DB00CA4FC9 /* MyPageMyCommentTitleSection */, - 086F8A032D23CB2400CA4FC9 /* MyPageProfileSection */, - 086F89F02D2269D800CA4FC9 /* MyPageView.swift */, - ); - path = View; - sourceTree = ""; - }; - 086F8A032D23CB2400CA4FC9 /* MyPageProfileSection */ = { - isa = PBXGroup; - children = ( - 086F8A042D23CB3300CA4FC9 /* MyPageProfileSection.swift */, - 086F8A062D23CB3800CA4FC9 /* MyPageProfileSectionCell.swift */, - ); - path = MyPageProfileSection; - sourceTree = ""; - }; - 086F8A082D2621DB00CA4FC9 /* MyPageMyCommentTitleSection */ = { - isa = PBXGroup; - children = ( - 086F8A092D2621EE00CA4FC9 /* MyPageMyCommentTitleSection.swift */, - 086F8A0B2D2621F400CA4FC9 /* MyPageMyCommentTitleSectionCell.swift */, - ); - path = MyPageMyCommentTitleSection; - sourceTree = ""; - }; - 086F8A0D2D26296600CA4FC9 /* MyPageCommentSection */ = { - isa = PBXGroup; - children = ( - 086F8A0E2D26297900CA4FC9 /* MyPageCommentSection.swift */, - 086F8A102D26297D00CA4FC9 /* MyPageCommentSectionCell.swift */, - ); - path = MyPageCommentSection; - sourceTree = ""; - }; - 086F8A162D265C5200CA4FC9 /* MyPageListSection */ = { - isa = PBXGroup; - children = ( - 086F8A172D265C5F00CA4FC9 /* MyPageListSection.swift */, - 086F8A192D265C6300CA4FC9 /* MyPageListSectionCell.swift */, - ); - path = MyPageListSection; - sourceTree = ""; - }; - 088DE2482D12F3250030FA9E /* DetailInfoSection */ = { - isa = PBXGroup; - children = ( - 088DE2492D12F3360030FA9E /* DetailInfoSection.swift */, - 088DE24B2D12F33B0030FA9E /* DetailInfoSectionCell.swift */, - ); - path = DetailInfoSection; - sourceTree = ""; - }; - 088DE24D2D13018C0030FA9E /* DetailCommentTitleSection */ = { - isa = PBXGroup; - children = ( - 088DE24E2D13019A0030FA9E /* DetailCommentTitleSection.swift */, - 088DE2502D13019E0030FA9E /* DetailCommentTitleSectionCell.swift */, - ); - path = DetailCommentTitleSection; - sourceTree = ""; - }; - 088DE2522D144A6E0030FA9E /* DetailCommentSection */ = { - isa = PBXGroup; - children = ( - 088DE2532D144A7E0030FA9E /* DetailCommentSection.swift */, - 088DE2552D144A830030FA9E /* DetailCommentSectionCell.swift */, - 088DE2572D144B0F0030FA9E /* DetailCommentProfileView.swift */, - 088DE2592D1458620030FA9E /* DetailCommentImageCell.swift */, - ); - path = DetailCommentSection; - sourceTree = ""; - }; - 088DE25B2D145E1F0030FA9E /* DetailSimilarSection */ = { - isa = PBXGroup; - children = ( - 088DE25C2D145E3A0030FA9E /* DetailSimilarSection.swift */, - 088DE25E2D145E3F0030FA9E /* DetailSimilarSectionCell.swift */, - ); - path = DetailSimilarSection; - sourceTree = ""; - }; - 0899523F2D031E470022AEF9 /* Main */ = { - isa = PBXGroup; - children = ( - 089952612D0366D30022AEF9 /* SearchMainView.swift */, - 0899525F2D0366C40022AEF9 /* SearchMainController.swift */, - 089952632D0366DA0022AEF9 /* SearchMainReactor.swift */, - ); - path = Main; - sourceTree = ""; - }; - 089952402D031E500022AEF9 /* SortedController */ = { - isa = PBXGroup; - children = ( - 089952452D031E740022AEF9 /* SearchSortedView.swift */, - 089952412D031E650022AEF9 /* SearchSortedController.swift */, - 089952432D031E6D0022AEF9 /* SearchSortedReactor.swift */, - ); - path = SortedController; - sourceTree = ""; - }; - 089952472D033A0E0022AEF9 /* PopUpAPI */ = { - isa = PBXGroup; - children = ( - 089952482D033A1C0022AEF9 /* PopUpAPIEndPoint.swift */, - 083C861A2D08731C003F441C /* ResponseDTO */, - 083C86192D087316003F441C /* RequestDTO */, - ); - path = PopUpAPI; - sourceTree = ""; - }; - 089952562D03478D0022AEF9 /* CategoryController */ = { - isa = PBXGroup; - children = ( - 0899525B2D0347BD0022AEF9 /* SearchCategoryView.swift */, - 089952572D0347AC0022AEF9 /* SearchCategoryController.swift */, - 089952592D0347B40022AEF9 /* SearchCategoryReactor.swift */, - ); - path = CategoryController; - sourceTree = ""; - }; - 0899525D2D0366950022AEF9 /* BeforeSearch */ = { - isa = PBXGroup; - children = ( - 086DD9312D0095DA00B97D3B /* View */, - 086DD9292D0086AA00B97D3B /* SearchController.swift */, - 086DD92B2D0086B100B97D3B /* SearchReactor.swift */, - ); - path = BeforeSearch; - sourceTree = ""; - }; - 0899525E2D0366A20022AEF9 /* AfterSearch */ = { - isa = PBXGroup; - children = ( - 089952762D0476590022AEF9 /* View */, - 089952652D046CCD0022AEF9 /* SearchResultController.swift */, - 089952672D046CD80022AEF9 /* SearchResultReactor.swift */, - ); - path = AfterSearch; - sourceTree = ""; - }; - 0899526F2D0474430022AEF9 /* PopUpAPI */ = { - isa = PBXGroup; - children = ( - 089952502D033C410022AEF9 /* GetSearchBottomPopUpListResponse.swift */, - 0899526D2D0474340022AEF9 /* GetSearchPopUpListResponse.swift */, - 083C861F2D087445003F441C /* GetPopUpDetailResponse.swift */, - 08A2E4982D1C08D600102313 /* GetPopUpCommentResponse.swift */, - ); - path = PopUpAPI; - sourceTree = ""; - }; - 089952712D0475D70022AEF9 /* SearchResultCountSection */ = { - isa = PBXGroup; - children = ( - 089952722D0475E90022AEF9 /* SearchResultCountSection.swift */, - 089952742D0475F20022AEF9 /* SearchResultCountSectionCell.swift */, - ); - path = SearchResultCountSection; - sourceTree = ""; - }; - 089952762D0476590022AEF9 /* View */ = { - isa = PBXGroup; - children = ( - 089952712D0475D70022AEF9 /* SearchResultCountSection */, - 089952692D046CDE0022AEF9 /* SearchResultView.swift */, - ); - path = View; - sourceTree = ""; - }; - 089B4FD62D9A576F00FC0CC3 /* ImageLoader */ = { - isa = PBXGroup; - children = ( - 089B4FD72D9A57AE00FC0CC3 /* ImageLoader.swift */, - 089B4FDE2D9A8F9A00FC0CC3 /* MemoryStorage.swift */, - 08CFD3912D9BDE99004CDD50 /* DiskStorage.swift */, - ); - path = ImageLoader; - sourceTree = ""; - }; - 08A2E4772D1B069300102313 /* ImageDetail */ = { - isa = PBXGroup; - children = ( - 08A2E4782D1B06A300102313 /* ImageDetailView.swift */, - 08A2E47A2D1B06AA00102313 /* ImageDetailController.swift */, - 08A2E47C2D1B06B000102313 /* ImageDetailReactor.swift */, - ); - path = ImageDetail; - sourceTree = ""; - }; - 08A2E47E2D1BCDB800102313 /* CommentDetail */ = { - isa = PBXGroup; - children = ( - 08A2E4872D1BD86600102313 /* View */, - 08A2E4812D1BCDEA00102313 /* CommentDetailController.swift */, - 08A2E4832D1BCDEF00102313 /* CommentDetailReactor.swift */, - ); - path = CommentDetail; - sourceTree = ""; - }; - 08A2E4872D1BD86600102313 /* View */ = { - isa = PBXGroup; - children = ( - 08A2E4882D1BDA7500102313 /* CommentDetailContentSection */, - 08A2E4852D1BD85C00102313 /* CommentDetailImageSection.swift */, - 08A2E47F2D1BCDE300102313 /* CommentDetailView.swift */, - ); - path = View; - sourceTree = ""; - }; - 08A2E4882D1BDA7500102313 /* CommentDetailContentSection */ = { - isa = PBXGroup; - children = ( - 08A2E4892D1BDA8400102313 /* CommentDetailContentSection.swift */, - 08A2E48B2D1BDA8A00102313 /* CommentDetailContentSectionCell.swift */, - ); - path = CommentDetailContentSection; - sourceTree = ""; - }; - 08A2E48D2D1BF6D900102313 /* CommentList */ = { - isa = PBXGroup; - children = ( - 08A2E49A2D1C414C00102313 /* View */, - 08A2E4902D1BF6EA00102313 /* CommentListController.swift */, - 08A2E4922D1BF6EF00102313 /* CommentListReactor.swift */, - ); - path = CommentList; - sourceTree = ""; - }; - 08A2E49A2D1C414C00102313 /* View */ = { - isa = PBXGroup; - children = ( - 08A2E49B2D1C415500102313 /* CommentListTitleSection */, - 08A2E48E2D1BF6E500102313 /* CommentListView.swift */, - ); - path = View; - sourceTree = ""; - }; - 08A2E49B2D1C415500102313 /* CommentListTitleSection */ = { - isa = PBXGroup; - children = ( - 08A2E49C2D1C416800102313 /* CommentListTitleSection.swift */, - 08A2E49E2D1C417000102313 /* CommentListTitleSectionCell.swift */, - ); - path = CommentListTitleSection; - sourceTree = ""; - }; - 08B191332CF366500057BC04 /* Extension */ = { - isa = PBXGroup; - children = ( - 08B1919F2CF4AA0E0057BC04 /* Reactive+.swift */, - 0841BABB2CFB59E200049E31 /* String?+.swift */, - 08B191402CF367FF0057BC04 /* UIFont+.swift */, - 08B1913E2CF367FA0057BC04 /* UIColor+.swift */, - 08B191352CF366670057BC04 /* UICollectionReusableView+.swift */, - 08B191342CF366670057BC04 /* UICollectionViewCell+.swift */, - 08B191362CF366670057BC04 /* UITableViewCell+.swift */, - 08B1913A2CF366A00057BC04 /* UIApplication+.swift */, - 08B191772CF442230057BC04 /* UIImage+.swift */, - 0841BAAB2CFA35F300049E31 /* UILabel+.swift */, - 0841BABD2CFB5AA600049E31 /* Date?+.swift */, - 086DD8C72CFDEA9200B97D3B /* UIView+.swift */, - 086DD8DF2CFF2C3700B97D3B /* UIImageView+.swift */, - 086DD92F2D0090E900B97D3B /* UITextField+.swift */, - 081898B62D2D23A90067BF01 /* UINavigationController+.swift */, - ); - path = Extension; - sourceTree = ""; - }; - 08B1914A2CF41D680057BC04 /* Font */ = { - isa = PBXGroup; - children = ( - 08B191422CF41D680057BC04 /* GothicA1-Bold.ttf */, - 08B191432CF41D680057BC04 /* GothicA1-Light.ttf */, - 08B191442CF41D680057BC04 /* GothicA1-Medium.ttf */, - 08B191452CF41D680057BC04 /* GothicA1-Regular.ttf */, - 08B191462CF41D680057BC04 /* Poppins-Bold.ttf */, - 08B191472CF41D680057BC04 /* Poppins-Light.ttf */, - 08B191482CF41D680057BC04 /* Poppins-Medium.ttf */, - 08B191492CF41D680057BC04 /* Poppins-Regular.ttf */, - ); - path = Font; - sourceTree = ""; - }; - 08B191572CF41E550057BC04 /* Main */ = { - isa = PBXGroup; - children = ( - 08B1915E2CF430C00057BC04 /* View */, - 08B191582CF41E610057BC04 /* SignUpMainController.swift */, - 08B1915A2CF41E690057BC04 /* SignUpMainReactor.swift */, - ); - path = Main; - sourceTree = ""; - }; - 08B1915E2CF430C00057BC04 /* View */ = { - isa = PBXGroup; - children = ( - 08B1915C2CF41E6F0057BC04 /* SignUpMainView.swift */, - ); - path = View; - sourceTree = ""; - }; - 08B1915F2CF430D40057BC04 /* Components */ = { - isa = PBXGroup; - children = ( - 08B191B12CF5C0A60057BC04 /* PPPicker.swift */, - 08B191702CF4398D0057BC04 /* PPLabel.swift */, - 08B191752CF440C40057BC04 /* PPButton.swift */, - 08B191662CF432220057BC04 /* PPCancelHeaderView.swift */, - BD226D502CF6DB290038C984 /* PPReturnHeaderView.swift */, - 08B191A32CF5A7030057BC04 /* PPSegmentedControl.swift */, - 08B191642CF430F80057BC04 /* PPProgressIndicator */, - ); - path = Components; - sourceTree = ""; - }; - 08B191642CF430F80057BC04 /* PPProgressIndicator */ = { - isa = PBXGroup; - children = ( - 08B191602CF430E70057BC04 /* PPProgressView.swift */, - 08B191622CF430F30057BC04 /* PPProgressIndicator.swift */, - ); - path = PPProgressIndicator; - sourceTree = ""; - }; - 08B191682CF434A10057BC04 /* Step1 */ = { - isa = PBXGroup; - children = ( - 08B191722CF43D900057BC04 /* View */, - 08B191692CF434B80057BC04 /* SignUpStep1Controller.swift */, - 08B1916D2CF434CF0057BC04 /* SignUpStep1Reactor.swift */, - ); - path = Step1; - sourceTree = ""; - }; - 08B191722CF43D900057BC04 /* View */ = { - isa = PBXGroup; - children = ( - 08B1916B2CF434C30057BC04 /* SignUpStep1View.swift */, - 08B191732CF43DF40057BC04 /* SignUpCheckBoxButton.swift */, - 08B191792CF452B30057BC04 /* SignUpTermsView.swift */, - ); - path = View; - sourceTree = ""; - }; - 08B1917B2CF46DD40057BC04 /* TermsDetail */ = { - isa = PBXGroup; - children = ( - 08B1917E2CF46DF20057BC04 /* TermsDetailView.swift */, - 08B1917C2CF46DE30057BC04 /* TermsDetailController.swift */, - ); - path = TermsDetail; - sourceTree = ""; - }; - 08B191802CF48A5C0057BC04 /* Step2 */ = { - isa = PBXGroup; - children = ( - 08B191832CF48A820057BC04 /* SignUpStep2View.swift */, - 08B191812CF48A7B0057BC04 /* SignUpStep2Controller.swift */, - 08B191852CF48A8B0057BC04 /* SignUpStep2Reactor.swift */, - 08B191872CF48FAE0057BC04 /* NickNameState.swift */, - 081898DB2D326DC10067BF01 /* IntroState.swift */, - ); - path = Step2; - sourceTree = ""; - }; - 08B191892CF49FDE0057BC04 /* Step3 */ = { - isa = PBXGroup; - children = ( - 08B191992CF4A63E0057BC04 /* View */, - 08B1918E2CF4A0020057BC04 /* SignUpStep3Controller.swift */, - 08B191902CF4A00E0057BC04 /* SignUpStep3Reactor.swift */, - ); - path = Step3; - sourceTree = ""; - }; - 08B191922CF4A0E00057BC04 /* Step4 */ = { - isa = PBXGroup; - children = ( - 08B191AA2CF5BF8E0057BC04 /* AgeSelectedModal */, - 08B191A92CF5BF860057BC04 /* Main */, - ); - path = Step4; - sourceTree = ""; - }; - 08B191992CF4A63E0057BC04 /* View */ = { - isa = PBXGroup; - children = ( - 08B1919A2CF4A7700057BC04 /* TagSection */, - 08B1918C2CF49FF70057BC04 /* SignUpStep3View.swift */, - ); - path = View; - sourceTree = ""; - }; - 08B1919A2CF4A7700057BC04 /* TagSection */ = { - isa = PBXGroup; - children = ( - 08B1919B2CF4A77C0057BC04 /* TagSection.swift */, - 08B1919D2CF4A7830057BC04 /* TagSectionCell.swift */, - ); - path = TagSection; - sourceTree = ""; - }; - 08B191A82CF5A94B0057BC04 /* View */ = { - isa = PBXGroup; - children = ( - 08B191932CF4A0F00057BC04 /* SignUpStep4View.swift */, - 08B191A62CF5A9430057BC04 /* AgeSelectedButton.swift */, - ); - path = View; - sourceTree = ""; - }; - 08B191A92CF5BF860057BC04 /* Main */ = { - isa = PBXGroup; - children = ( - 08B191A82CF5A94B0057BC04 /* View */, - 08B191952CF4A0FA0057BC04 /* SignUpStep4Controller.swift */, - 08B191972CF4A1010057BC04 /* SignUpStep4Reactor.swift */, - ); - path = Main; - sourceTree = ""; - }; - 08B191AA2CF5BF8E0057BC04 /* AgeSelectedModal */ = { - isa = PBXGroup; - children = ( - 08B191AD2CF5BFA60057BC04 /* AgeSelectedView.swift */, - 08B191AB2CF5BF9D0057BC04 /* AgeSelectedController.swift */, - 08B191AF2CF5BFAE0057BC04 /* AgeSelectedReactor.swift */, - ); - path = AgeSelectedModal; - sourceTree = ""; - }; - 08CBE9FF2D38986E00248007 /* ResponseDTO */ = { - isa = PBXGroup; - children = ( - BD91034F2CF6149D00BBCCAE /* LoginResponseDTO.swift */, - 08CBEA022D38989E00248007 /* PostTokenReissueResponseDTO.swift */, - ); - path = ResponseDTO; - sourceTree = ""; - }; - 08CBEA042D38990600248007 /* AuthAPI */ = { - isa = PBXGroup; - children = ( - BD91037A2CF614A900BBCCAE /* LoginResponse.swift */, - 08CBEA052D38991600248007 /* PostTokenReissueResponse.swift */, - ); - path = AuthAPI; - sourceTree = ""; - }; - 08CBEA382D3FABD300248007 /* ToastMaker */ = { - isa = PBXGroup; - children = ( - 08B191A12CF4AE890057BC04 /* ToastMaker.swift */, - 08CBEA392D3FABE100248007 /* ToastView.swift */, - 08CBEA3B2D3FABED00248007 /* BookMarkToastView.swift */, - ); - path = ToastMaker; - sourceTree = ""; - }; - 08DC61F62CF76831002A2F44 /* SignUpComplete */ = { - isa = PBXGroup; - children = ( - 08DC61F72CF76843002A2F44 /* SignUpCompleteView.swift */, - 08DC61F92CF7684F002A2F44 /* SignUpCompleteController.swift */, - 08DC61FB2CF76862002A2F44 /* SignUpCompleteReactor.swift */, - ); - path = SignUpComplete; - sourceTree = ""; - }; - 08DC62012CF8ABDA002A2F44 /* Home */ = { - isa = PBXGroup; - children = ( - 086DD8CA2CFDFE9900B97D3B /* List */, - 086DD8C92CFDFE9100B97D3B /* Main */, - ); - path = Home; - sourceTree = ""; - }; - 08DC62082CF8ADB7002A2F44 /* View */ = { - isa = PBXGroup; - children = ( - 0841BAB22CFABEA900049E31 /* HomePopularCardSection */, - 0841BAAD2CFA38CB00049E31 /* HomeCardSection */, - 0841BAA62CFA353500049E31 /* HomeTitleSection */, - 0841BAA12CFA319400049E31 /* SpacingSection */, - 08DC62092CF8ADFF002A2F44 /* ImageBannerSection */, - 0841BAB72CFAC41300049E31 /* SectionBackGroundDecorationView.swift */, - 08DC62022CF8AC06002A2F44 /* HomeView.swift */, - 0841BAB92CFAE5BE00049E31 /* HomeHeaderView.swift */, - ); - path = View; - sourceTree = ""; - }; - 08DC62092CF8ADFF002A2F44 /* ImageBannerSection */ = { - isa = PBXGroup; - children = ( - 0841BA9D2CFA085700049E31 /* ImageBannerSection */, - 0841BA9E2CFA085F00049E31 /* ImageBannerChildSection */, - ); - path = ImageBannerSection; - sourceTree = ""; - }; - 08DC620E2CF8B36D002A2F44 /* ResponseDTO */ = { - isa = PBXGroup; - children = ( - BD9103512CF6149D00BBCCAE /* BannerPopUpStoreDTO.swift */, - BD9103542CF6149D00BBCCAE /* PopUpStoreResponseDTO.swift */, - BD9103522CF6149D00BBCCAE /* GetHomeInfoResponseDTO.swift */, - ); - path = ResponseDTO; - sourceTree = ""; - }; - 08DE8A0E2D5255000049BCAC /* DetailEmptyCommetSection */ = { - isa = PBXGroup; - children = ( - 08DE8A0F2D5255110049BCAC /* DetailEmptyCommetSection.swift */, - 08DE8A112D5255180049BCAC /* DetailEmptyCommetSectionCell.swift */, - ); - path = DetailEmptyCommetSection; - sourceTree = ""; - }; - 08DE8A132D525A4A0049BCAC /* Strings */ = { - isa = PBXGroup; - children = ( - 08DE8A172D525BA20049BCAC /* Terms.plist */, - ); - path = Strings; - sourceTree = ""; - }; - 08DE8A192D5261CD0049BCAC /* Terms */ = { - isa = PBXGroup; - children = ( - 08DE8A1A2D5261DE0049BCAC /* MyPageTermsController.swift */, - 08DE8A1C2D5261E70049BCAC /* MyPageTermsReactor.swift */, - ); - path = Terms; - sourceTree = ""; - }; - 08DE8A3D2D54DCAF0049BCAC /* MyCommentedPopUpGridSection */ = { - isa = PBXGroup; - children = ( - 08DE8A3E2D54DCC40049BCAC /* MyCommentedPopUpGridSection.swift */, - 08DE8A402D54DCCA0049BCAC /* MyCommentedPopUpGridSectionCell.swift */, - ); - path = MyCommentedPopUpGridSection; - sourceTree = ""; - }; - 4E685EB52D12CEB6001EF91C /* FillterSheetView */ = { - isa = PBXGroup; - children = ( - 4E685EAA2D12CEB6001EF91C /* BalloonBackgroundView.swift */, - 4E685EAB2D12CEB6001EF91C /* BalloonChipCell.swift */, - 4E685EAD2D12CEB6001EF91C /* FilterBottomSheetReactor.swift */, - 4E685EAE2D12CEB6001EF91C /* FilterBottomSheetView.swift */, - 4E685EAF2D12CEB6001EF91C /* FilterBottomSheetViewController.swift */, - 4E685EB02D12CEB6001EF91C /* FilterCell.swift */, - 4E685EB12D12CEB6001EF91C /* FilterChip.swift */, - 4E685EB22D12CEB6001EF91C /* FilterChipsView.swift */, - ); - path = FillterSheetView; - sourceTree = ""; - }; - 4E685EC02D12CEB6001EF91C /* MapPopupCardView */ = { - isa = PBXGroup; - children = ( - 4E685EBE2D12CEB6001EF91C /* MapPopupCarouselView.swift */, - 4E685EBF2D12CEB6001EF91C /* PopupCardCell.swift */, - ); - path = MapPopupCardView; - sourceTree = ""; - }; - 4E685EC52D12CEB6001EF91C /* StoreListView */ = { - isa = PBXGroup; - children = ( - 4E685EC12D12CEB6001EF91C /* StoreListCell.swift */, - 4E685EC22D12CEB6001EF91C /* StoreListReactor.swift */, - 4E685EC32D12CEB6001EF91C /* StoreListView.swift */, - 4EA998992D21C2FC009DC30B /* StoreListSection.swift */, - 4E685EC42D12CEB6001EF91C /* StoreListViewController.swift */, - ); - path = StoreListView; - sourceTree = ""; - }; - 4E685ECD2D12CEB6001EF91C /* Map */ = { - isa = PBXGroup; - children = ( - 4EC23F432D6F7E6D00558673 /* MapView */, - 4E685EB52D12CEB6001EF91C /* FillterSheetView */, - 4E685EC52D12CEB6001EF91C /* StoreListView */, - 4E685EC02D12CEB6001EF91C /* MapPopupCardView */, - 4EE5A3D12D40E3B100A2469A /* FindMap */, - ); - path = Map; - sourceTree = ""; - }; - 4E755B1B2D2B9ABF00ADFB21 /* Admin */ = { - isa = PBXGroup; - children = ( - 4E755B222D2B9C5D00ADFB21 /* AdminViewController.swift */, - 4E755B242D2B9C6C00ADFB21 /* AdminView.swift */, - 4E755B262D2B9C7C00ADFB21 /* AdminStoreCell.swift */, - 4E755B282D2BA65A00ADFB21 /* AdminReactor.swift */, - 4E9405302D6F7C790002B590 /* AdminRegister */, - 4E94052F2D6F7C670002B590 /* AdminBottomSheet */, - 4EEA1D8E2D352012003E7DE9 /* ImageCell.swift */, - ); - path = Admin; - sourceTree = ""; - }; - 4E94052F2D6F7C670002B590 /* AdminBottomSheet */ = { - isa = PBXGroup; - children = ( - 4E9C12772D2BC7A0006744D6 /* AdminBottomSheetView.swift */, - 4E9C12792D2BC811006744D6 /* AdminBottomSheetViewController.swift */, - 4E6CA4842D34D6ED0034D09A /* AdminBottomSheetReactor.swift */, - ); - path = AdminBottomSheet; - sourceTree = ""; - }; - 4E9405302D6F7C790002B590 /* AdminRegister */ = { - isa = PBXGroup; - children = ( - 4E9C12802D2BE0A6006744D6 /* PopUpStoreRegisterViewController.swift */, - 4E643FC02D738D7F0046AF29 /* PopUpStoreRegisterReactor.swift */, - 4E643FC22D738D930046AF29 /* PopUpStoreRegisterView.swift */, - 4EEA13062DA7CDDA00775256 /* PopUpImagesCollectionView.swift */, - ); - path = AdminRegister; - sourceTree = ""; - }; - 4EA2C93B2D424D2600F4D97C /* MapGuideView */ = { - isa = PBXGroup; - children = ( - 4E6A066F2D42A96100B2A658 /* FullScreenMapViewController.swift */, - 4E9790C42D40E13500210499 /* MapGuideViewController.swift */, - 4EE5A3D22D40E4A600A2469A /* MapGuideReactor.swift */, - ); - path = MapGuideView; - sourceTree = ""; - }; - 4EC23F432D6F7E6D00558673 /* MapView */ = { - isa = PBXGroup; - children = ( - 4E8AA29C2D59A2340029DF75 /* MarkerTooltipView.swift */, - 4E685EC72D12CEB6001EF91C /* MapMarker.swift */, - 4E685EC82D12CEB6001EF91C /* MapReactor.swift */, - 4E685EC92D12CEB6001EF91C /* MapSearchInput.swift */, - 4E685ECB2D12CEB6001EF91C /* MapView.swift */, - 4E685ECC2D12CEB6001EF91C /* MapViewController.swift */, - ); - path = MapView; - sourceTree = ""; - }; - 4EDDEFB22D2D284B00CFAFA5 /* Common */ = { - isa = PBXGroup; - children = ( - 4EAB809C2D3F78AA0041AF30 /* NMFMapViewDelegateProxy.swift */, - 4EAB809E2D3F8EF50041AF30 /* ViewportBounds.swift */, - 4EED9BAB2D22730400B288E7 /* FilterType.swift */, - 4E6C07052D4B6E56008A962A /* RegionDefinitions.swift */, - 4E685EC62D12CEB6001EF91C /* MapFilterChips.swift */, - 4E9A465F2D55D1270010578A /* MapUtilities.swift */, - 4E6C07092D4B6E81008A962A /* ClusteringManager.swift */, - 4E6C07072D4B6E74008A962A /* ClusteringModels.swift */, - 4EDE57022D5E70650014D924 /* LocationPermissionBottomSheet.swift */, - 4EDDEFB32D2D285900CFAFA5 /* DateTimePickerManager.swift */, - 4EEA1D902D352027003E7DE9 /* ExtendedImage.swift */, - ); - path = Common; - sourceTree = ""; - }; - 4EE5A3D12D40E3B100A2469A /* FindMap */ = { - isa = PBXGroup; - children = ( - 4EA2C93B2D424D2600F4D97C /* MapGuideView */, - ); - path = FindMap; - sourceTree = ""; - }; - BD9103502CF6149D00BBCCAE /* AuthAPI */ = { - isa = PBXGroup; - children = ( - BD91034E2CF6149D00BBCCAE /* AuthAPIEndPoint.swift */, - 08CBE9FF2D38986E00248007 /* ResponseDTO */, - ); - path = AuthAPI; - sourceTree = ""; - }; - BD9103562CF6149D00BBCCAE /* HomeAPI */ = { - isa = PBXGroup; - children = ( - BD9103532CF6149D00BBCCAE /* HomeAPIEndpoint.swift */, - 08DC620E2CF8B36D002A2F44 /* ResponseDTO */, - ); - path = HomeAPI; - sourceTree = ""; - }; - BD91035A2CF6149D00BBCCAE /* Repository */ = { - isa = PBXGroup; - children = ( - 4E755B2E2D2BA7FB00ADFB21 /* AdminRepository.swift */, - BD9103572CF6149D00BBCCAE /* AuthAPIRepositoryImpl.swift */, - BD9103582CF6149D00BBCCAE /* HomeAPIRepository.swift */, - BD9103592CF6149D00BBCCAE /* SignUpRepositoryImpl.swift */, - 086DD8D92CFF194700B97D3B /* UserAPIRepositoryImpl.swift */, - 089952522D033C940022AEF9 /* PopUpAPIRepositoryImpl.swift */, - 083C86772D0EE382003F441C /* CommentAPIRepository.swift */, - 4E685EB62D12CEB6001EF91C /* MapRepository.swift */, - ); - path = Repository; - sourceTree = ""; - }; - BD91035F2CF6149D00BBCCAE /* SignUpAPI */ = { - isa = PBXGroup; - children = ( - BD91035B2CF6149D00BBCCAE /* CheckNickNameRequestDTO.swift */, - BD91035C2CF6149D00BBCCAE /* GetCategoryListResponseDTO.swift */, - BD91035D2CF6149D00BBCCAE /* SignUpAPIEndpoint.swift */, - BD91035E2CF6149D00BBCCAE /* SignUpRequestDTO.swift */, - ); - path = SignUpAPI; - sourceTree = ""; - }; - BD9103602CF6149D00BBCCAE /* Network */ = { - isa = PBXGroup; - children = ( - 08DC62102CF8B446002A2F44 /* SortedRequestDTO.swift */, - 05FBCAC02DABEB1100215BE6 /* MapAPI */, - 05FBCABE2DABE79A00215BE6 /* AdminAPI */, - 083C86712D0EE2A3003F441C /* CommentAPI */, - 089952472D033A0E0022AEF9 /* PopUpAPI */, - 086DD8D42CFF181500B97D3B /* UserAPI */, - BD9103502CF6149D00BBCCAE /* AuthAPI */, - BD9103562CF6149D00BBCCAE /* HomeAPI */, - BD91035F2CF6149D00BBCCAE /* SignUpAPI */, - ); - path = Network; - sourceTree = ""; - }; - BD9103752CF614A900BBCCAE /* UseCase */ = { - isa = PBXGroup; - children = ( - BD9103702CF614A900BBCCAE /* HomeAPIUseCaseImpl.swift */, - BD9103722CF614A900BBCCAE /* SignUpAPIUseCaseImpl.swift */, - BD9103742CF614A900BBCCAE /* AuthAPIUseCaseImpl.swift */, - 086DD8DD2CFF19C400B97D3B /* UserAPIUseCaseImpl.swift */, - 4EA2C93E2D424D7400F4D97C /* MapDirectionUseCase.swift */, - 089952542D033D480022AEF9 /* PopUpAPIUseCaseImpl.swift */, - 083C86792D0EE3BB003F441C /* CommentAPIUseCaseImpl.swift */, - 4E755B2A2D2BA76E00ADFB21 /* AdminUseCase.swift */, - 4E685EB82D12CEB6001EF91C /* MapUseCase.swift */, +/* Begin PBXCopyFilesBuildPhase section */ + 05C1D6132DB53A4900508FFD /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 05BDD3D72DB66E1700C1E192 /* DomainInterface.framework in Embed Frameworks */, + 05C1D6102DB53A4900508FFD /* Infrastructure.framework in Embed Frameworks */, + 05C1D60E2DB53A4900508FFD /* Domain.framework in Embed Frameworks */, + 05C1D6122DB53A4900508FFD /* Presentation.framework in Embed Frameworks */, + 05C1D60C2DB53A4900508FFD /* Data.framework in Embed Frameworks */, ); - path = UseCase; - sourceTree = ""; + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; }; - BD91037B2CF614A900BBCCAE /* Entities */ = { - isa = PBXGroup; - children = ( - 08CBEA042D38990600248007 /* AuthAPI */, - 086F89DE2D1E7CBE00CA4FC9 /* UserAPI */, - BD9103762CF614A900BBCCAE /* BannerPopUpStore.swift */, - 4E685EBB2D12CEB6001EF91C /* MapPopUpStore.swift */, - BD9103772CF614A900BBCCAE /* Category.swift */, - BD9103782CF614A900BBCCAE /* GetHomeInfoResponse.swift */, - BD9103792CF614A900BBCCAE /* PopUpStoreResponse.swift */, - 0899526F2D0474430022AEF9 /* PopUpAPI */, +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 05229DD02D99519200D88E73 /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = ""; }; + 05BDD3D52DB66E1700C1E192 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D6072DB53A4900508FFD /* Data.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Data.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D6082DB53A4900508FFD /* Domain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Domain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D6092DB53A4900508FFD /* Infrastructure.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Infrastructure.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D60A2DB53A4900508FFD /* Presentation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Presentation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BDCA41BD2CF35AC0005EECF6 /* Poppool.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Poppool.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 05878B6F2DAD2E10004F81E2 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + /Localized/Resource/LaunchScreen.storyboard, + Resource/Debug.xcconfig, + Resource/Info.plist, ); - path = Entities; - sourceTree = ""; + target = BDCA41BC2CF35AC0005EECF6 /* Poppool */; }; - BD91037F2CF614A900BBCCAE /* Repository */ = { - isa = PBXGroup; - children = ( - 4EA2C93C2D424D3300F4D97C /* MapDirectionRepository.swift */, - BD91037C2CF614A900BBCCAE /* AuthRepository.swift */, +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */ + 05878B702DAD2E10004F81E2 /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */ = { + isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet; + buildPhase = BDCA41BB2CF35AC0005EECF6 /* Resources */; + membershipExceptions = ( + Resource/Base.lproj/LaunchScreen.storyboard, ); - path = Repository; - sourceTree = ""; }; - BD91038F2CF6166800BBCCAE /* View */ = { - isa = PBXGroup; - children = ( - BD91038E2CF6166800BBCCAE /* SplashView.swift */, +/* End PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 058789AD2DAD2E10004F81E2 /* Poppool */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (05878B6F2DAD2E10004F81E2 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, 05878B702DAD2E10004F81E2 /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Poppool; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + BDCA41BA2CF35AC0005EECF6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 05C1D60F2DB53A4900508FFD /* Infrastructure.framework in Frameworks */, + 05BDD3D62DB66E1700C1E192 /* DomainInterface.framework in Frameworks */, + 0522C1D92DB67C5900B141FF /* RxSwift in Frameworks */, + 4E15142E2D994A3A00DFD08F /* KakaoSDKAuth in Frameworks */, + 05C1D60D2DB53A4900508FFD /* Domain.framework in Frameworks */, + 4E1514302D994A3A00DFD08F /* KakaoSDKCommon in Frameworks */, + 05C1D6112DB53A4900508FFD /* Presentation.framework in Frameworks */, + 05C1D60B2DB53A4900508FFD /* Data.framework in Frameworks */, + 0522C3C62DB67D7800B141FF /* RxGesture in Frameworks */, + 4EE360FD2D91876300D2441D /* NMapsMap in Frameworks */, + 4E15142A2D99480200DFD08F /* NMapsMap in Frameworks */, ); - path = View; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - BD9103912CF6166800BBCCAE /* Splash */ = { +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 05C1D6062DB53A4900508FFD /* Frameworks */ = { isa = PBXGroup; children = ( - BD91038F2CF6166800BBCCAE /* View */, - BD9103902CF6166800BBCCAE /* SplashController.swift */, + 05BDD3D52DB66E1700C1E192 /* DomainInterface.framework */, + 05C1D6072DB53A4900508FFD /* Data.framework */, + 05C1D6082DB53A4900508FFD /* Domain.framework */, + 05C1D6092DB53A4900508FFD /* Infrastructure.framework */, + 05C1D60A2DB53A4900508FFD /* Presentation.framework */, ); - path = Splash; + name = Frameworks; sourceTree = ""; }; BDCA41B42CF35AC0005EECF6 = { isa = PBXGroup; children = ( 05229DD02D99519200D88E73 /* .swiftlint.yml */, - BDCA41BF2CF35AC0005EECF6 /* Poppool */, + 058789AD2DAD2E10004F81E2 /* Poppool */, + 05C1D6062DB53A4900508FFD /* Frameworks */, BDCA41BE2CF35AC0005EECF6 /* Products */, ); sourceTree = ""; @@ -2930,20 +131,6 @@ name = Products; sourceTree = ""; }; - BDCA41BF2CF35AC0005EECF6 /* Poppool */ = { - isa = PBXGroup; - children = ( - BDE30CE02CF87A9700C21E08 /* Poppool.entitlements */, - 083A256B2CF361190099B58E /* Application */, - 083A256D2CF3613C0099B58E /* Presentation */, - 083A259E2CF362310099B58E /* Domain */, - 083A259F2CF362360099B58E /* Data */, - 083A25A02CF3623C0099B58E /* Infrastructure */, - 083A256C2CF361210099B58E /* Resource */, - ); - path = Poppool; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -2955,31 +142,22 @@ BDCA41B92CF35AC0005EECF6 /* Sources */, BDCA41BA2CF35AC0005EECF6 /* Frameworks */, BDCA41BB2CF35AC0005EECF6 /* Resources */, + 05C1D6132DB53A4900508FFD /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + 058789AD2DAD2E10004F81E2 /* Poppool */, + ); name = Poppool; packageProductDependencies = ( - BDCA41F12CF35D0D005EECF6 /* SnapKit */, - BDCA41F72CF35D9A005EECF6 /* RxSwift */, - BDCA41FD2CF35EE7005EECF6 /* ReactorKit */, - BDCA42002CF35EFE005EECF6 /* RxKeyboard */, - BDCA42032CF35F76005EECF6 /* PanModal */, - BDCA42062CF35FA6005EECF6 /* Tabman */, - BDCA42092CF35FB1005EECF6 /* Pageboy */, - BDCA420C2CF35FD2005EECF6 /* RxGesture */, - BDCA420F2CF35FF5005EECF6 /* Lottie */, - 083A25CF2CF364B70099B58E /* Alamofire */, - 088DE2432D104EE70030FA9E /* SwiftSoup */, - 4E5825662D1951DF00EE83EF /* FloatingPanel */, - 4EA9989C2D21C404009DC30B /* RxDataSources */, - 082197A02D426DCB0054094A /* Then */, 4E1514292D99480200DFD08F /* NMapsMap */, - 4E15142B2D994A3A00DFD08F /* KakaoSDK */, 4E15142D2D994A3A00DFD08F /* KakaoSDKAuth */, 4E15142F2D994A3A00DFD08F /* KakaoSDKCommon */, + 0522C1D82DB67C5900B141FF /* RxSwift */, + 0522C3C52DB67D7800B141FF /* RxGesture */, ); productName = Poppool; productReference = BDCA41BD2CF35AC0005EECF6 /* Poppool.app */; @@ -3001,7 +179,6 @@ }; }; buildConfigurationList = BDCA41B82CF35AC0005EECF6 /* Build configuration list for PBXProject "Poppool" */; - compatibilityVersion = "Xcode 14.0"; developmentRegion = ko; hasScannedForEncodings = 0; knownRegions = ( @@ -3010,23 +187,13 @@ ); mainGroup = BDCA41B42CF35AC0005EECF6; packageReferences = ( - BDCA41F02CF35D0D005EECF6 /* XCRemoteSwiftPackageReference "SnapKit" */, - BDCA41F62CF35D9A005EECF6 /* XCRemoteSwiftPackageReference "RxSwift" */, - BDCA41FC2CF35EE7005EECF6 /* XCRemoteSwiftPackageReference "ReactorKit" */, - BDCA41FF2CF35EFE005EECF6 /* XCRemoteSwiftPackageReference "RxKeyboard" */, - BDCA42022CF35F76005EECF6 /* XCRemoteSwiftPackageReference "PanModal" */, - BDCA42052CF35FA6005EECF6 /* XCRemoteSwiftPackageReference "Tabman" */, - BDCA42082CF35FB1005EECF6 /* XCRemoteSwiftPackageReference "Pageboy" */, - BDCA420B2CF35FD2005EECF6 /* XCRemoteSwiftPackageReference "RxGesture" */, - BDCA420E2CF35FF5005EECF6 /* XCRemoteSwiftPackageReference "lottie-spm" */, - 083A25CE2CF364B70099B58E /* XCRemoteSwiftPackageReference "Alamofire" */, - 088DE2422D104EE70030FA9E /* XCRemoteSwiftPackageReference "SwiftSoup" */, - 4E5825652D1951DF00EE83EF /* XCRemoteSwiftPackageReference "FloatingPanel" */, - 4EA9989B2D21C404009DC30B /* XCRemoteSwiftPackageReference "RxDataSources" */, - 0821979F2D426DCB0054094A /* XCRemoteSwiftPackageReference "Then" */, 08F403312D884F4D00BFA61A /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, 4E1514282D99480200DFD08F /* XCRemoteSwiftPackageReference "SPM-NMapsMap" */, + 05BDD5C32DB674E500C1E192 /* XCRemoteSwiftPackageReference "SnapKit" */, + 05BDD5D62DB6783C00C1E192 /* XCRemoteSwiftPackageReference "RxSwift" */, + 0522C3C42DB67D7800B141FF /* XCRemoteSwiftPackageReference "RxGesture" */, ); + preferredProjectObjectVersion = 56; productRefGroup = BDCA41BE2CF35AC0005EECF6 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -3041,19 +208,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 08B191562CF41D6F0057BC04 /* PP_splash.json in Resources */, - 08B1914B2CF41D690057BC04 /* GothicA1-Bold.ttf in Resources */, - 08DE8A182D525BA20049BCAC /* Terms.plist in Resources */, - 08B1914D2CF41D690057BC04 /* GothicA1-Medium.ttf in Resources */, - 08B1914F2CF41D690057BC04 /* Poppins-Bold.ttf in Resources */, - 08B191502CF41D690057BC04 /* Poppins-Light.ttf in Resources */, - 08B191552CF41D6F0057BC04 /* PP_loading.json in Resources */, - BDCA41CA2CF35AC1005EECF6 /* Assets.xcassets in Resources */, - BDCA41CD2CF35AC1005EECF6 /* Base in Resources */, - 08B191512CF41D690057BC04 /* Poppins-Medium.ttf in Resources */, - 08B1914C2CF41D690057BC04 /* GothicA1-Light.ttf in Resources */, - 08B1914E2CF41D690057BC04 /* GothicA1-Regular.ttf in Resources */, - 08B191522CF41D690057BC04 /* Poppins-Regular.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3086,456 +240,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 081898AE2D2CFC230067BF01 /* GetWithdrawlListResponseDTO.swift in Sources */, - 088DE25A2D1458620030FA9E /* DetailCommentImageCell.swift in Sources */, - 089952662D046CCD0022AEF9 /* SearchResultController.swift in Sources */, - 0818993F2D35FBE00067BF01 /* GetRecentPopUpResponseDTO.swift in Sources */, - 08B191962CF4A0FA0057BC04 /* SignUpStep4Controller.swift in Sources */, - 0841BABC2CFB59E200049E31 /* String?+.swift in Sources */, - 0841BA872CF9F62400049E31 /* PreSignedURLDTO.swift in Sources */, - 086F89EC2D2009EB00CA4FC9 /* SubLoginController.swift in Sources */, - 083C86262D087A4E003F441C /* DetailTitleSectionCell.swift in Sources */, - 4E9A46602D55D1270010578A /* MapUtilities.swift in Sources */, - 086DD8DE2CFF19C400B97D3B /* UserAPIUseCaseImpl.swift in Sources */, - 081898C32D30AE2C0067BF01 /* GetMyProfileResponseDTO.swift in Sources */, - 08A2E4802D1BCDE300102313 /* CommentDetailView.swift in Sources */, - 081898BA2D2E5F4C0067BF01 /* MyCommentView.swift in Sources */, - 089952492D033A1C0022AEF9 /* PopUpAPIEndPoint.swift in Sources */, - 083A25C82CF363C00099B58E /* LoginController.swift in Sources */, - 081899292D3500C50067BF01 /* FAQReactor.swift in Sources */, - 083A25B72CF362670099B58E /* RequestEndpoint.swift in Sources */, - 4E6C070A2D4B6E81008A962A /* ClusteringManager.swift in Sources */, - 08A2E47B2D1B06AA00102313 /* ImageDetailController.swift in Sources */, - 083A25B82CF362670099B58E /* IndicatorMaker.swift in Sources */, - 08DE8A102D5255110049BCAC /* DetailEmptyCommetSection.swift in Sources */, - 086F89E62D1FE91800CA4FC9 /* OtherUserCommentSectionCell.swift in Sources */, - 08B191B62CF6092B0057BC04 /* AppleLoginService.swift in Sources */, - 081899542D363E6A0067BF01 /* BookMarkPopUpViewTypeModalReactor.swift in Sources */, - 083C866B2D0ECB4F003F441C /* InstaGuideSectionCell.swift in Sources */, - 083C86202D087445003F441C /* GetPopUpDetailResponse.swift in Sources */, - 4EA2C9432D424DF900F4D97C /* FindDirectionEndPoint.swift in Sources */, - 081898FD2D33D9ED0067BF01 /* GetBlockUserListResponse.swift in Sources */, - 083A25B22CF362670099B58E /* NetworkError.swift in Sources */, - 081899522D363E640067BF01 /* BookMarkPopUpViewTypeModalController.swift in Sources */, - BD9103692CF6149D00BBCCAE /* HomeAPIRepository.swift in Sources */, - 083A25832CF361EF0099B58E /* BaseViewController.swift in Sources */, - 089952752D0475F20022AEF9 /* SearchResultCountSectionCell.swift in Sources */, - 4EECA3942D56770B00A07CCA /* MapPopUpStore.swift in Sources */, - 4E9C12782D2BC7A0006744D6 /* AdminBottomSheetView.swift in Sources */, - 086DD9362D00963900B97D3B /* SearchTitleSection.swift in Sources */, - 086F89D92D1E79E200CA4FC9 /* GetOtherUserCommentListRequestDTO.swift in Sources */, - 083C864F2D0DD3A6003F441C /* AddCommentImageSection.swift in Sources */, - 4EEA13072DA7CDDA00775256 /* PopUpImagesCollectionView.swift in Sources */, - 08B191372CF366680057BC04 /* UICollectionViewCell+.swift in Sources */, - 083A25B42CF362670099B58E /* Responsable.swift in Sources */, - 08CBEA0D2D38ED0D00248007 /* CountButtonView.swift in Sources */, - 0841BAA82CFA354500049E31 /* HomeTitleSection.swift in Sources */, - 08B191782CF442230057BC04 /* UIImage+.swift in Sources */, - 08DE8A122D5255180049BCAC /* DetailEmptyCommetSectionCell.swift in Sources */, - 081898BC2D2E5F510067BF01 /* MyCommentReactor.swift in Sources */, - 0841BA892CF9F62400049E31 /* PreSignedURLResponseDTO.swift in Sources */, - 088DE24A2D12F3360030FA9E /* DetailInfoSection.swift in Sources */, - 081898D02D30EA900067BF01 /* PutUserTailoredInfoRequestDTO.swift in Sources */, - 081898E62D3391CB0067BF01 /* GetMyCommentResponse.swift in Sources */, - 0818991E2D34DF7D0067BF01 /* MyPageNoticeDetailView.swift in Sources */, - BD9103682CF6149D00BBCCAE /* AuthAPIRepositoryImpl.swift in Sources */, - 08DC61F82CF76843002A2F44 /* SignUpCompleteView.swift in Sources */, - BD9103612CF6149D00BBCCAE /* AuthAPIEndPoint.swift in Sources */, - 086DD9422D01EEF700B97D3B /* SearchCountTitleSectionCell.swift in Sources */, - 081898A72D2CC01D0067BF01 /* WithdrawlReasonReactor.swift in Sources */, - 081899332D35F1090067BF01 /* MyPageBookmarkView.swift in Sources */, - 08CBEA3A2D3FABE100248007 /* ToastView.swift in Sources */, - 081899052D34080B0067BF01 /* BlockUserListSectionCell.swift in Sources */, - 4E685EEA2D12CEB6001EF91C /* MapViewController.swift in Sources */, - 4E6C07062D4B6E56008A962A /* RegionDefinitions.swift in Sources */, - 089952582D0347AC0022AEF9 /* SearchCategoryController.swift in Sources */, - 0841BAAA2CFA354C00049E31 /* HomeTitleSectionCell.swift in Sources */, - 08B191612CF430E70057BC04 /* PPProgressView.swift in Sources */, - 086F89EA2D2009E300CA4FC9 /* SubLoginView.swift in Sources */, - 081899352D35F10F0067BF01 /* MyPageBookmarkController.swift in Sources */, - 083A25B32CF362670099B58E /* Requestable.swift in Sources */, - BD9103932CF6166800BBCCAE /* SplashController.swift in Sources */, - 08B1916A2CF434B80057BC04 /* SignUpStep1Controller.swift in Sources */, - 4E685ED52D12CEB6001EF91C /* FilterChip.swift in Sources */, - 083C861C2D087337003F441C /* GetPopUpDetailRequestDTO.swift in Sources */, - BD9103882CF614A900BBCCAE /* GetHomeInfoResponse.swift in Sources */, - 081899022D3407F50067BF01 /* BlockUserListSection.swift in Sources */, - 081899222D34DF8E0067BF01 /* MyPageNoticeDetailReactor.swift in Sources */, - 4E685EDB2D12CEB6001EF91C /* MapAPIEndpoint.swift in Sources */, - 086F89CC2D1E42B000CA4FC9 /* CommentUserBlockController.swift in Sources */, - 08DC62032CF8AC06002A2F44 /* HomeView.swift in Sources */, - 089B4FD82D9A57AE00FC0CC3 /* ImageLoader.swift in Sources */, - BD9103622CF6149D00BBCCAE /* LoginResponseDTO.swift in Sources */, - 083C86642D0EC4A5003F441C /* InstaCommentAddReactor.swift in Sources */, - 08DE8A3F2D54DCC40049BCAC /* MyCommentedPopUpGridSection.swift in Sources */, - 081898C52D30AEF40067BF01 /* GetMyProfileResponse.swift in Sources */, - BD9103922CF6166800BBCCAE /* SplashView.swift in Sources */, - 089B4FDF2D9A8F9A00FC0CC3 /* MemoryStorage.swift in Sources */, - 0899526E2D0474340022AEF9 /* GetSearchPopUpListResponse.swift in Sources */, - 08B191392CF366680057BC04 /* UITableViewCell+.swift in Sources */, - 08A2E48F2D1BF6E500102313 /* CommentListView.swift in Sources */, - 4E755B1D2D2B9AD300ADFB21 /* GetAdminPopUpStoreListResponseDTO.swift in Sources */, - 083A25992CF362090099B58E /* Sectionable.swift in Sources */, - 086DD8E02CFF2C3700B97D3B /* UIImageView+.swift in Sources */, - 081898DA2D32559B0067BF01 /* PutUserProfileRequestDTO.swift in Sources */, - 08B191AC2CF5BF9D0057BC04 /* AgeSelectedController.swift in Sources */, - 4E755B1F2D2B9AE500ADFB21 /* AdminAPIEndpoint.swift in Sources */, - 083C86622D0EC49E003F441C /* InstaCommentAddController.swift in Sources */, - 08B1919C2CF4A77C0057BC04 /* TagSection.swift in Sources */, - BD91038B2CF614A900BBCCAE /* AuthRepository.swift in Sources */, - 08DC61F32CF75037002A2F44 /* KeyChainService.swift in Sources */, - 086DD93B2D009A1C00B97D3B /* CancelableTagSection.swift in Sources */, - 4E755B232D2B9C5D00ADFB21 /* AdminViewController.swift in Sources */, - 08A2E49F2D1C417000102313 /* CommentListTitleSectionCell.swift in Sources */, - 086F89D52D1E6DB100CA4FC9 /* OtherUserCommentController.swift in Sources */, - 083C866E2D0ECB87003F441C /* InstaGuideChildSection.swift in Sources */, - 081898A32D2CC0110067BF01 /* WithdrawlReasonView.swift in Sources */, - 08B1917A2CF452B30057BC04 /* SignUpTermsView.swift in Sources */, - 08B191B82CF6092F0057BC04 /* AuthServiceable.swift in Sources */, - 0841BAB82CFAC41300049E31 /* SectionBackGroundDecorationView.swift in Sources */, - 086F89F52D2269E300CA4FC9 /* MyPageReactor.swift in Sources */, - 089952682D046CD80022AEF9 /* SearchResultReactor.swift in Sources */, - 086DD9402D01EEEB00B97D3B /* SearchCountTitleSection.swift in Sources */, - 083C864C2D0DCF9B003F441C /* AddCommentDescriptionSectionCell.swift in Sources */, - 086DD8CE2CFDFEB000B97D3B /* HomeListView.swift in Sources */, - 08B191C22CF615CA0057BC04 /* KeyPath.swift in Sources */, - 083C86242D087A44003F441C /* DetailTitleSection.swift in Sources */, - 08A2E4822D1BCDEA00102313 /* CommentDetailController.swift in Sources */, - 0841BAA32CFA31A300049E31 /* SpacingSection.swift in Sources */, - 08B191982CF4A1010057BC04 /* SignUpStep4Reactor.swift in Sources */, - 086F8A0A2D2621EE00CA4FC9 /* MyPageMyCommentTitleSection.swift in Sources */, - 089952602D0366C40022AEF9 /* SearchMainController.swift in Sources */, - 081898D42D30F5840067BF01 /* CategoryEditModalController.swift in Sources */, - 088DE2562D144A830030FA9E /* DetailCommentSectionCell.swift in Sources */, - 08B1919E2CF4A7830057BC04 /* TagSectionCell.swift in Sources */, - 081899142D34CAEA0067BF01 /* GetNoticeDetailResponse.swift in Sources */, - 081898D22D30F57D0067BF01 /* CategoryEditModalView.swift in Sources */, - 083C860B2D073A15003F441C /* DetailView.swift in Sources */, - 086F89C52D1E347E00CA4FC9 /* CommentUserInfoController.swift in Sources */, - BD9103862CF614A900BBCCAE /* BannerPopUpStore.swift in Sources */, - 08B191862CF48A8B0057BC04 /* SignUpStep2Reactor.swift in Sources */, - 08DC62052CF8AC0E002A2F44 /* HomeController.swift in Sources */, - 4EA2C93D2D424D3300F4D97C /* MapDirectionRepository.swift in Sources */, - 083C86702D0ECB8E003F441C /* InstaGuideChildSectionCell.swift in Sources */, - 082197B02D4E4E190054094A /* NormalCommentEditView.swift in Sources */, - 086F89D02D1E60A100CA4FC9 /* PostUserBlockRequestDTO.swift in Sources */, - 081898CE2D30D5C60067BF01 /* InfoEditModalReactor.swift in Sources */, - 083C865D2D0DEFD5003F441C /* CommentCheckReactor.swift in Sources */, - BD9103632CF6149D00BBCCAE /* BannerPopUpStoreDTO.swift in Sources */, - 4EDE57032D5E70650014D924 /* LocationPermissionBottomSheet.swift in Sources */, - 081898D62D30F58A0067BF01 /* CategoryEditModalReactor.swift in Sources */, - 081898B32D2D20D70067BF01 /* WithdrawlCompleteView.swift in Sources */, - 086DD92A2D0086AA00B97D3B /* SearchController.swift in Sources */, - 083C860F2D073A23003F441C /* DetailReactor.swift in Sources */, - BD91038A2CF614A900BBCCAE /* LoginResponse.swift in Sources */, - 086F89F92D226EEB00CA4FC9 /* GetMyPageResponse.swift in Sources */, - 083A25BF2CF362770099B58E /* Logger.swift in Sources */, - 08DC61FC2CF76862002A2F44 /* SignUpCompleteReactor.swift in Sources */, - 08DE8A412D54DCCA0049BCAC /* MyCommentedPopUpGridSectionCell.swift in Sources */, - 0818992F2D3506290067BF01 /* FAQDropdownSection.swift in Sources */, - BD9103832CF614A900BBCCAE /* SignUpAPIUseCaseImpl.swift in Sources */, - 4E6CA4852D34D6ED0034D09A /* AdminBottomSheetReactor.swift in Sources */, - 4EE5A3D32D40E4A600A2469A /* MapGuideReactor.swift in Sources */, - 08DC62072CF8AC14002A2F44 /* HomeReactor.swift in Sources */, - 081898F72D33D6B70067BF01 /* BlockUserManageReactor.swift in Sources */, - 082197B22D4E4E200054094A /* NormalCommentEditController.swift in Sources */, - 081899502D363E5C0067BF01 /* BookMarkPopUpViewTypeModalView.swift in Sources */, - 081899452D35FEA10067BF01 /* RecentPopUpSection.swift in Sources */, - 083A259A2CF362090099B58E /* SectionDecorationItem.swift in Sources */, - BD9103892CF614A900BBCCAE /* PopUpStoreResponse.swift in Sources */, - 086F89C72D1E348400CA4FC9 /* CommentUserInfoReactor.swift in Sources */, - 0818990E2D34B68C0067BF01 /* GetNoticeListResponseDTO.swift in Sources */, - 086DD8C82CFDEA9200B97D3B /* UIView+.swift in Sources */, - 08A2E4842D1BCDEF00102313 /* CommentDetailReactor.swift in Sources */, - 4E685ED92D12CEB6001EF91C /* MapRepository.swift in Sources */, - 083A25B62CF362670099B58E /* MultipartEndPoint.swift in Sources */, - 0818993B2D35F1250067BF01 /* MyPageRecentController.swift in Sources */, - 089952462D031E740022AEF9 /* SearchSortedView.swift in Sources */, - 08DC620B2CF8AE0F002A2F44 /* ImageBannerSection.swift in Sources */, - 086DD9302D0090E900B97D3B /* UITextField+.swift in Sources */, - 0818991A2D34D6430067BF01 /* NoticeListSectionCell.swift in Sources */, - 086F89D72D1E6DB700CA4FC9 /* OtherUserCommentReactor.swift in Sources */, - 083C867A2D0EE3BB003F441C /* CommentAPIUseCaseImpl.swift in Sources */, - 4E7823A82D2E84E800AC5110 /* AdminRepository.swift in Sources */, - 086F89DB2D1E7A6C00CA4FC9 /* GetOtherUserCommentedPopUpListResponseDTO.swift in Sources */, - 086F89D32D1E6DA600CA4FC9 /* OtherUserCommentView.swift in Sources */, - 4E685ECE2D12CEB6001EF91C /* BalloonBackgroundView.swift in Sources */, - 4E755B292D2BA65A00ADFB21 /* AdminReactor.swift in Sources */, - 086DD8D62CFF182100B97D3B /* UserAPIEndPoint.swift in Sources */, - 081899372D35F1140067BF01 /* MyPageBookmarkReactor.swift in Sources */, - 4E685EE22D12CEB6001EF91C /* StoreListView.swift in Sources */, - 086F89C32D1E347700CA4FC9 /* CommentUserInfoView.swift in Sources */, - 08B191942CF4A0F00057BC04 /* SignUpStep4View.swift in Sources */, - 08B1918D2CF49FF70057BC04 /* SignUpStep3View.swift in Sources */, - 086F89CE2D1E42B500CA4FC9 /* CommentUserBlockReactor.swift in Sources */, - BD9103642CF6149D00BBCCAE /* GetHomeInfoResponseDTO.swift in Sources */, - 081898E22D338FA40067BF01 /* ListCountButtonSectionCell.swift in Sources */, - 08A2E47D2D1B06B000102313 /* ImageDetailReactor.swift in Sources */, - 08B191B42CF609260057BC04 /* KakaoLoginService.swift in Sources */, - BDCA41C12CF35AC0005EECF6 /* AppDelegate.swift in Sources */, - 083C863A2D0C7F0A003F441C /* CommentSelectedReactor.swift in Sources */, - 0841BAB42CFABED700049E31 /* HomePopularCardSection.swift in Sources */, - 081899182D34D63E0067BF01 /* NoticeListSection.swift in Sources */, - 083C86362D0C7EF4003F441C /* CommentSelectedController.swift in Sources */, - 08A2E4792D1B06A300102313 /* ImageDetailView.swift in Sources */, - 4E7823A92D2E84FB00AC5110 /* AdminStoreCell.swift in Sources */, - 088DE2542D144A7E0030FA9E /* DetailCommentSection.swift in Sources */, - 4E755B2B2D2BA76E00ADFB21 /* AdminUseCase.swift in Sources */, - 083C86292D088080003F441C /* DetailContentSection.swift in Sources */, - 08DC61FA2CF7684F002A2F44 /* SignUpCompleteController.swift in Sources */, - 083C864A2D0DCF96003F441C /* AddCommentDescriptionSection.swift in Sources */, - 4E9790C52D40E13500210499 /* MapGuideViewController.swift in Sources */, - 08B191A42CF5A7030057BC04 /* PPSegmentedControl.swift in Sources */, - 081898DC2D326DC10067BF01 /* IntroState.swift in Sources */, - 0899525C2D0347BD0022AEF9 /* SearchCategoryView.swift in Sources */, - 083C865B2D0DEFCF003F441C /* CommentCheckController.swift in Sources */, - 083C86382D0C7EFC003F441C /* CommentSelectedView.swift in Sources */, - 0818994A2D36322B0067BF01 /* PopUpCardSection.swift in Sources */, - 086F8A052D23CB3300CA4FC9 /* MyPageProfileSection.swift in Sources */, - 081899252D3500B80067BF01 /* FAQView.swift in Sources */, - 086F89EE2D2009F100CA4FC9 /* SubLoginReactor.swift in Sources */, - 08DC61F52CF765B5002A2F44 /* UserDefaultService.swift in Sources */, - 08A2E46C2D15BC5000102313 /* CommentLikeRequestDTO.swift in Sources */, - 086F8A072D23CB3800CA4FC9 /* MyPageProfileSectionCell.swift in Sources */, - 4E643FC12D738D7F0046AF29 /* PopUpStoreRegisterReactor.swift in Sources */, - 08B191AE2CF5BFA60057BC04 /* AgeSelectedView.swift in Sources */, - 4E685EE72D12CEB6001EF91C /* MapSearchInput.swift in Sources */, - 08A2E4912D1BF6EA00102313 /* CommentListController.swift in Sources */, - 0899524D2D033AA70022AEF9 /* GetOpenPopUpListResponseDTO.swift in Sources */, - 081898962D2965C90067BF01 /* ProfileEditView.swift in Sources */, - 083C86602D0EC496003F441C /* InstaCommentAddView.swift in Sources */, - 081898F02D33A3A30067BF01 /* MyCommentSortedModalReactor.swift in Sources */, - 081898E42D3391550067BF01 /* GetMyCommentedPopUpResponseDTO.swift in Sources */, - 088DE25D2D145E3A0030FA9E /* DetailSimilarSection.swift in Sources */, - 4EEA1D912D352027003E7DE9 /* ExtendedImage.swift in Sources */, - 083C863D2D0C8BC4003F441C /* NormalCommentAddController.swift in Sources */, - 08B1916E2CF434CF0057BC04 /* SignUpStep1Reactor.swift in Sources */, - 08B1918F2CF4A0020057BC04 /* SignUpStep3Controller.swift in Sources */, - 08A2E4952D1C078300102313 /* GetPopUpCommentRequestDTO.swift in Sources */, - 08B191912CF4A00E0057BC04 /* SignUpStep3Reactor.swift in Sources */, - 083A259C2CF362090099B58E /* InOutputable.swift in Sources */, - 089952642D0366DA0022AEF9 /* SearchMainReactor.swift in Sources */, - 086F89E02D1E7CC700CA4FC9 /* GetOtherUserCommentedPopUpListResponse.swift in Sources */, - BD9103652CF6149D00BBCCAE /* HomeAPIEndpoint.swift in Sources */, - 086DD8E32CFF356300B97D3B /* HomeCardGridSection.swift in Sources */, - 0841BABE2CFB5AA600049E31 /* Date?+.swift in Sources */, - 08CFD3922D9BDE99004CDD50 /* DiskStorage.swift in Sources */, - 4E685EE12D12CEB6001EF91C /* StoreListReactor.swift in Sources */, - 4E685EE52D12CEB6001EF91C /* MapMarker.swift in Sources */, - 081898FB2D33D9320067BF01 /* GetBlockUserListResponseDTO.swift in Sources */, - 08DC620D2CF8AE16002A2F44 /* ImageBannerSectionCell.swift in Sources */, - 081899412D35FDA10067BF01 /* GetRecentPopUpResponse.swift in Sources */, - 08B1915B2CF41E690057BC04 /* SignUpMainReactor.swift in Sources */, - 4E685ED62D12CEB6001EF91C /* FilterChipsView.swift in Sources */, - 08B191882CF48FAE0057BC04 /* NickNameState.swift in Sources */, - 08A2E48C2D1BDA8A00102313 /* CommentDetailContentSectionCell.swift in Sources */, - 081898982D2965D20067BF01 /* ProfileEditReactor.swift in Sources */, - 083C86562D0DD7EE003F441C /* AddCommentSectionCell.swift in Sources */, - 08B191B22CF5C0A60057BC04 /* PPPicker.swift in Sources */, - 086DD92E2D0086B900B97D3B /* SearchView.swift in Sources */, - 0841BA822CF9F5DF00049E31 /* PreSignedService.swift in Sources */, - 086DD92C2D0086B100B97D3B /* SearchReactor.swift in Sources */, - 08A2E4972D1C07F500102313 /* GetPopUpCommentResponseDTO.swift in Sources */, - BD226D512CF6DB290038C984 /* PPReturnHeaderView.swift in Sources */, - 08B1913F2CF367FA0057BC04 /* UIColor+.swift in Sources */, - 086F8A0C2D2621F400CA4FC9 /* MyPageMyCommentTitleSectionCell.swift in Sources */, - BD91036D2CF6149D00BBCCAE /* SignUpAPIEndpoint.swift in Sources */, - 08A2E4862D1BD85C00102313 /* CommentDetailImageSection.swift in Sources */, - 0818993D2D35F12A0067BF01 /* MyPageRecentReactor.swift in Sources */, - 0899526A2D046CDE0022AEF9 /* SearchResultView.swift in Sources */, - 081898B02D2CFCA40067BF01 /* GetWithdrawlListResponse.swift in Sources */, - 083C86692D0ECB47003F441C /* InstaGuideSection.swift in Sources */, - 081899392D35F11F0067BF01 /* MyPageRecentView.swift in Sources */, - 088DE24C2D12F33B0030FA9E /* DetailInfoSectionCell.swift in Sources */, - 083C86762D0EE2CF003F441C /* PostCommentRequestDTO.swift in Sources */, - 083C861E2D08737F003F441C /* GetPopUpDetailResponseDTO.swift in Sources */, - 086F8A0F2D26297900CA4FC9 /* MyPageCommentSection.swift in Sources */, - 08B1916C2CF434C30057BC04 /* SignUpStep1View.swift in Sources */, - 083A25BC2CF362670099B58E /* ProviderImpl.swift in Sources */, - 4EEA1D8F2D352012003E7DE9 /* ImageCell.swift in Sources */, - 086DD93D2D009A2600B97D3B /* CancelableTagSectionCell.swift in Sources */, - 4E9C127A2D2BC811006744D6 /* AdminBottomSheetViewController.swift in Sources */, - 086DD8DA2CFF194700B97D3B /* UserAPIRepositoryImpl.swift in Sources */, - 4E685ECF2D12CEB6001EF91C /* BalloonChipCell.swift in Sources */, - 083A25CA2CF363C60099B58E /* LoginReactor.swift in Sources */, - 081898BE2D2E5F590067BF01 /* MyCommentController.swift in Sources */, - 083A25BA2CF362670099B58E /* TokenInterceptor.swift in Sources */, - 0841BAC32CFB600800049E31 /* TabbarController.swift in Sources */, - 089952442D031E6D0022AEF9 /* SearchSortedReactor.swift in Sources */, - 086F89E42D1FE91300CA4FC9 /* OtherUserCommentSection.swift in Sources */, - 083C86782D0EE382003F441C /* CommentAPIRepository.swift in Sources */, - 08B191B02CF5BFAE0057BC04 /* AgeSelectedReactor.swift in Sources */, - 4E685EDA2D12CEB6001EF91C /* MapUseCase.swift in Sources */, - 083C863F2D0C8BCE003F441C /* NormalCommentAddView.swift in Sources */, - 4EA9989A2D21C2FC009DC30B /* StoreListSection.swift in Sources */, - 083C86452D0DCDE9003F441C /* AddCommentTitleSectionCell.swift in Sources */, - 083C86412D0C8BD8003F441C /* NormalCommentAddReactor.swift in Sources */, - 089952732D0475E90022AEF9 /* SearchResultCountSection.swift in Sources */, - 08CBEA062D38991600248007 /* PostTokenReissueResponse.swift in Sources */, - 4EED9BAC2D22730400B288E7 /* FilterType.swift in Sources */, - 08B191A02CF4AA0E0057BC04 /* Reactive+.swift in Sources */, - 4E685ED32D12CEB6001EF91C /* FilterBottomSheetViewController.swift in Sources */, - 089952512D033C410022AEF9 /* GetSearchBottomPopUpListResponse.swift in Sources */, - 0841BABA2CFAE5BE00049E31 /* HomeHeaderView.swift in Sources */, - 081898E82D3392480067BF01 /* GetMyCommentRequestDTO.swift in Sources */, - 0841BAAC2CFA35F300049E31 /* UILabel+.swift in Sources */, - 081898F52D33D6B10067BF01 /* BlockUserManageController.swift in Sources */, - 08CBEA3E2D3FF6A100248007 /* PopUpCardView.swift in Sources */, - 086F89F32D2269DE00CA4FC9 /* MyPageController.swift in Sources */, - 0818994C2D3632320067BF01 /* PopUpCardSectionCell.swift in Sources */, - BD91036A2CF6149D00BBCCAE /* SignUpRepositoryImpl.swift in Sources */, - 081898EC2D33A3960067BF01 /* MyCommentSortedModalView.swift in Sources */, - BD91036C2CF6149D00BBCCAE /* GetCategoryListResponseDTO.swift in Sources */, - 086F8A182D265C5F00CA4FC9 /* MyPageListSection.swift in Sources */, - 086F8A1A2D265C6300CA4FC9 /* MyPageListSectionCell.swift in Sources */, - 081899272D3500BF0067BF01 /* FAQController.swift in Sources */, - 08B191672CF432220057BC04 /* PPCancelHeaderView.swift in Sources */, - BD9103812CF614A900BBCCAE /* HomeAPIUseCaseImpl.swift in Sources */, - 08DC62112CF8B446002A2F44 /* SortedRequestDTO.swift in Sources */, - 4EAB809F2D3F8EF50041AF30 /* ViewportBounds.swift in Sources */, - 08B191712CF4398D0057BC04 /* PPLabel.swift in Sources */, - 4E685ED22D12CEB6001EF91C /* FilterBottomSheetView.swift in Sources */, - 0899524F2D033B5A0022AEF9 /* GetSearchPopUpListRequestDTO.swift in Sources */, - 0899525A2D0347B40022AEF9 /* SearchCategoryReactor.swift in Sources */, - 083A25B92CF362670099B58E /* FormDataInterceptor.swift in Sources */, - 4E685EE42D12CEB6001EF91C /* MapFilterChips.swift in Sources */, - BD91036E2CF6149D00BBCCAE /* SignUpRequestDTO.swift in Sources */, - 08B191632CF430F30057BC04 /* PPProgressIndicator.swift in Sources */, - 081898942D2965C20067BF01 /* ProfileEditController.swift in Sources */, - 0818992D2D3506240067BF01 /* FAQDropdownSectionCell.swift in Sources */, - 08B191742CF43DF40057BC04 /* SignUpCheckBoxButton.swift in Sources */, - 086DD8D32CFDFF1500B97D3B /* HomePopUpType.swift in Sources */, - 4E643FC32D738D930046AF29 /* PopUpStoreRegisterView.swift in Sources */, - 081898CC2D30D5BF0067BF01 /* InfoEditModalController.swift in Sources */, - 08DE8A0D2D5236840049BCAC /* PutCommentRequestDTO.swift in Sources */, - 4E685EE92D12CEB6001EF91C /* MapView.swift in Sources */, - 4E755B212D2B9BAB00ADFB21 /* AdminResponseDTO.swift in Sources */, - 08B191382CF366680057BC04 /* UICollectionReusableView+.swift in Sources */, - 4E685EE02D12CEB6001EF91C /* StoreListCell.swift in Sources */, - 4EDDEFB42D2D285900CFAFA5 /* DateTimePickerManager.swift in Sources */, - 08B1915D2CF41E6F0057BC04 /* SignUpMainView.swift in Sources */, - 0841BAA52CFA31A900049E31 /* SpacingSectionCell.swift in Sources */, - 4E685EDF2D12CEB6001EF91C /* PopupCardCell.swift in Sources */, - 083A25B52CF362670099B58E /* Endpoint.swift in Sources */, - 081898A52D2CC0180067BF01 /* WithdrawlReasonController.swift in Sources */, - BDCA41C32CF35AC0005EECF6 /* SceneDelegate.swift in Sources */, - 08B1917F2CF46DF20057BC04 /* TermsDetailView.swift in Sources */, - 4E6A06702D42A96100B2A658 /* FullScreenMapViewController.swift in Sources */, - 4E685EDD2D12CEB6001EF91C /* MapPopUpStoreDTO.swift in Sources */, - 08B191412CF367FF0057BC04 /* UIFont+.swift in Sources */, - 0841BA8E2CF9F8A100049E31 /* ImageBannerChildSection.swift in Sources */, - 083C860D2D073A1C003F441C /* DetailController.swift in Sources */, - 08A2E4932D1BF6EF00102313 /* CommentListReactor.swift in Sources */, - 088DE2582D144B0F0030FA9E /* DetailCommentProfileView.swift in Sources */, - 0818989E2D2BAA610067BF01 /* WithdrawlCheckModalController.swift in Sources */, - 081898902D295DC80067BF01 /* MyPageLogoutSectionCell.swift in Sources */, - 081898EE2D33A39D0067BF01 /* MyCommentSortedModalController.swift in Sources */, - 081898AA2D2CEA2F0067BF01 /* WithdrawlCheckSectionCell.swift in Sources */, - 086DD8CC2CFDFEA800B97D3B /* HomeListController.swift in Sources */, - 086DD9342D00962500B97D3B /* SearchTitleSectionCell.swift in Sources */, - 08B191592CF41E610057BC04 /* SignUpMainController.swift in Sources */, - 0899526C2D0473EC0022AEF9 /* GetSearchPopUpListResponseDTO.swift in Sources */, - 081898B52D2D20E30067BF01 /* WithdrawlCompleteController.swift in Sources */, - 086F89F12D2269D800CA4FC9 /* MyPageView.swift in Sources */, - 081898F32D33D6AC0067BF01 /* BlockUserManageView.swift in Sources */, - 08A2E48A2D1BDA8400102313 /* CommentDetailContentSection.swift in Sources */, - 4E685EDE2D12CEB6001EF91C /* MapPopupCarouselView.swift in Sources */, - 08B1917D2CF46DE30057BC04 /* TermsDetailController.swift in Sources */, - 08CBEA0B2D38DBD600248007 /* LastLoginView.swift in Sources */, - 4E8AA29D2D59A2340029DF75 /* MarkerTooltipView.swift in Sources */, - 0841BAB12CFA38F500049E31 /* HomeCardSectionCell.swift in Sources */, - 4E685EE32D12CEB6001EF91C /* StoreListViewController.swift in Sources */, - 0818990A2D34B3620067BF01 /* MyPageNoticeController.swift in Sources */, - 083C862B2D08808C003F441C /* DetailContentSectionCell.swift in Sources */, - BD91036B2CF6149D00BBCCAE /* CheckNickNameRequestDTO.swift in Sources */, - 0841BAAF2CFA38EA00049E31 /* HomeCardSection.swift in Sources */, - 081898A02D2BAA670067BF01 /* WithdrawlCheckModalReactor.swift in Sources */, - 08B191842CF48A820057BC04 /* SignUpStep2View.swift in Sources */, - 0841BA882CF9F62400049E31 /* PresignedURLRequestDTO.swift in Sources */, - 0841BA8C2CF9F67100049E31 /* PreSignedAPIEndPoint.swift in Sources */, - 08DE8A1B2D5261DE0049BCAC /* MyPageTermsController.swift in Sources */, - 4E78706F2D37CB2200465FC9 /* PopUpStoreRegisterViewController.swift in Sources */, - 081899082D34B35A0067BF01 /* MyPageNoticeView.swift in Sources */, - 4E78706E2D37CB1900465FC9 /* ProfileEditListButton.swift in Sources */, - 081898D82D310C160067BF01 /* PutUserCategoryRequestDTO.swift in Sources */, - 08A2E4992D1C08D600102313 /* GetPopUpCommentResponse.swift in Sources */, - 08CBEA3C2D3FABED00248007 /* BookMarkToastView.swift in Sources */, - 0818988E2D295DC30067BF01 /* MyPageLogoutSection.swift in Sources */, - 089952552D033D480022AEF9 /* PopUpAPIUseCaseImpl.swift in Sources */, - BD9103662CF6149D00BBCCAE /* PopUpStoreResponseDTO.swift in Sources */, - 0841BA802CF9F34100049E31 /* ImageBannerChildSectionCell.swift in Sources */, - 4EA2C93F2D424D7400F4D97C /* MapDirectionUseCase.swift in Sources */, - 088DE2512D13019E0030FA9E /* DetailCommentTitleSectionCell.swift in Sources */, - 083C86592D0DEFC3003F441C /* CommentCheckView.swift in Sources */, - 082197AB2D4E3EEF0054094A /* CommentMyMenuReactor.swift in Sources */, - 083C86732D0EE2B1003F441C /* CommentAPIEndPoint.swift in Sources */, - 081898AC2D2CEA940067BF01 /* WithdrawlCheckSection.swift in Sources */, - 08B1913B2CF366A00057BC04 /* UIApplication+.swift in Sources */, - 083C86542D0DD7E9003F441C /* AddCommentSection.swift in Sources */, - 081898E02D338F9C0067BF01 /* ListCountButtonSection.swift in Sources */, - 4E685EE62D12CEB6001EF91C /* MapReactor.swift in Sources */, - 083A25BB2CF362670099B58E /* Provider.swift in Sources */, - 0899524B2D033A9C0022AEF9 /* GetClosePopUpListResponseDTO.swift in Sources */, - 0818990C2D34B3670067BF01 /* MyPageNoticeReactor.swift in Sources */, - 08B191A72CF5A9430057BC04 /* AgeSelectedButton.swift in Sources */, - 081898CA2D30D5BA0067BF01 /* InfoEditModalView.swift in Sources */, - 081899102D34B7240067BF01 /* GetNoticeListResponse.swift in Sources */, - 089952622D0366D30022AEF9 /* SearchMainView.swift in Sources */, - BD9103872CF614A900BBCCAE /* Category.swift in Sources */, - 083A25822CF361EF0099B58E /* BaseTabmanController.swift in Sources */, - 088DE25F2D145E3F0030FA9E /* DetailSimilarSectionCell.swift in Sources */, - 082197AD2D4E49370054094A /* DeleteCommentRequestDTO.swift in Sources */, - 082197B42D4E4E280054094A /* NormalCommentEditReactor.swift in Sources */, - 081898FF2D33DA440067BF01 /* GetBlockUserListRequestDTO.swift in Sources */, - BD9103852CF614A900BBCCAE /* AuthAPIUseCaseImpl.swift in Sources */, - 08CBEA032D38989E00248007 /* PostTokenReissueResponseDTO.swift in Sources */, - 08DE8A1D2D5261E70049BCAC /* MyPageTermsReactor.swift in Sources */, - 08B191762CF440C40057BC04 /* PPButton.swift in Sources */, - 083A25CC2CF363CB0099B58E /* LoginView.swift in Sources */, - 083A259B2CF362090099B58E /* SectionSupplementaryItem.swift in Sources */, - 4EA2C9412D424D8400F4D97C /* GetPopUpDirectionResponseDTO.swift in Sources */, - 086F89CA2D1E42A700CA4FC9 /* CommentUserBlockView.swift in Sources */, - 086DD8D02CFDFEB900B97D3B /* HomeListReactor.swift in Sources */, - 081899202D34DF880067BF01 /* MyPageNoticeDetailController.swift in Sources */, - 4EAB809D2D3F78AA0041AF30 /* NMFMapViewDelegateProxy.swift in Sources */, - 083C86472D0DCDFB003F441C /* AddCommentTitleSection.swift in Sources */, - 0841BAB62CFABEDC00049E31 /* HomePopularCardSectionCell.swift in Sources */, - 082197A92D4E3EE90054094A /* CommentMyMenuController.swift in Sources */, - 08B191822CF48A7B0057BC04 /* SignUpStep2Controller.swift in Sources */, - 086F8A112D26297D00CA4FC9 /* MyPageCommentSectionCell.swift in Sources */, - 4E685ED12D12CEB6001EF91C /* FilterBottomSheetReactor.swift in Sources */, - 4E6C07082D4B6E74008A962A /* ClusteringModels.swift in Sources */, - 08A2E49D2D1C416800102313 /* CommentListTitleSection.swift in Sources */, - 0818989C2D2BAA570067BF01 /* WithdrawlCheckModalView.swift in Sources */, - 081899122D34CA9E0067BF01 /* GetNoticeDetailResponseDTO.swift in Sources */, - 086DD8D82CFF185200B97D3B /* PostBookmarkPopUpRequestDTO.swift in Sources */, - 089952422D031E650022AEF9 /* SearchSortedController.swift in Sources */, - 089952532D033C940022AEF9 /* PopUpAPIRepositoryImpl.swift in Sources */, - 4E755B252D2B9C6C00ADFB21 /* AdminView.swift in Sources */, - 4E685ED42D12CEB6001EF91C /* FilterCell.swift in Sources */, - 088DE24F2D13019A0030FA9E /* DetailCommentTitleSection.swift in Sources */, - 081898B72D2D23A90067BF01 /* UINavigationController+.swift in Sources */, - 08B191A22CF4AE890057BC04 /* ToastMaker.swift in Sources */, - 082197A72D4E3EE00054094A /* CommentMyMenuView.swift in Sources */, - 086F89F72D226DF600CA4FC9 /* GetMyPageResponseDTO.swift in Sources */, - 083C86512D0DD3AB003F441C /* AddCommentImageSectionCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXVariantGroup section */ - BDCA41CB2CF35AC1005EECF6 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - BDCA41CC2CF35AC1005EECF6 /* Base */, - 08DE8A162D525A9B0049BCAC /* ko */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ BDCA41E52CF35AC2005EECF6 /* Debug */ = { isa = XCBuildConfiguration; @@ -3661,11 +370,12 @@ }; BDCA41E82CF35AC2005EECF6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 057151572D9D2E0800260615 /* Debug.xcconfig */; + baseConfigurationReferenceAnchor = 058789AD2DAD2E10004F81E2 /* Poppool */; + baseConfigurationReferenceRelativePath = Resource/Debug.xcconfig; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = Poppool/Poppool.entitlements; + CODE_SIGN_ENTITLEMENTS = Poppool/Resource/Poppool.entitlements; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; @@ -3706,11 +416,12 @@ }; BDCA41E92CF35AC2005EECF6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 057151572D9D2E0800260615 /* Debug.xcconfig */; + baseConfigurationReferenceAnchor = 058789AD2DAD2E10004F81E2 /* Poppool */; + baseConfigurationReferenceRelativePath = Resource/Debug.xcconfig; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = Poppool/Poppool.entitlements; + CODE_SIGN_ENTITLEMENTS = Poppool/Resource/Poppool.entitlements; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; @@ -3773,28 +484,28 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 0821979F2D426DCB0054094A /* XCRemoteSwiftPackageReference "Then" */ = { + 0522C3C42DB67D7800B141FF /* XCRemoteSwiftPackageReference "RxGesture" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/devxoul/Then"; + repositoryURL = "https://github.com/RxSwiftCommunity/RxGesture"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 3.0.0; + minimumVersion = 4.0.4; }; }; - 083A25CE2CF364B70099B58E /* XCRemoteSwiftPackageReference "Alamofire" */ = { + 05BDD5C32DB674E500C1E192 /* XCRemoteSwiftPackageReference "SnapKit" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Alamofire/Alamofire.git"; + repositoryURL = "https://github.com/SnapKit/SnapKit"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 5.10.1; + minimumVersion = 5.7.1; }; }; - 088DE2422D104EE70030FA9E /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { + 05BDD5D62DB6783C00C1E192 /* XCRemoteSwiftPackageReference "RxSwift" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/scinfu/SwiftSoup"; + repositoryURL = "https://github.com/ReactiveX/RxSwift"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 2.7.6; + minimumVersion = 6.9.0; }; }; 08F403312D884F4D00BFA61A /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = { @@ -3813,22 +524,6 @@ minimumVersion = 3.21.0; }; }; - 4E5825652D1951DF00EE83EF /* XCRemoteSwiftPackageReference "FloatingPanel" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/scenee/FloatingPanel.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.8.6; - }; - }; - 4EA9989B2D21C404009DC30B /* XCRemoteSwiftPackageReference "RxDataSources" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/RxSwiftCommunity/RxDataSources.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 5.0.2; - }; - }; 4EE360FB2D91876300D2441D /* XCRemoteSwiftPackageReference "SPM-NMapsMap" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/navermaps/SPM-NMapsMap"; @@ -3837,105 +532,24 @@ minimumVersion = 3.21.0; }; }; - BDCA41F02CF35D0D005EECF6 /* XCRemoteSwiftPackageReference "SnapKit" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/SnapKit/SnapKit.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 5.7.1; - }; - }; - BDCA41F62CF35D9A005EECF6 /* XCRemoteSwiftPackageReference "RxSwift" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/ReactiveX/RxSwift.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 6.8.0; - }; - }; - BDCA41FC2CF35EE7005EECF6 /* XCRemoteSwiftPackageReference "ReactorKit" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/ReactorKit/ReactorKit.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 3.2.0; - }; - }; - BDCA41FF2CF35EFE005EECF6 /* XCRemoteSwiftPackageReference "RxKeyboard" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/RxSwiftCommunity/RxKeyboard.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.0.1; - }; - }; - BDCA42022CF35F76005EECF6 /* XCRemoteSwiftPackageReference "PanModal" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/slackhq/PanModal.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 1.2.7; - }; - }; - BDCA42052CF35FA6005EECF6 /* XCRemoteSwiftPackageReference "Tabman" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/uias/Tabman.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 3.2.0; - }; - }; - BDCA42082CF35FB1005EECF6 /* XCRemoteSwiftPackageReference "Pageboy" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/uias/Pageboy.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 4.2.0; - }; - }; - BDCA420B2CF35FD2005EECF6 /* XCRemoteSwiftPackageReference "RxGesture" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/RxSwiftCommunity/RxGesture.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 4.0.4; - }; - }; - BDCA420E2CF35FF5005EECF6 /* XCRemoteSwiftPackageReference "lottie-spm" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/airbnb/lottie-spm.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 4.5.0; - }; - }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 082197A02D426DCB0054094A /* Then */ = { - isa = XCSwiftPackageProductDependency; - package = 0821979F2D426DCB0054094A /* XCRemoteSwiftPackageReference "Then" */; - productName = Then; - }; - 083A25CF2CF364B70099B58E /* Alamofire */ = { + 0522C1D82DB67C5900B141FF /* RxSwift */ = { isa = XCSwiftPackageProductDependency; - package = 083A25CE2CF364B70099B58E /* XCRemoteSwiftPackageReference "Alamofire" */; - productName = Alamofire; + package = 05BDD5D62DB6783C00C1E192 /* XCRemoteSwiftPackageReference "RxSwift" */; + productName = RxSwift; }; - 088DE2432D104EE70030FA9E /* SwiftSoup */ = { + 0522C3C52DB67D7800B141FF /* RxGesture */ = { isa = XCSwiftPackageProductDependency; - package = 088DE2422D104EE70030FA9E /* XCRemoteSwiftPackageReference "SwiftSoup" */; - productName = SwiftSoup; + package = 0522C3C42DB67D7800B141FF /* XCRemoteSwiftPackageReference "RxGesture" */; + productName = RxGesture; }; 4E1514292D99480200DFD08F /* NMapsMap */ = { isa = XCSwiftPackageProductDependency; package = 4E1514282D99480200DFD08F /* XCRemoteSwiftPackageReference "SPM-NMapsMap" */; productName = NMapsMap; }; - 4E15142B2D994A3A00DFD08F /* KakaoSDK */ = { - isa = XCSwiftPackageProductDependency; - productName = KakaoSDK; - }; 4E15142D2D994A3A00DFD08F /* KakaoSDKAuth */ = { isa = XCSwiftPackageProductDependency; productName = KakaoSDKAuth; @@ -3944,66 +558,11 @@ isa = XCSwiftPackageProductDependency; productName = KakaoSDKCommon; }; - 4E5825662D1951DF00EE83EF /* FloatingPanel */ = { - isa = XCSwiftPackageProductDependency; - package = 4E5825652D1951DF00EE83EF /* XCRemoteSwiftPackageReference "FloatingPanel" */; - productName = FloatingPanel; - }; - 4EA9989C2D21C404009DC30B /* RxDataSources */ = { - isa = XCSwiftPackageProductDependency; - package = 4EA9989B2D21C404009DC30B /* XCRemoteSwiftPackageReference "RxDataSources" */; - productName = RxDataSources; - }; 4EE360FC2D91876300D2441D /* NMapsMap */ = { isa = XCSwiftPackageProductDependency; package = 4EE360FB2D91876300D2441D /* XCRemoteSwiftPackageReference "SPM-NMapsMap" */; productName = NMapsMap; }; - BDCA41F12CF35D0D005EECF6 /* SnapKit */ = { - isa = XCSwiftPackageProductDependency; - package = BDCA41F02CF35D0D005EECF6 /* XCRemoteSwiftPackageReference "SnapKit" */; - productName = SnapKit; - }; - BDCA41F72CF35D9A005EECF6 /* RxSwift */ = { - isa = XCSwiftPackageProductDependency; - package = BDCA41F62CF35D9A005EECF6 /* XCRemoteSwiftPackageReference "RxSwift" */; - productName = RxSwift; - }; - BDCA41FD2CF35EE7005EECF6 /* ReactorKit */ = { - isa = XCSwiftPackageProductDependency; - package = BDCA41FC2CF35EE7005EECF6 /* XCRemoteSwiftPackageReference "ReactorKit" */; - productName = ReactorKit; - }; - BDCA42002CF35EFE005EECF6 /* RxKeyboard */ = { - isa = XCSwiftPackageProductDependency; - package = BDCA41FF2CF35EFE005EECF6 /* XCRemoteSwiftPackageReference "RxKeyboard" */; - productName = RxKeyboard; - }; - BDCA42032CF35F76005EECF6 /* PanModal */ = { - isa = XCSwiftPackageProductDependency; - package = BDCA42022CF35F76005EECF6 /* XCRemoteSwiftPackageReference "PanModal" */; - productName = PanModal; - }; - BDCA42062CF35FA6005EECF6 /* Tabman */ = { - isa = XCSwiftPackageProductDependency; - package = BDCA42052CF35FA6005EECF6 /* XCRemoteSwiftPackageReference "Tabman" */; - productName = Tabman; - }; - BDCA42092CF35FB1005EECF6 /* Pageboy */ = { - isa = XCSwiftPackageProductDependency; - package = BDCA42082CF35FB1005EECF6 /* XCRemoteSwiftPackageReference "Pageboy" */; - productName = Pageboy; - }; - BDCA420C2CF35FD2005EECF6 /* RxGesture */ = { - isa = XCSwiftPackageProductDependency; - package = BDCA420B2CF35FD2005EECF6 /* XCRemoteSwiftPackageReference "RxGesture" */; - productName = RxGesture; - }; - BDCA420F2CF35FF5005EECF6 /* Lottie */ = { - isa = XCSwiftPackageProductDependency; - package = BDCA420E2CF35FF5005EECF6 /* XCRemoteSwiftPackageReference "lottie-spm" */; - productName = Lottie; - }; /* End XCSwiftPackageProductDependency section */ }; rootObject = BDCA41B52CF35AC0005EECF6 /* Project object */; diff --git a/Poppool/Poppool.xcodeproj/xcshareddata/xcschemes/Poppool.xcscheme b/Poppool/Poppool.xcodeproj/xcshareddata/xcschemes/Poppool.xcscheme index 858b58f7..9b875b57 100644 --- a/Poppool/Poppool.xcodeproj/xcshareddata/xcschemes/Poppool.xcscheme +++ b/Poppool/Poppool.xcodeproj/xcshareddata/xcschemes/Poppool.xcscheme @@ -1,6 +1,6 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Poppool/Poppool.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Poppool/Poppool.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 00000000..069cbc12 --- /dev/null +++ b/Poppool/Poppool.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,159 @@ +{ + "originHash" : "bb8b8add80965de3fd56f4bb28fdba3b8a176e1362ab3ddd0bb3dcc27bc6f621", + "pins" : [ + { + "identity" : "alamofire", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Alamofire/Alamofire.git", + "state" : { + "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", + "version" : "5.10.2" + } + }, + { + "identity" : "floatingpanel", + "kind" : "remoteSourceControl", + "location" : "https://github.com/scenee/FloatingPanel.git", + "state" : { + "revision" : "a1f20cedb14bd1ddc63e30a8dd10c85e8f1fa011", + "version" : "2.8.7" + } + }, + { + "identity" : "kakao-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kakao/kakao-ios-sdk.git", + "state" : { + "revision" : "bfe2fe42f730ccfe59e85f6e9eda2f4578e9a307", + "version" : "2.24.0" + } + }, + { + "identity" : "lottie-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/airbnb/lottie-ios", + "state" : { + "revision" : "047aa81b77adcbf583a966dfef620d17650cc656", + "version" : "4.5.1" + } + }, + { + "identity" : "pageboy", + "kind" : "remoteSourceControl", + "location" : "https://github.com/uias/Pageboy.git", + "state" : { + "revision" : "be0c1f6f1964cfb07f9d819b0863f2c3f255f612", + "version" : "4.2.0" + } + }, + { + "identity" : "panmodal", + "kind" : "remoteSourceControl", + "location" : "https://github.com/slackhq/PanModal.git", + "state" : { + "revision" : "b012aecb6b67a8e46369227f893c12544846613f", + "version" : "1.2.7" + } + }, + { + "identity" : "reactorkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ReactorKit/ReactorKit.git", + "state" : { + "revision" : "8fa33f09c6f6621a2aa536d739956d53b84dd139", + "version" : "3.2.0" + } + }, + { + "identity" : "rxdatasources", + "kind" : "remoteSourceControl", + "location" : "https://github.com/RxSwiftCommunity/RxDataSources.git", + "state" : { + "revision" : "90c29b48b628479097fe775ed1966d75ac374518", + "version" : "5.0.2" + } + }, + { + "identity" : "rxgesture", + "kind" : "remoteSourceControl", + "location" : "https://github.com/RxSwiftCommunity/RxGesture.git", + "state" : { + "revision" : "1b137c576b4aaaab949235752278956697c9e4a0", + "version" : "4.0.4" + } + }, + { + "identity" : "rxkeyboard", + "kind" : "remoteSourceControl", + "location" : "https://github.com/RxSwiftCommunity/RxKeyboard.git", + "state" : { + "revision" : "63f6377975c962a1d89f012a6f1e5bebb2c502b7", + "version" : "2.0.1" + } + }, + { + "identity" : "rxswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ReactiveX/RxSwift.git", + "state" : { + "revision" : "5dd1907d64f0d36f158f61a466bab75067224893", + "version" : "6.9.0" + } + }, + { + "identity" : "snapkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SnapKit/SnapKit.git", + "state" : { + "revision" : "2842e6e84e82eb9a8dac0100ca90d9444b0307f4", + "version" : "5.7.1" + } + }, + { + "identity" : "spm-nmapsgeometry", + "kind" : "remoteSourceControl", + "location" : "https://github.com/navermaps/SPM-NMapsGeometry.git", + "state" : { + "revision" : "436d5e2e684f557faf5ef5862fd6633a42d7af11", + "version" : "1.0.2" + } + }, + { + "identity" : "spm-nmapsmap", + "kind" : "remoteSourceControl", + "location" : "https://github.com/navermaps/SPM-NMapsMap", + "state" : { + "revision" : "ad89e53fdfec3b8d8994280fb0414b5a7b1c3e8e", + "version" : "3.21.0" + } + }, + { + "identity" : "tabman", + "kind" : "remoteSourceControl", + "location" : "https://github.com/uias/Tabman.git", + "state" : { + "revision" : "3b2213290eb93e55bb50b49d1a179033005c11ab", + "version" : "3.2.0" + } + }, + { + "identity" : "then", + "kind" : "remoteSourceControl", + "location" : "https://github.com/devxoul/Then", + "state" : { + "revision" : "d41ef523faef0f911369f79c0b96815d9dbb6d7a", + "version" : "3.0.0" + } + }, + { + "identity" : "weakmaptable", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ReactorKit/WeakMapTable.git", + "state" : { + "revision" : "cb05d64cef2bbf51e85c53adee937df46540a74e", + "version" : "1.2.1" + } + } + ], + "version" : 3 +} diff --git a/Poppool/Poppool/Application/AppDelegate.swift b/Poppool/Poppool/Application/AppDelegate.swift index 5b018dd2..f7f91de9 100644 --- a/Poppool/Poppool/Application/AppDelegate.swift +++ b/Poppool/Poppool/Application/AppDelegate.swift @@ -1,18 +1,26 @@ import CoreLocation +import UIKit + +import Data +import Domain +import DomainInterface +import Infrastructure + import KakaoSDKCommon import NMapsMap -import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - KakaoSDK.initSDK(appKey: KeyPath.kakaoAuthAppKey) - NMFAuthManager.shared().clientId = KeyPath.naverMapClientID + KakaoSDK.initSDK(appKey: Secrets.kakaoAuthAppKey) + NMFAuthManager.shared().clientId = Secrets.naverMapClientID let locationManager = CLLocationManager() locationManager.requestWhenInUseAuthorization() + self.registerDependencies() + return true } @@ -21,3 +29,50 @@ class AppDelegate: UIResponder, UIApplicationDelegate { return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } } + +// MARK: - Dependency +extension AppDelegate { + /// 의존성 등록을 위한 메서드 + private func registerDependencies() { + // MARK: Register Service + DIContainer.register(Provider.self) { return ProviderImpl() } + DIContainer.register(KeyChainService.self) { return KeyChainService() } + + // MARK: Resolve service + @Dependency var provider: Provider + + // MARK: Register repository + DIContainer.register(MapRepository.self) { return MapRepositoryImpl(provider: provider) } + DIContainer.register(AdminRepository.self) { return AdminRepositoryImpl(provider: provider) } + DIContainer.register(UserAPIRepository.self) { return UserAPIRepositoryImpl(provider: provider) } + DIContainer.register(PopUpAPIRepository.self) { return PopUpAPIRepositoryImpl(provider: provider) } + DIContainer.register(CommentAPIRepository.self) { return CommentAPIRepositoryImpl(provider: provider) } + DIContainer.register(HomeAPIRepository.self) { return HomeAPIRepositoryImpl(provider: provider) } + DIContainer.register(AuthAPIRepository.self) { return AuthAPIRepositoryImpl(provider: provider) } + DIContainer.register(SignUpRepository.self) { return SignUpRepositoryImpl(provider: provider) } + DIContainer.register(MapDirectionRepository.self) { return MapDirectionRepositoryImpl(provider: provider) } + DIContainer.register(PreSignedRepository.self) { return PreSignedRepositoryImpl() } + + // MARK: Resolve repository + @Dependency var mapRepository: MapRepository + @Dependency var adminRepository: AdminRepository + @Dependency var userAPIRepository: UserAPIRepository + @Dependency var popUpAPIRepository: PopUpAPIRepository + @Dependency var commentAPIRepository: CommentAPIRepository + @Dependency var homeAPIRepository: HomeAPIRepository + @Dependency var authAPIRepository: AuthAPIRepository + @Dependency var signUpRepository: SignUpRepository + @Dependency var preSignedRepository: PreSignedRepository + + // MARK: Register UseCase + DIContainer.register(MapUseCase.self) { return MapUseCaseImpl(repository: mapRepository) } + DIContainer.register(AdminUseCase.self) { return AdminUseCaseImpl(repository: adminRepository) } + DIContainer.register(UserAPIUseCase.self) { return UserAPIUseCaseImpl(repository: userAPIRepository) } + DIContainer.register(PopUpAPIUseCase.self) { return PopUpAPIUseCaseImpl(repository: popUpAPIRepository) } + DIContainer.register(CommentAPIUseCase.self) { return CommentAPIUseCaseImpl(repository: commentAPIRepository) } + DIContainer.register(HomeAPIUseCase.self) { return HomeAPIUseCaseImpl(repository: homeAPIRepository) } + DIContainer.register(AuthAPIUseCase.self) { return AuthAPIUseCaseImpl(repository: authAPIRepository) } + DIContainer.register(SignUpAPIUseCase.self) { return SignUpAPIUseCaseImpl(repository: signUpRepository) } + DIContainer.register(PreSignedUseCase.self) { return PreSignedUseCaseImpl(repository: preSignedRepository) } + } +} diff --git a/Poppool/Poppool/Application/SceneDelegate.swift b/Poppool/Poppool/Application/SceneDelegate.swift index 5a7be40e..1df47b66 100644 --- a/Poppool/Poppool/Application/SceneDelegate.swift +++ b/Poppool/Poppool/Application/SceneDelegate.swift @@ -1,5 +1,7 @@ import UIKit +import Presentation + import KakaoSDKAuth import RxSwift @@ -9,7 +11,6 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { static let appDidBecomeActive = PublishSubject() static let appDidDisconnect = PublishSubject() - private let disposeBag = DisposeBag() func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } diff --git a/Poppool/Poppool/Data/Network/SortedRequestDTO.swift b/Poppool/Poppool/Data/Network/SortedRequestDTO.swift deleted file mode 100644 index 70752653..00000000 --- a/Poppool/Poppool/Data/Network/SortedRequestDTO.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// SortedRequestDTO.swift -// Poppool -// -// Created by SeoJunYoung on 11/28/24. -// - -import Foundation - -struct SortedRequestDTO: Encodable { - var page: Int32? - var size: Int32? - var sort: String? -} diff --git a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/GetBlockUserListRequestDTO.swift b/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/GetBlockUserListRequestDTO.swift deleted file mode 100644 index a06c73c1..00000000 --- a/Poppool/Poppool/Data/Network/UserAPI/RequesetDTO/GetBlockUserListRequestDTO.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// GetBlockUserListRequestDTO.swift -// Poppool -// -// Created by SeoJunYoung on 1/12/25. -// - -import Foundation - -struct GetBlockUserListRequestDTO: Encodable { - var page: Int32? - var size: Int32? - var sort: String? -} diff --git a/Poppool/Poppool/Data/Repository/AdminRepository.swift b/Poppool/Poppool/Data/Repository/AdminRepository.swift deleted file mode 100644 index 7d0bd1e6..00000000 --- a/Poppool/Poppool/Data/Repository/AdminRepository.swift +++ /dev/null @@ -1,187 +0,0 @@ -import Alamofire -import Foundation -import RxSwift -import UIKit - -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 -} - -final class DefaultAdminRepository: AdminRepository { - - // MARK: - Properties - private let provider: Provider - private let tokenInterceptor = TokenInterceptor() - - // MARK: - Init - init(provider: Provider) { - self.provider = provider - } - - // MARK: - Store Methods - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable { - let endpoint = AdminAPIEndpoint.fetchStoreList( - query: query, - page: page, - size: size - ) - return provider.requestData( - with: endpoint, - interceptor: tokenInterceptor - ) - } - - func fetchStoreDetail(id: Int64) -> Observable { - let endpoint = AdminAPIEndpoint.fetchStoreDetail(id: id) - return provider.requestData( - with: endpoint, - interceptor: tokenInterceptor - ) - .catch { error in - if case .responseSerializationFailed = error as? AFError { - // 빈 데이터 응답시 기본값 반환 - return Observable.just(GetAdminPopUpStoreDetailResponseDTO.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 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 - ) - .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) - }) - } - - func deleteStore(id: Int64) -> Observable { - Logger.log(message: "deleteStore API 호출 시작", category: .info) - 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 updateNotice(id: Int64, request: UpdateNoticeRequestDTO) -> Observable { - let endpoint = AdminAPIEndpoint.updateNotice(id: id, request: request) - return provider.requestData( - with: endpoint, - interceptor: tokenInterceptor - ) - } - - func deleteNotice(id: Int64) -> Observable { - let endpoint = AdminAPIEndpoint.deleteNotice(id: id) - return provider.requestData( - with: endpoint, - interceptor: tokenInterceptor - ) - } -} -extension GetAdminPopUpStoreDetailResponseDTO { - static var empty: GetAdminPopUpStoreDetailResponseDTO { - return GetAdminPopUpStoreDetailResponseDTO( - id: 0, - name: "", - categoryId: 0, - categoryName: "", - desc: "", - address: "", - startDate: "", - endDate: "", - createUserId: "", - createDateTime: "", - mainImageUrl: "", - bannerYn: false, - imageList: [], - latitude: 0.0, - longitude: 0.0, - markerTitle: "", - markerSnippet: "" - ) - } -} diff --git a/Poppool/Poppool/Data/Repository/CommentAPIRepository.swift b/Poppool/Poppool/Data/Repository/CommentAPIRepository.swift deleted file mode 100644 index f5264dbf..00000000 --- a/Poppool/Poppool/Data/Repository/CommentAPIRepository.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// CommentAPIRepository.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - -import Foundation - -import RxSwift - -final class CommentAPIRepository { - - private let provider: Provider - private let tokenInterceptor = TokenInterceptor() - - init(provider: Provider) { - self.provider = provider - } - - func postCommentAdd(request: PostCommentRequestDTO) -> Completable { - let endPoint = CommentAPIEndPoint.postCommentAdd(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func deleteComment(request: DeleteCommentRequestDTO) -> Completable { - let endPoint = CommentAPIEndPoint.deleteComment(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func editComment(request: PutCommentRequestDTO) -> Completable { - let endPoint = CommentAPIEndPoint.editComment(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } -} diff --git a/Poppool/Poppool/Data/Repository/MapRepository.swift b/Poppool/Poppool/Data/Repository/MapRepository.swift deleted file mode 100644 index a10bffc5..00000000 --- a/Poppool/Poppool/Data/Repository/MapRepository.swift +++ /dev/null @@ -1,101 +0,0 @@ -// -// MapRepository.swift -// Poppool -// -// Created by 김기현 on 12/3/24. -// - -import Foundation -import RxSwift - -protocol MapRepository { - func fetchStoresInBounds( - northEastLat: Double, - northEastLon: Double, - southWestLat: Double, - southWestLon: Double, - categories: [Int64] - ) -> Observable<[MapPopUpStoreDTO]> - - func searchStores( - query: String, - categories: [Int64] - ) -> Observable<[MapPopUpStoreDTO]> - - func fetchCategories() -> Observable<[Category]> -} - -// MARK: - Implementation -class DefaultMapRepository: MapRepository { - private let provider: Provider - - init(provider: Provider) { - self.provider = provider - } - - func fetchStoresInBounds( - northEastLat: Double, - northEastLon: Double, - southWestLat: Double, - southWestLon: Double, - categories: [Int64] - ) -> Observable<[MapPopUpStoreDTO]> { - return provider.requestData( - with: MapAPIEndpoint.locations_fetchStoresInBounds( - northEastLat: northEastLat, - northEastLon: northEastLon, - southWestLat: southWestLat, - southWestLon: southWestLon, - categories: categories - ), - interceptor: TokenInterceptor() - ) - .map { $0.popUpStoreList } - } - - func searchStores( - query: String, - categories: [Int64] - ) -> Observable<[MapPopUpStoreDTO]> { - return provider.requestData( - with: MapAPIEndpoint.locations_searchStores( - query: query, - categories: categories - ), - interceptor: TokenInterceptor() - ) - .map { $0.popUpStoreList } - } - - func fetchCategories() -> Observable<[Category]> { - Logger.log(message: "카테고리 매핑 요청을 시작합니다.", category: .network) - - return provider.requestData( - with: SignUpAPIEndpoint.signUp_getCategoryList(), - interceptor: TokenInterceptor() - ) - .do(onNext: { responseDTO in - Logger.log( - message: """ - 카테고리 매핑 응답: - - Response: \(responseDTO) - - categoryResponseList: \(responseDTO.categoryResponseList) - """, - category: .debug - ) - }) - .map { responseDTO in - let categories = responseDTO.categoryResponseList.map { $0.toDomain() } - Logger.log(message: "매핑된 카테고리 데이터: \(categories)", category: .debug) - return categories - } - .catch { error in - Logger.log( - message: "카테고리 매핑 요청 실패: \(error.localizedDescription)", - category: .error - ) - throw error - } - } - -} diff --git a/Poppool/Poppool/Data/Repository/PopUpAPIRepositoryImpl.swift b/Poppool/Poppool/Data/Repository/PopUpAPIRepositoryImpl.swift deleted file mode 100644 index 3c786005..00000000 --- a/Poppool/Poppool/Data/Repository/PopUpAPIRepositoryImpl.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// PopUpAPIRepositoryImpl.swift -// Poppool -// -// Created by SeoJunYoung on 12/6/24. -// - -import Foundation - -import RxSwift - -struct PopUpAPIRepositoryImpl { - private let provider: Provider - private let tokenInterceptor = TokenInterceptor() - - init(provider: Provider) { - self.provider = provider - } - - func postBookmarkPopUp(request: PostBookmarkPopUpRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.postBookmarkPopUp(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func getClosePopUpList(request: GetSearchPopUpListRequestDTO) -> Observable { - let endPoint = PopUpAPIEndPoint.getClosePopUpList(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getOpenPopUpList(request: GetSearchPopUpListRequestDTO) -> Observable { - let endPoint = PopUpAPIEndPoint.getOpenPopUpList(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getSearchPopUpList(request: GetSearchPopUpListRequestDTO) -> Observable { - let endPoint = PopUpAPIEndPoint.getSearchPopUpList(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getPopUpDetail(request: GetPopUpDetailRequestDTO) -> Observable { - let endPoint = PopUpAPIEndPoint.getPopUpDetail(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getPopUpComment(request: GetPopUpCommentRequestDTO) -> Observable { - let endPoint = PopUpAPIEndPoint.getPopUpComment(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } -} diff --git a/Poppool/Poppool/Data/Repository/UserAPIRepositoryImpl.swift b/Poppool/Poppool/Data/Repository/UserAPIRepositoryImpl.swift deleted file mode 100644 index 55a66ddb..00000000 --- a/Poppool/Poppool/Data/Repository/UserAPIRepositoryImpl.swift +++ /dev/null @@ -1,125 +0,0 @@ -// -// UserAPIRepositoryImpl.swift -// Poppool -// -// Created by SeoJunYoung on 12/3/24. -// - -import Foundation - -import RxSwift - -final class UserAPIRepositoryImpl { - - private let provider: Provider - private let tokenInterceptor = TokenInterceptor() - - init(provider: Provider) { - self.provider = provider - } - - func postBookmarkPopUp(request: PostBookmarkPopUpRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.postBookmarkPopUp(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func deleteBookmarkPopUp(request: PostBookmarkPopUpRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.deleteBookmarkPopUp(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func postCommentLike(request: CommentLikeRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.postCommentLike(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func deleteCommentLike(request: CommentLikeRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.deleteCommentLike(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func postUserBlock(request: PostUserBlockRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.postUserBlock(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func deleteUserBlock(request: PostUserBlockRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.deleteUserBlock(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func getOtherUserCommentList(request: GetOtherUserCommentListRequestDTO) -> Observable { - let endPoint = UserAPIEndPoint.getOtherUserCommentPopUpList(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getMyPage() -> Observable { - let endPoint = UserAPIEndPoint.getMyPage() - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func postLogout() -> Completable { - let endPoint = UserAPIEndPoint.postLogout() - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func getWithdrawlList() -> Observable { - let endPoint = UserAPIEndPoint.getWithdrawlList() - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func postWithdrawl(request: PostWithdrawlListRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.postWithdrawl(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func getMyProfile() -> Observable { - let endPoint = UserAPIEndPoint.getMyProfile() - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func putUserTailoredInfo(request: PutUserTailoredInfoRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.putUserTailoredInfo(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func putUserCategory(request: PutUserCategoryRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.putUserCategory(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func putUserProfile(request: PutUserProfileRequestDTO) -> Completable { - let endPoint = UserAPIEndPoint.putUserProfile(request: request) - return provider.request(with: endPoint, interceptor: tokenInterceptor) - } - - func getMyCommentedPopUp(request: SortedRequestDTO) -> Observable { - let endPoint = UserAPIEndPoint.getMyCommentedPopUp(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getBlockUserList(request: GetBlockUserListRequestDTO) -> Observable { - let endPoint = UserAPIEndPoint.getBlockUserList(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getNoticeList() -> Observable { - let endPoint = UserAPIEndPoint.getNoticeList() - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getNoticeDetail(noticeID: Int64) -> Observable { - let endPoint = UserAPIEndPoint.getNoticeDetail(noticeID: noticeID) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getRecentPopUp(request: SortedRequestDTO) -> Observable { - let endPoint = UserAPIEndPoint.getRecentPopUp(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } - - func getBookmarkPopUp(request: SortedRequestDTO) -> Observable { - let endPoint = UserAPIEndPoint.getBookmarkPopUp(request: request) - return provider.requestData(with: endPoint, interceptor: tokenInterceptor) - } -} diff --git a/Poppool/Poppool/Domain/Entities/AuthAPI/LoginResponse.swift b/Poppool/Poppool/Domain/Entities/AuthAPI/LoginResponse.swift deleted file mode 100644 index 7cb0f2a1..00000000 --- a/Poppool/Poppool/Domain/Entities/AuthAPI/LoginResponse.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// LoginResponse.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - -import Foundation - -struct LoginResponse { - var userId: String - var grantType: String - var accessToken: String - var refreshToken: String - var accessTokenExpiresAt: String - var refreshTokenExpiresAt: String - var socialType: String - var isRegisteredUser: Bool -} diff --git a/Poppool/Poppool/Domain/Entities/AuthAPI/PostTokenReissueResponse.swift b/Poppool/Poppool/Domain/Entities/AuthAPI/PostTokenReissueResponse.swift deleted file mode 100644 index 299e9612..00000000 --- a/Poppool/Poppool/Domain/Entities/AuthAPI/PostTokenReissueResponse.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// PostTokenReissueResponse.swift -// Poppool -// -// Created by SeoJunYoung on 1/16/25. -// - -import Foundation - -struct PostTokenReissueResponse { - var accessToken: String? - var refreshToken: String? - var accessTokenExpiresAt: String? - var refreshTokenExpiresAt: String? -} diff --git a/Poppool/Poppool/Domain/Entities/BannerPopUpStore.swift b/Poppool/Poppool/Domain/Entities/BannerPopUpStore.swift deleted file mode 100644 index 11868aaf..00000000 --- a/Poppool/Poppool/Domain/Entities/BannerPopUpStore.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// BannerPopUpStore.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - -import Foundation - -struct BannerPopUpStore { - var id: Int64 - var name: String - var mainImageUrl: String -} diff --git a/Poppool/Poppool/Domain/Entities/Category.swift b/Poppool/Poppool/Domain/Entities/Category.swift deleted file mode 100644 index 9f7da1cd..00000000 --- a/Poppool/Poppool/Domain/Entities/Category.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// Category.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - -import Foundation - -struct Category { - let categoryId: Int64 - let category: String -} diff --git a/Poppool/Poppool/Domain/Entities/GetBlockUserListResponse.swift b/Poppool/Poppool/Domain/Entities/GetBlockUserListResponse.swift deleted file mode 100644 index bc7f1adc..00000000 --- a/Poppool/Poppool/Domain/Entities/GetBlockUserListResponse.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// GetBlockUserListResponse.swift -// Poppool -// -// Created by SeoJunYoung on 1/12/25. -// - -import Foundation - -struct GetBlockUserListResponse { - var blockedUserInfoList: [GetBlockUserListDataResponse] - var totalPages: Int32 - var totalElements: Int32 -} - -struct GetBlockUserListDataResponse { - var userId: String? - var profileImageUrl: String? - var nickname: String? - var instagramId: String? -} diff --git a/Poppool/Poppool/Domain/Entities/GetHomeInfoResponse.swift b/Poppool/Poppool/Domain/Entities/GetHomeInfoResponse.swift deleted file mode 100644 index a12a3fce..00000000 --- a/Poppool/Poppool/Domain/Entities/GetHomeInfoResponse.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// GetHomeInfoResponse.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - -import Foundation - -struct GetHomeInfoResponse { - var bannerPopUpStoreList: [BannerPopUpStore] - var nickname: String? - var customPopUpStoreList: [PopUpStoreResponse] - var customPopUpStoreTotalPages: Int32 - var customPopUpStoreTotalElements: Int64 - var popularPopUpStoreList: [PopUpStoreResponse] - var popularPopUpStoreTotalPages: Int32 - var popularPopUpStoreTotalElements: Int64 - var newPopUpStoreList: [PopUpStoreResponse] - var newPopUpStoreTotalPages: Int32 - var newPopUpStoreTotalElements: Int64 - var loginYn: Bool -} diff --git a/Poppool/Poppool/Domain/Entities/GetMyCommentResponse.swift b/Poppool/Poppool/Domain/Entities/GetMyCommentResponse.swift deleted file mode 100644 index 6d47e920..00000000 --- a/Poppool/Poppool/Domain/Entities/GetMyCommentResponse.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// GetMyCommentResponse.swift -// Poppool -// -// Created by SeoJunYoung on 1/12/25. -// - -import Foundation - -struct GetMyCommentedPopUpResponse { - var popUpInfoList: [GetMyCommentedPopUpDataResponse] -} - -struct GetMyCommentedPopUpDataResponse { - var popUpStoreId: Int64 - var popUpStoreName: String? - var desc: String? - var mainImageUrl: String? - var startDate: String? - var endDate: String? - var address: String? - var closedYn: Bool -} diff --git a/Poppool/Poppool/Domain/Entities/GetMyPageResponse.swift b/Poppool/Poppool/Domain/Entities/GetMyPageResponse.swift deleted file mode 100644 index 0586e572..00000000 --- a/Poppool/Poppool/Domain/Entities/GetMyPageResponse.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// GetMyPageResponse.swift -// Poppool -// -// Created by SeoJunYoung on 12/30/24. -// - -import Foundation - -struct GetMyPageResponse { - var nickname: String? - var profileImageUrl: String? - var intro: String? - var instagramId: String? - var loginYn: Bool - var adminYn: Bool - var myCommentedPopUpList: [GetMyPagePopUpResponse] -} - -struct GetMyPagePopUpResponse { - var popUpStoreId: Int64 - var popUpStoreName: String? - var mainImageUrl: String? -} diff --git a/Poppool/Poppool/Domain/Entities/GetMyProfileResponse.swift b/Poppool/Poppool/Domain/Entities/GetMyProfileResponse.swift deleted file mode 100644 index 081da110..00000000 --- a/Poppool/Poppool/Domain/Entities/GetMyProfileResponse.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// GetMyProfileResponse.swift -// Poppool -// -// Created by SeoJunYoung on 1/10/25. -// - -import Foundation - -struct GetMyProfileResponse { - var profileImageUrl: String? - var nickname: String? - var email: String? - var instagramId: String? - var intro: String? - var gender: String? - var age: Int32 - var interestCategoryList: [Category] -} diff --git a/Poppool/Poppool/Domain/Entities/GetNoticeDetailResponse.swift b/Poppool/Poppool/Domain/Entities/GetNoticeDetailResponse.swift deleted file mode 100644 index a259e9d4..00000000 --- a/Poppool/Poppool/Domain/Entities/GetNoticeDetailResponse.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// GetNoticeDetailResponse.swift -// Poppool -// -// Created by SeoJunYoung on 1/13/25. -// - -import Foundation - -struct GetNoticeDetailResponse { - var id: Int64 - var title: String? - var content: String? - var createDateTime: String? -} diff --git a/Poppool/Poppool/Domain/Entities/GetNoticeListResponse.swift b/Poppool/Poppool/Domain/Entities/GetNoticeListResponse.swift deleted file mode 100644 index 045e2164..00000000 --- a/Poppool/Poppool/Domain/Entities/GetNoticeListResponse.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// GetNoticeListResponse.swift -// Poppool -// -// Created by SeoJunYoung on 1/13/25. -// - -import Foundation - -struct GetNoticeListResponse { - var noticeInfoList: [GetNoticeListDataResponse] -} - -struct GetNoticeListDataResponse { - var id: Int64 - var title: String? - var createdDateTime: String? -} diff --git a/Poppool/Poppool/Domain/Entities/GetOtherUserCommentedPopUpListResponse.swift b/Poppool/Poppool/Domain/Entities/GetOtherUserCommentedPopUpListResponse.swift deleted file mode 100644 index 71fce6de..00000000 --- a/Poppool/Poppool/Domain/Entities/GetOtherUserCommentedPopUpListResponse.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// GetOtherUserCommentedPopUpListResponse.swift -// Poppool -// -// Created by SeoJunYoung on 12/27/24. -// - -import Foundation - -struct GetOtherUserCommentedPopUpListResponse { - var popUpInfoList: [GetOtherUserCommentedPopUpResponse] -} - -struct GetOtherUserCommentedPopUpResponse { - var popUpStoreId: Int64 - var popUpStoreName: String? - var desc: String? - var mainImageUrl: String? - var startDate: String? - var endDate: String? - var address: String? - var closedYn: Bool -} diff --git a/Poppool/Poppool/Domain/Entities/GetRecentPopUpResponse.swift b/Poppool/Poppool/Domain/Entities/GetRecentPopUpResponse.swift deleted file mode 100644 index 6960a262..00000000 --- a/Poppool/Poppool/Domain/Entities/GetRecentPopUpResponse.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// GetRecentPopUpResponse.swift -// Poppool -// -// Created by SeoJunYoung on 1/14/25. -// - -import Foundation - -struct GetRecentPopUpResponse { - var popUpInfoList: [GetRecentPopUpDataResponse] - var totalPages: Int32 - var totalElements: Int32 -} - -struct GetRecentPopUpDataResponse { - var popUpStoreId: Int64 - var popUpStoreName: String? - var desc: String? - var mainImageUrl: String? - var startDate: String? - var endDate: String? - var address: String? - var closeYn: Bool -} -extension GetRecentPopUpDataResponse { - func toStoreItem() -> StoreItem { - return StoreItem( - id: self.popUpStoreId, - thumbnailURL: self.mainImageUrl ?? "", - category: "카테고리", - title: self.popUpStoreName ?? "제목 없음", - location: self.address ?? "주소 없음", - dateRange: "\(self.startDate ?? "") ~ \(self.endDate ?? "")", - isBookmarked: self.closeYn - ) - } -} diff --git a/Poppool/Poppool/Domain/Entities/GetWithdrawlListResponse.swift b/Poppool/Poppool/Domain/Entities/GetWithdrawlListResponse.swift deleted file mode 100644 index 9bdf33d6..00000000 --- a/Poppool/Poppool/Domain/Entities/GetWithdrawlListResponse.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// GetWithdrawlListResponse.swift -// Poppool -// -// Created by SeoJunYoung on 1/7/25. -// - -import Foundation - -struct GetWithdrawlListResponse { - var withDrawlSurveyList: [GetWithdrawlListDataResponse] -} - -struct GetWithdrawlListDataResponse { - var id: Int64 - var survey: String? -} diff --git a/Poppool/Poppool/Domain/Entities/MapPopUpStore.swift b/Poppool/Poppool/Domain/Entities/MapPopUpStore.swift deleted file mode 100644 index 2be1694e..00000000 --- a/Poppool/Poppool/Domain/Entities/MapPopUpStore.swift +++ /dev/null @@ -1,42 +0,0 @@ -import Foundation -import NMapsMap - -struct MapPopUpStore: Equatable { - let id: Int64 - let category: String - let name: String - let address: String - let startDate: String - let endDate: String - let latitude: Double - let longitude: Double - let markerId: Int64 - 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/Domain/Entities/PopUpAPI/GetPopUpCommentResponse.swift b/Poppool/Poppool/Domain/Entities/PopUpAPI/GetPopUpCommentResponse.swift deleted file mode 100644 index 9befaef6..00000000 --- a/Poppool/Poppool/Domain/Entities/PopUpAPI/GetPopUpCommentResponse.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// GetPopUpCommentResponse.swift -// Poppool -// -// Created by SeoJunYoung on 12/25/24. -// - -import Foundation - -struct GetPopUpCommentResponse { - let commentList: [GetPopUpDetailCommentResponse] -} diff --git a/Poppool/Poppool/Domain/Entities/PopUpAPI/GetPopUpDetailResponse.swift b/Poppool/Poppool/Domain/Entities/PopUpAPI/GetPopUpDetailResponse.swift deleted file mode 100644 index 55497518..00000000 --- a/Poppool/Poppool/Domain/Entities/PopUpAPI/GetPopUpDetailResponse.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// GetPopUpDetailResponse.swift -// Poppool -// -// Created by SeoJunYoung on 12/10/24. -// - -import Foundation - -struct GetPopUpDetailResponse { - let name: String? - let desc: String? - let startDate: String? - let endDate: String? - let startTime: String? - let endTime: String? - let address: String? - let commentCount: Int64 - let bookmarkYn: Bool - let loginYn: Bool - let hasCommented: Bool - let mainImageUrl: String? - let imageList: [GetPopUpDetailImageResponse] - let commentList: [GetPopUpDetailCommentResponse] - let similarPopUpStoreList: [GetPopUpDetailSimilarResponse] -} - -struct GetPopUpDetailImageResponse { - let id: Int64 - let imageUrl: String? -} - -struct GetPopUpDetailCommentResponse { - let commentId: Int64 - let creator: String? - let nickname: String? - let instagramId: String? - let profileImageUrl: String? - let content: String? - let likeYn: Bool - let likeCount: Int64 - let myCommentYn: Bool - let createDateTime: String? - let commentImageList: [GetPopUpDetailImageResponse] -} - -struct GetPopUpDetailSimilarResponse { - let id: Int64 - let name: String? - let mainImageUrl: String? - let endDate: String? -} diff --git a/Poppool/Poppool/Domain/Entities/PopUpAPI/GetSearchBottomPopUpListResponse.swift b/Poppool/Poppool/Domain/Entities/PopUpAPI/GetSearchBottomPopUpListResponse.swift deleted file mode 100644 index 9ae5c6b1..00000000 --- a/Poppool/Poppool/Domain/Entities/PopUpAPI/GetSearchBottomPopUpListResponse.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// GetSearchBottomPopUpListResponse.swift -// Poppool -// -// Created by SeoJunYoung on 12/6/24. -// - -import Foundation - -struct GetSearchBottomPopUpListResponse { - var popUpStoreList: [PopUpStoreResponse] - var loginYn: Bool - var totalPages: Int32 - var totalElements: Int64 -} diff --git a/Poppool/Poppool/Domain/Entities/PopUpAPI/GetSearchPopUpListResponse.swift b/Poppool/Poppool/Domain/Entities/PopUpAPI/GetSearchPopUpListResponse.swift deleted file mode 100644 index c0cb86f5..00000000 --- a/Poppool/Poppool/Domain/Entities/PopUpAPI/GetSearchPopUpListResponse.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// GetSearchPopUpListResponse.swift -// Poppool -// -// Created by SeoJunYoung on 12/7/24. -// - -import Foundation - -struct GetSearchPopUpListResponse { - var popUpStoreList: [PopUpStoreResponse] - var loginYn: Bool -} diff --git a/Poppool/Poppool/Domain/Entities/PopUpStoreResponse.swift b/Poppool/Poppool/Domain/Entities/PopUpStoreResponse.swift deleted file mode 100644 index 48cd3914..00000000 --- a/Poppool/Poppool/Domain/Entities/PopUpStoreResponse.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// PopUpStoreResponse.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - -import Foundation - -struct PopUpStoreResponse { - let id: Int64 - let category: String? - let name: String? - let address: String? - let mainImageUrl: String? - let startDate: String? - let endDate: String? - let bookmarkYn: Bool -} diff --git a/Poppool/Poppool/Domain/Repository/AuthRepository.swift b/Poppool/Poppool/Domain/Repository/AuthRepository.swift deleted file mode 100644 index 0a8c43be..00000000 --- a/Poppool/Poppool/Domain/Repository/AuthRepository.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// AuthRepository.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - -import Foundation -import RxSwift - -// protocol AuthRepository { -// -// /// 네트워크 요청을 처리하는 프로바이더 -// var provider: Provider { get set } -// -// /// 로그인 시도 메서드 -// /// - Parameters: -// /// - userCredential: 사용자 자격 증명 정보 (Encodable) -// /// - socialType: 소셜 로그인 타입 (예: "google", "facebook") -// /// - Returns: 로그인 응답을 나타내는 Observable 객체 -// func tryLogIn(userCredential: Encodable, socialType: String) -> Observable -// } diff --git a/Poppool/Poppool/Domain/Repository/MapDirectionRepository.swift b/Poppool/Poppool/Domain/Repository/MapDirectionRepository.swift deleted file mode 100644 index fcb8e508..00000000 --- a/Poppool/Poppool/Domain/Repository/MapDirectionRepository.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// MapDirectionRepository.swift -// Poppool -// -// Created by 김기현 on 1/23/25. -// - -import Foundation -import RxSwift - -protocol MapDirectionRepository { - func getPopUpDirection(popUpStoreId: Int64) -> Observable -} - -final class DefaultMapDirectionRepository: MapDirectionRepository { - private let provider: Provider - private let tokenInterceptor = TokenInterceptor() - - init(provider: Provider) { - self.provider = provider - } - - func getPopUpDirection(popUpStoreId: Int64) -> Observable { - let endpoint = FindDirectionEndPoint.fetchDirection(popUpStoreId: popUpStoreId) -// print("🌎 [Repository]: 요청 생성 - \(endpoint)") - return provider.requestData(with: endpoint, interceptor: TokenInterceptor()) - .do(onNext: { _ in -// print("✅ [Repository]: 응답 수신 - \(response)") - }, onError: { error in - print("❌ [Repository]: 요청 실패 - \(error)") - }) - } - -} diff --git a/Poppool/Poppool/Domain/UseCase/AdminUseCase.swift b/Poppool/Poppool/Domain/UseCase/AdminUseCase.swift deleted file mode 100644 index 870657d3..00000000 --- a/Poppool/Poppool/Domain/UseCase/AdminUseCase.swift +++ /dev/null @@ -1,74 +0,0 @@ -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 -} - -final class DefaultAdminUseCase: AdminUseCase { - - private let repository: AdminRepository - - init(repository: AdminRepository) { - self.repository = repository - } - - func fetchStoreList(query: String?, page: Int, size: Int) -> Observable { - return repository.fetchStoreList(query: query, page: page, size: size) - } - - 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 - Logger.log(message: "createStore 실패 - Error: \(error)", category: .error) - }) - } - - func updateStore(request: UpdatePopUpStoreRequestDTO) -> Observable { - Logger.log(message: """ - Updating store with location: - Latitude: \(request.location.latitude) - Longitude: \(request.location.longitude) - """, category: .debug) - - return repository.updateStore(request: request) - .do(onNext: { _ in - Logger.log(message: "Store update successful", category: .debug) - }, onError: { error in - Logger.log(message: "Store update failed: \(error)", category: .error) - }) - } - - func deleteStore(id: Int64) -> Observable { - return repository.deleteStore(id: id) - } - - // Notice - func createNotice(request: CreateNoticeRequestDTO) -> Observable { - return repository.createNotice(request: request) - } - - func updateNotice(id: Int64, request: UpdateNoticeRequestDTO) -> Observable { - return repository.updateNotice(id: id, request: request) - } - - func deleteNotice(id: Int64) -> Observable { - return repository.deleteNotice(id: id) - } -} diff --git a/Poppool/Poppool/Domain/UseCase/AuthAPIUseCaseImpl.swift b/Poppool/Poppool/Domain/UseCase/AuthAPIUseCaseImpl.swift deleted file mode 100644 index e15877e6..00000000 --- a/Poppool/Poppool/Domain/UseCase/AuthAPIUseCaseImpl.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// AuthAPIUseCaseImpl.swift -// Poppool -// -// Created by Porori on 11/25/24. -// - -import Foundation -import RxSwift - -final class AuthAPIUseCaseImpl { - - var repository: AuthAPIRepositoryImpl - - init(repository: AuthAPIRepositoryImpl) { - self.repository = repository - } - - func postTryLogin(userCredential: Encodable, socialType: String) -> Observable { - return repository.tryLogIn(userCredential: userCredential, socialType: socialType) - } - - func postTokenReissue() -> Observable { - let endPoint = AuthAPIEndPoint.postTokenReissue() - return repository.postTokenReissue().map { $0.toDomain() } - } -} diff --git a/Poppool/Poppool/Domain/UseCase/CommentAPIUseCaseImpl.swift b/Poppool/Poppool/Domain/UseCase/CommentAPIUseCaseImpl.swift deleted file mode 100644 index f6d83409..00000000 --- a/Poppool/Poppool/Domain/UseCase/CommentAPIUseCaseImpl.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// CommentAPIUseCaseImpl.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - -import Foundation - -import RxSwift - -final class CommentAPIUseCaseImpl { - - var repository: CommentAPIRepository - - init(repository: CommentAPIRepository) { - self.repository = repository - } - - func postCommentAdd(popUpStoreId: Int64, content: String?, commentType: String?, imageUrlList: [String?]) -> Completable { - return repository.postCommentAdd(request: .init(popUpStoreId: popUpStoreId, content: content, commentType: commentType, imageUrlList: imageUrlList)) - } - - func deleteComment(popUpStoreId: Int64, commentId: Int64) -> Completable { - return repository.deleteComment(request: .init(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)) - } -} diff --git a/Poppool/Poppool/Domain/UseCase/HomeAPIUseCaseImpl.swift b/Poppool/Poppool/Domain/UseCase/HomeAPIUseCaseImpl.swift deleted file mode 100644 index 1664dd60..00000000 --- a/Poppool/Poppool/Domain/UseCase/HomeAPIUseCaseImpl.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// HomeAPIUseCaseImpl.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - -import Foundation -import RxSwift - -final class HomeAPIUseCaseImpl { - var repository = HomeAPIRepository(provider: ProviderImpl()) - - func fetchHome( - page: Int32?, - size: Int32?, - sort: String? - ) -> Observable { - return repository.fetchHome(request: .init(page: page, size: size, sort: sort)) - } - - func fetchCustomPopUp( - page: Int32?, - size: Int32?, - sort: String? - ) -> Observable { - return repository.fetchCustomPopUp(request: .init(page: page, size: size, sort: sort)) - } - - func fetchNewPopUp( - page: Int32?, - size: Int32?, - sort: String? - ) -> Observable { - return repository.fetchNewPopUp(request: .init(page: page, size: size, sort: sort)) - } - - func fetchPopularPopUp( - page: Int32?, - size: Int32?, - sort: String? - ) -> Observable { - return repository.fetchPopularPopUp(request: .init(page: page, size: size, sort: sort)) - } -} diff --git a/Poppool/Poppool/Domain/UseCase/MapDirectionUseCase.swift b/Poppool/Poppool/Domain/UseCase/MapDirectionUseCase.swift deleted file mode 100644 index 0c7ea395..00000000 --- a/Poppool/Poppool/Domain/UseCase/MapDirectionUseCase.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// MapDirectionUseCase.swift -// Poppool -// -// Created by 김기현 on 1/23/25. -// - -import Foundation -import RxSwift - -protocol MapDirectionUseCase { - func getPopUpDirection(popUpStoreId: Int64) -> Observable -} - -final class DefaultMapDirectionUseCase: MapDirectionUseCase { - private let repository: MapDirectionRepository - - init(repository: MapDirectionRepository) { - self.repository = repository - } - - func getPopUpDirection(popUpStoreId: Int64) -> Observable { - return repository.getPopUpDirection(popUpStoreId: popUpStoreId) - .map { $0.toDomain() } - } -} diff --git a/Poppool/Poppool/Domain/UseCase/MapUseCase.swift b/Poppool/Poppool/Domain/UseCase/MapUseCase.swift deleted file mode 100644 index 660ee9d0..00000000 --- a/Poppool/Poppool/Domain/UseCase/MapUseCase.swift +++ /dev/null @@ -1,77 +0,0 @@ -import Foundation -import RxSwift - -protocol MapUseCase { - func fetchCategories() -> Observable<[Category]> - func fetchStoresInBounds( - northEastLat: Double, - northEastLon: Double, - southWestLat: Double, - southWestLon: Double, - categories: [Int64] - ) -> Observable<[MapPopUpStore]> - - func searchStores( - query: String, - categories: [Int64] - ) -> Observable<[MapPopUpStore]> - - func filterStoresByLocation(_ stores: [MapPopUpStore], selectedRegions: [String]) -> [MapPopUpStore] - -} - -class DefaultMapUseCase: MapUseCase { - private let repository: MapRepository - - init(repository: MapRepository) { - self.repository = repository - } - - func fetchCategories() -> Observable<[Category]> { - return repository.fetchCategories() - } - - func fetchStoresInBounds( - northEastLat: Double, - northEastLon: Double, - southWestLat: Double, - southWestLon: Double, - categories: [Int64] - ) -> Observable<[MapPopUpStore]> { - - return repository.fetchStoresInBounds( - northEastLat: northEastLat, - northEastLon: northEastLon, - southWestLat: southWestLat, - southWestLon: southWestLon, - categories: categories // ← 그대로 넘긴다 - ) - .map { $0.map { $0.toDomain() } } - } - - func searchStores( - query: String, - categories: [Int64] - ) -> Observable<[MapPopUpStore]> { - return repository.searchStores( - query: query, - categories: categories.map { Int64($0) ?? 0 } - ) - .map { $0.map { $0.toDomain() } } - } - func filterStoresByLocation(_ stores: [MapPopUpStore], selectedRegions: [String]) -> [MapPopUpStore] { - guard !selectedRegions.isEmpty else { return stores } - - 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] - - return selectedRegions.contains("\(mainRegion)전체") || - selectedRegions.contains(subRegion) - } - } - } diff --git a/Poppool/Poppool/Domain/UseCase/PopUpAPIUseCaseImpl.swift b/Poppool/Poppool/Domain/UseCase/PopUpAPIUseCaseImpl.swift deleted file mode 100644 index 6c405d4a..00000000 --- a/Poppool/Poppool/Domain/UseCase/PopUpAPIUseCaseImpl.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// PopUpAPIUseCaseImpl.swift -// Poppool -// -// Created by SeoJunYoung on 12/6/24. -// - -import Foundation - -import RxSwift - -final class PopUpAPIUseCaseImpl { - - var repository: PopUpAPIRepositoryImpl - - init(repository: PopUpAPIRepositoryImpl) { - self.repository = repository - } - - func getSearchBottomPopUpList(isOpen: Bool, categories: [Int64], page: Int32?, size: Int32, sort: String?) -> Observable { - var categoryString: String? - if !categories.isEmpty { - categoryString = categories.map { String($0) + "," }.reduce("", +) - } - let request = GetSearchPopUpListRequestDTO(categories: categoryString, page: page, size: size, sortCode: sort) - if isOpen { - return repository.getOpenPopUpList(request: request).map { $0.toDomain() } - } else { - return repository.getClosePopUpList(request: request).map { $0.toDomain() } - } - } - - func getSearchPopUpList(query: String?) -> Observable { - return repository.getSearchPopUpList(request: .init(query: query)).map { $0.toDomain() } - } - - func getPopUpDetail(commentType: String?, popUpStoredId: Int64, isViewCount: Bool? = true) -> Observable { - return repository.getPopUpDetail(request: .init(commentType: commentType, popUpStoreId: popUpStoredId, viewCountYn: isViewCount)).map { $0.toDomain() } - } - - func getPopUpComment(commentType: String?, page: Int32?, size: Int32?, sort: String?, popUpStoreId: Int64) -> Observable { - let request: GetPopUpCommentRequestDTO = .init(commentType: commentType, page: page, size: size, sort: sort, popUpStoreId: popUpStoreId) - return repository.getPopUpComment(request: request).map { $0.toDomain() } - } -} diff --git a/Poppool/Poppool/Domain/UseCase/UserAPIUseCaseImpl.swift b/Poppool/Poppool/Domain/UseCase/UserAPIUseCaseImpl.swift deleted file mode 100644 index 1c907205..00000000 --- a/Poppool/Poppool/Domain/UseCase/UserAPIUseCaseImpl.swift +++ /dev/null @@ -1,125 +0,0 @@ -// -// UserAPIUseCaseImpl.swift -// Poppool -// -// Created by SeoJunYoung on 12/3/24. -// - -import RxSwift - -final class UserAPIUseCaseImpl { - - var repository: UserAPIRepositoryImpl - - init(repository: UserAPIRepositoryImpl) { - self.repository = repository - } - - func postBookmarkPopUp(popUpID: Int64) -> Completable { - return repository.postBookmarkPopUp(request: .init(popUpStoreId: popUpID)) - } - - func deleteBookmarkPopUp(popUpID: Int64) -> Completable { - return repository.deleteBookmarkPopUp(request: .init(popUpStoreId: popUpID)) - } - - func postCommentLike(commentId: Int64) -> Completable { - return repository.postCommentLike(request: .init(commentId: commentId)) - } - - func deleteCommentLike(commentId: Int64) -> Completable { - return repository.deleteCommentLike(request: .init(commentId: commentId)) - } - - func postUserBlock(blockedUserId: String?) -> Completable { - return repository.postUserBlock(request: .init(blockedUserId: blockedUserId)) - } - - func deleteUserBlock(blockedUserId: String?) -> Completable { - return repository.deleteUserBlock(request: .init(blockedUserId: blockedUserId)) - } - - func getOtherUserCommentedPopUpList( - commenterId: String?, - commentType: String?, - page: Int32?, - size: Int32?, - sort: String? - ) -> Observable { - return repository.getOtherUserCommentList( - request: .init( - commenterId: commenterId, - commentType: commentType, - page: page, - size: size, - sort: sort) - ) - .map { $0.toDomain() } - } - - func getMyPage() -> Observable { - return repository.getMyPage().map { $0.toDomain() } - } - - func postLogout() -> Completable { - return repository.postLogout() - } - - func getWithdrawlList() -> Observable { - return repository.getWithdrawlList().map { $0.toDomain() } - } - - func postWithdrawl(surveyList: [GetWithdrawlListDataResponse]) -> Completable { - return repository.postWithdrawl(request: .init(checkedSurveyList: surveyList.map { .init(id: $0.id, survey: $0.survey)})) - } - - func getMyProfile() -> Observable { - return repository.getMyProfile().map { $0.toDomain() } - } - - func putUserTailoredInfo(gender: String?, age: Int32) -> Completable { - return repository.putUserTailoredInfo(request: .init(gender: gender, age: age)) - } - - func putUserCategory( - interestCategoriesToAdd: [Int64], - interestCategoriesToDelete: [Int64], - interestCategoriesToKeep: [Int64] - ) -> Completable { - return repository.putUserCategory( - request: .init( - interestCategoriesToAdd: interestCategoriesToAdd, - interestCategoriesToDelete: interestCategoriesToDelete, - interestCategoriesToKeep: interestCategoriesToKeep - ) - ) - } - - func putUserProfile(profileImageUrl: String?, nickname: String?, email: String?, instagramId: String?, intro: String?) -> Completable { - return repository.putUserProfile(request: .init(profileImageUrl: profileImageUrl, nickname: nickname, email: email, instagramId: instagramId, intro: intro)) - } - - func getMyCommentedPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { - return repository.getMyCommentedPopUp(request: .init(page: page, size: size, sort: sort)).map { $0.toDomain() } - } - - func getBlockUserList(page: Int32?, size: Int32?, sort: String?) -> Observable { - return repository.getBlockUserList(request: .init(page: page, size: size, sort: sort)).map { $0.toDomain() } - } - - func getNoticeList() -> Observable { - return repository.getNoticeList().map { $0.toDomain() } - } - - func getNoticeDetail(noticeID: Int64) -> Observable { - return repository.getNoticeDetail(noticeID: noticeID).map { $0.toDomain() } - } - - func getRecentPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { - return repository.getRecentPopUp(request: .init(page: page, size: size, sort: sort)).map { $0.toDomain() } - } - - func getBookmarkPopUp(page: Int32?, size: Int32?, sort: String?) -> Observable { - return repository.getBookmarkPopUp(request: .init(page: page, size: size, sort: sort)).map { $0.toDomain() } - } -} diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/Common/Responsable.swift b/Poppool/Poppool/Infrastructure/NetworkLayer/Common/Responsable.swift deleted file mode 100644 index c4743d30..00000000 --- a/Poppool/Poppool/Infrastructure/NetworkLayer/Common/Responsable.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// Responsable.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/16/24. -// - -import Foundation - -protocol Responsable { - associatedtype Response -} diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/IndicatorMaker/IndicatorMaker.swift b/Poppool/Poppool/Infrastructure/NetworkLayer/IndicatorMaker/IndicatorMaker.swift deleted file mode 100644 index 997125a1..00000000 --- a/Poppool/Poppool/Infrastructure/NetworkLayer/IndicatorMaker/IndicatorMaker.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// IndicatorMaker.swift -// MomsVillage -// -// Created by SeoJunYoung on 10/14/24. -// - -import UIKit - -import Lottie -import SnapKit - -struct IndicatorMaker { - - static let indicatorImageView: LottieAnimationView = { - let view = LottieAnimationView(name: "indicator") - view.loopMode = .loop - return view - }() - - static let overlayView: UIView = { - let view = UIView() - view.backgroundColor = .black.withAlphaComponent(0.1) - return view - }() - - static func showIndicator() { - DispatchQueue.main.async { - guard let topVC = UIApplication.topViewController() else { - print("Error: Cannot find top view controller") - return - } - - topVC.view.addSubview(overlayView) - overlayView.snp.makeConstraints { make in - make.edges.equalToSuperview() - } - overlayView.addSubview(indicatorImageView) - indicatorImageView.snp.makeConstraints { make in - make.size.equalTo(200) - make.center.equalToSuperview() - } - indicatorImageView.play() - topVC.view.isUserInteractionEnabled = false - } - } - - static func hideIndicator() { - DispatchQueue.main.async { - indicatorImageView.stop() - overlayView.removeFromSuperview() - indicatorImageView.removeFromSuperview() - UIApplication.topViewController()?.view.isUserInteractionEnabled = true - } - } -} diff --git a/Poppool/Poppool/Infrastructure/NetworkLayer/Interceptor/FormDataInterceptor.swift b/Poppool/Poppool/Infrastructure/NetworkLayer/Interceptor/FormDataInterceptor.swift deleted file mode 100644 index f057df7d..00000000 --- a/Poppool/Poppool/Infrastructure/NetworkLayer/Interceptor/FormDataInterceptor.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// FormDataInterceptor.swift -// MomsVillage -// -// Created by SeoJunYoung on 10/25/24. -// - -import Alamofire -import Foundation -import RxSwift - -final class FormDataInterceptor: RequestInterceptor { - - private var disposeBag = DisposeBag() - - func adapt( - _ urlRequest: URLRequest, - for session: Session, - completion: @escaping (Result) -> Void) { - } - - func retry( - _ request: Request, - for session: Session, - dueTo error: any Error, - completion: @escaping (RetryResult) -> Void - ) { - Logger.log(message: "FormDataInterceptor Retry Start", category: .network) - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Admin/PopUpStoreRegisterReactor.swift b/Poppool/Poppool/Presentation/Scene/Admin/PopUpStoreRegisterReactor.swift deleted file mode 100644 index 6e355394..00000000 --- a/Poppool/Poppool/Presentation/Scene/Admin/PopUpStoreRegisterReactor.swift +++ /dev/null @@ -1,306 +0,0 @@ -//// -//// PopUpStoreRegisterReactor.swift -//// Poppool -//// -//// Created by 김기현 on 1/14/25. -//// -// -// import Foundation -// import ReactorKit -// import RxSwift -// import UIKit -// -// final class PopUpStoreRegisterReactor: Reactor { -// -// // MARK: - Action -// enum Action { -// /// 화면 최초 로드 -// case viewDidLoad -// -// /// 사용자 입력값 갱신 -// case updateName(String) -// case updateDesc(String) -// case updateCategory(String) -// case updateAddress(String) -// case updateLatitude(String) // 문자열 -> Double 변환 -// case updateLongitude(String) -// case updateMarkerTitle(String) -// case updateMarkerSnippet(String) -// case updateStartDate(Date) -// case updateEndDate(Date) -// case updateStartTime(Date) -// case updateEndTime(Date) -// -// /// 이미지 관련 -// case addImage(ExtendedImage) // 개별 이미지 추가 -// case removeImage(Int) // 특정 인덱스 이미지 삭제 -// case toggleMainImage(Int) // 대표이미지 토글 -// -// /// "저장/등록" 버튼 탭 -// case tapRegister -// } -// -// // MARK: - Mutation -// enum Mutation { -// /// 폼 데이터 갱신 -// case setName(String) -// case setDesc(String) -// case setCategory(String) -// case setAddress(String) -// case setLatitude(Double) -// case setLongitude(Double) -// case setMarkerTitle(String) -// case setMarkerSnippet(String) -// case setStartDate(Date?) -// case setEndDate(Date?) -// case setStartTime(Date?) -// case setEndTime(Date?) -// -// /// 이미지 변경 -// case addImage(ExtendedImage) -// case removeImageAt(Int) -// case toggleMain(Int) -// -// /// 등록 성공 여부 -// case setRegistered(Bool) -// } -// -// // MARK: - State -// struct State { -// // 폼 입력값 -// var name: String = "" -// var desc: String = "" -// var category: String = "게임" -// var address: String = "" -// var latitude: Double = 0 -// var longitude: Double = 0 -// var markerTitle: String = "" -// var markerSnippet: String = "" -// var startDate: Date? -// var endDate: Date? -// var startTime: Date? -// var endTime: Date? -// -// -// // 이미지 목록 -// var images: [ExtendedImage] = [] -// -// // 최종 등록 여부 -// var isRegistered: Bool = false -// } -// -// // ReactorKit 필수 -// let initialState: State = State() -// -// // 주입받는 의존성 -// private let adminUseCase: AdminUseCase -// -// // disposeBag (mutate 안에서는 ReactorKit이 관리) -// private let disposeBagInternal = DisposeBag() -// -// // MARK: - Init -// init(adminUseCase: AdminUseCase) { -// self.adminUseCase = adminUseCase -// } -// -// // MARK: - mutate -// func mutate(action: Action) -> Observable { -// switch action { -// -// case .viewDidLoad: -// return .empty() -// -// // 텍스트 입력 업데이트 -// case let .updateName(name): -// return .just(.setName(name)) -// -// case let .updateDesc(desc): -// return .just(.setDesc(desc)) -// -// case let .updateCategory(cat): -// return .just(.setCategory(cat)) -// -// case let .updateAddress(addr): -// return .just(.setAddress(addr)) -// -// case let .updateLatitude(latString): -// // 문자 -> Double 변환 -// let lat = Double(latString) ?? 0 -// return .just(.setLatitude(lat)) -// -// case let .updateLongitude(lonString): -// let lon = Double(lonString) ?? 0 -// return .just(.setLongitude(lon)) -// -// case let .updateMarkerTitle(title): -// return .just(.setMarkerTitle(title)) -// -// case let .updateMarkerSnippet(snippet): -// return .just(.setMarkerSnippet(snippet)) -// -// case let .updateStartDate(date): -// return .just(.setStartDate(date)) -// -// case let .updateEndDate(date): -// return .just(.setEndDate(date)) -// -// case let .updateStartTime(time): -// return .just(.setStartTime(time)) -// -// case let .updateEndTime(time): -// return .just(.setEndTime(time)) -// -// // 이미지 관련 -// case let .addImage(img): -// return .just(.addImage(img)) -// -// case let .removeImage(index): -// return .just(.removeImageAt(index)) -// -// case let .toggleMainImage(index): -// return .just(.toggleMain(index)) -// -// // "저장" 액션 -// case .tapRegister: -// return doRegister() -// } -// } -// -// // MARK: - reduce -// func reduce(state: State, mutation: Mutation) -> State { -// var newState = state -// -// switch mutation { -// case let .setName(name): -// newState.name = name -// -// case let .setDesc(desc): -// newState.desc = desc -// -// case let .setCategory(cat): -// newState.category = cat -// -// case let .setAddress(addr): -// newState.address = addr -// -// case let .setLatitude(lat): -// newState.latitude = lat -// -// case let .setLongitude(lon): -// newState.longitude = lon -// -// case let .setMarkerTitle(title): -// newState.markerTitle = title -// -// case let .setMarkerSnippet(snippet): -// newState.markerSnippet = snippet -// -// case let .setStartDate(date): -// newState.startDate = date -// -// case let .setEndDate(date): -// newState.endDate = date -// -// case let .setStartTime(time): -// newState.startTime = time -// -// case let .setEndTime(time): -// newState.endTime = time -// -// // 이미지 -// case let .addImage(img): -// newState.images.append(img) -// -// case let .removeImageAt(index): -// if index >= 0 && index < newState.images.count { -// newState.images.remove(at: index) -// } -// -// case let .toggleMain(idx): -// // 모든 이미지 isMain=false 후 idx만 true -// for i in 0.. Observable { -// // 1) 폼 유효성 검사 -// guard validateForm() else { -// // 유효성 실패시엔 Mutation 없이 .empty() (혹은 에러 Mutation) -// return .empty() -// } -// -// // 2) 대표 vs 서브 이미지 -// let mainImg = currentState.images.first(where: { $0.isMain }) -// ?? currentState.images.first! -// let mainUrl = mainImg.filePath -// let subImages = currentState.images -// .filter { $0.filePath != mainUrl } -// .map { $0.filePath } -// -// // 3) 날짜/시간 -> 문자열 변환 -// let dateFormatter = DateFormatter() -// dateFormatter.dateFormat = "yyyy-MM-dd" -// let startDateStr = currentState.startDate.map { dateFormatter.string(from: $0) } ?? "2025-01-01" -// let endDateStr = currentState.endDate.map { dateFormatter.string(from: $0) } ?? "2025-12-31" -// -// // 4) DTO -// let request = CreatePopUpStoreRequestDTO( -// name: currentState.name, -// categoryId: convertCategoryToId(currentState.category), -// desc: currentState.desc, -// address: currentState.address, -// startDate: startDateStr, -// endDate: endDateStr, -// mainImageUrl: mainUrl, -// bannerYn: false, -// imageUrlList: subImages, -// latitude: currentState.latitude, -// longitude: currentState.longitude, -// markerTitle: currentState.markerTitle, -// markerSnippet: currentState.markerSnippet, -// startDateBeforeEndDate: true -// ) -// -// // 5) 서버 호출 -> 결과에 따라 Mutation -// return adminUseCase.createStore(request: request) -// .map { _ in Mutation.setRegistered(true) } -// .catch { error in -// // 에러 시 로깅/별도 처리 -// return .empty() -// } -// .asObservable() -// } -// -// // MARK: - validateForm() -// private func validateForm() -> Bool { -// // 간단 예시 -// if currentState.name.isEmpty { return false } -// if currentState.desc.isEmpty { return false } -// if currentState.address.isEmpty { return false } -// if currentState.latitude == 0 && currentState.longitude == 0 { return false } -// if currentState.markerTitle.isEmpty || currentState.markerSnippet.isEmpty { return false } -// // 이미지 >=1, 대표 1장 -// if currentState.images.isEmpty { return false } -// if !currentState.images.contains(where: { $0.isMain }) { return false } -// return true -// } -// -// /// 예시: 카테고리 문자열 -> ID 변환 (임의 로직) -// private func convertCategoryToId(_ cat: String) -> Int64 { -// switch cat { -// case "게임": return 101 -// case "라이프스타일": return 102 -// default: return 100 -// } -// } -// } diff --git a/Poppool/Poppool/Presentation/Scene/Admin/PopUpStoreRegisterView.swift b/Poppool/Poppool/Presentation/Scene/Admin/PopUpStoreRegisterView.swift deleted file mode 100644 index 6255da1a..00000000 --- a/Poppool/Poppool/Presentation/Scene/Admin/PopUpStoreRegisterView.swift +++ /dev/null @@ -1,424 +0,0 @@ -//// -//// PopUpStoreRegisterView.swift -//// Poppool -//// -//// Created by 김기현 on 1/14/25. -//// -// -// import UIKit -// import SnapKit -// import Then -// -// final class PopUpStoreRegisterView: UIView { -// -// // MARK: - Callbacks (Closure) -// /// "이미지 추가" 버튼 탭 -// var onAddImageTapped: (() -> Void)? -// /// "전체삭제" 버튼 탭 -// var onRemoveAllTapped: (() -> Void)? -// /// 대표이미지 체크 토글 (콜렉션셀에서 index 전달) -// var onToggleMainImage: ((Int) -> Void)? -// /// 개별 이미지 삭제(index) -// var onDeleteImage: ((Int) -> Void)? -// -// /// "카테고리 선택" 버튼 탭 -// var onCategoryButtonTapped: (() -> Void)? -// /// "기간 선택" 버튼 탭 -// var onPeriodButtonTapped: (() -> Void)? -// /// "시간 선택" 버튼 탭 -// var onTimeButtonTapped: (() -> Void)? -// /// "저장" 버튼 탭 -// var onSaveTapped: (() -> Void)? -// -// // MARK: - Subviews -// // (1) 상단 "이름" 입력 필드 -// private let nameTextField = UITextField().then { -// $0.placeholder = "팝업스토어 이름을 입력해 주세요." -// $0.font = .systemFont(ofSize: 14) -// $0.textColor = .darkGray -// $0.borderStyle = .roundedRect -// } -// -// // (2) 이미지 버튼들 -// private let addImageButton = UIButton(type: .system).then { -// $0.setTitle("이미지 추가", for: .normal) -// $0.setTitleColor(.systemBlue, for: .normal) -// } -// private let removeAllButton = UIButton(type: .system).then { -// $0.setTitle("전체 삭제", for: .normal) -// $0.setTitleColor(.red, for: .normal) -// } -// -// // (3) 이미지 콜렉션뷰 -// private let imagesCollectionView: UICollectionView = { -// let layout = UICollectionViewFlowLayout() -// layout.scrollDirection = .horizontal -// layout.itemSize = CGSize(width: 80, height: 100) -// layout.minimumLineSpacing = 8 -// -// let cv = UICollectionView(frame: .zero, collectionViewLayout: layout) -// cv.backgroundColor = .clear -// cv.register(PopUpImageCell.self, forCellWithReuseIdentifier: PopUpImageCell.identifier) -// return cv -// }() -// -// // (4) 카테고리/기간/시간 버튼 -// private let categoryButton = UIButton(type: .system).then { -// $0.setTitle("카테고리 선택 ▾", for: .normal) -// $0.setTitleColor(.darkGray, for: .normal) -// $0.titleLabel?.font = .systemFont(ofSize:14) -// $0.layer.cornerRadius = 8 -// $0.layer.borderWidth = 1 -// $0.layer.borderColor = UIColor.lightGray.cgColor -// $0.contentHorizontalAlignment = .left -// $0.contentEdgeInsets = UIEdgeInsets(top:7, left:8, bottom:7, right:8) -// } -// private let periodButton = UIButton(type: .system).then { -// $0.setTitle("기간 선택 ▾", for: .normal) -// $0.setTitleColor(.darkGray, for: .normal) -// $0.titleLabel?.font = UIFont.systemFont(ofSize:14) -// $0.layer.cornerRadius = 8 -// $0.layer.borderWidth = 1 -// $0.layer.borderColor = UIColor.lightGray.cgColor -// $0.contentHorizontalAlignment = .left -// $0.contentEdgeInsets = UIEdgeInsets(top:7, left:8, bottom:7, right:8) -// } -// private let timeButton = UIButton(type: .system).then { -// $0.setTitle("시간 선택 ▾", for: .normal) -// $0.setTitleColor(.darkGray, for: .normal) -// $0.titleLabel?.font = UIFont.systemFont(ofSize:14) -// $0.layer.cornerRadius = 8 -// $0.layer.borderWidth = 1 -// $0.layer.borderColor = UIColor.lightGray.cgColor -// $0.contentHorizontalAlignment = .left -// $0.contentEdgeInsets = UIEdgeInsets(top:7, left:8, bottom:7, right:8) -// } -// -// // (5) "저장" 버튼 -// private let saveButton = UIButton(type: .system).then { -// $0.setTitle("저장", for: .normal) -// $0.setTitleColor(.white, for: .normal) -// $0.backgroundColor = .lightGray -// $0.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .bold) -// $0.layer.cornerRadius = 8 -// $0.isEnabled = false -// } -// -// // (6) 스크롤/스택 -// private let scrollView = UIScrollView() -// private let contentView = UIView() -// private let verticalStack = UIStackView().then { -// $0.axis = .vertical -// $0.spacing = 8 -// $0.distribution = .fill -// } -// -// // MARK: - Internal Data -// /// 외부(뷰컨)에서 주입할 "이미지 목록" -// private var images: [ExtendedImage] = [] -// -// // MARK: - Public computed properties -// /// 입력한 이름 get/set -// var storeName: String { -// get { nameTextField.text ?? "" } -// set { nameTextField.text = newValue } -// } -// -// /// 현재 카테고리 버튼 타이틀 -// var categoryText: String { -// get { categoryButton.title(for: .normal) ?? "" } -// set { categoryButton.setTitle(newValue, for: .normal) } -// } -// -// // MARK: - Init -// override init(frame: CGRect) { -// super.init(frame: frame) -// setupLayout() -// setupActions() -// setupCollectionView() -// } -// -// required init?(coder: NSCoder) { -// fatalError("init(coder:) has not been implemented") -// } -// -// // MARK: - Setup -// private func setupLayout() { -// backgroundColor = UIColor(white:0.95, alpha:1) -// -// // 1) 스크롤+컨텐츠 -// addSubview(scrollView) -// scrollView.snp.makeConstraints { make in -// make.top.left.right.equalToSuperview() -// make.bottom.equalToSuperview().offset(-64) // 아래 "저장"버튼을 띄우기 위해 예시 -// } -// scrollView.addSubview(contentView) -// contentView.snp.makeConstraints { make in -// make.edges.equalToSuperview() -// make.width.equalTo(scrollView.snp.width) -// } -// -// // 2) 수직스택 -// contentView.addSubview(verticalStack) -// verticalStack.snp.makeConstraints { make in -// make.top.equalToSuperview().offset(16) -// make.left.right.equalToSuperview().inset(16) -// make.bottom.equalToSuperview() -// } -// -// // (A) 이름 필드 -// let nameRow = makeRow(title: "이름", rightView: nameTextField) -// verticalStack.addArrangedSubview(nameRow) -// -// // (B) 이미지 버튼 (add/remove) -// let buttonStack = UIStackView(arrangedSubviews: [addImageButton, removeAllButton]) -// buttonStack.axis = .horizontal -// buttonStack.distribution = .fillEqually -// buttonStack.spacing = 8 -// verticalStack.addArrangedSubview(buttonStack) -// buttonStack.snp.makeConstraints { make in -// make.height.equalTo(40) -// } -// -// // (C) 콜렉션뷰 -// verticalStack.addArrangedSubview(imagesCollectionView) -// imagesCollectionView.snp.makeConstraints { make in -// make.height.equalTo(100) -// } -// -// // (D) 카테고리 버튼 -// let catRow = makeRow(title: "카테고리", rightView: categoryButton) -// verticalStack.addArrangedSubview(catRow) -// -// // (E) 기간 버튼 -// let periodRow = makeRow(title: "기간", rightView: periodButton) -// verticalStack.addArrangedSubview(periodRow) -// -// // (F) 시간 버튼 -// let timeRow = makeRow(title: "시간", rightView: timeButton) -// verticalStack.addArrangedSubview(timeRow) -// -// // (여기에 위치/마커/설명 등 다른 항목도 같은 방식으로) -// -// // 3) 저장 버튼 (화면 하단 고정) -// addSubview(saveButton) -// saveButton.snp.makeConstraints { make in -// make.left.right.equalToSuperview().inset(16) -// make.bottom.equalTo(safeAreaLayoutGuide).offset(-8) -// make.height.equalTo(44) -// } -// } -// -// private func setupActions() { -// // (1) 이미지추가 -> onAddImageTapped -// addImageButton.addTarget(self, action: #selector(tapAddImage), for: .touchUpInside) -// // (2) 전체삭제 -> onRemoveAllTapped -// removeAllButton.addTarget(self, action: #selector(tapRemoveAll), for: .touchUpInside) -// // (3) 카테고리 -> onCategoryButtonTapped -// categoryButton.addTarget(self, action: #selector(tapCategory), for: .touchUpInside) -// // (4) 기간 -> onPeriodButtonTapped -// periodButton.addTarget(self, action: #selector(tapPeriod), for: .touchUpInside) -// // (5) 시간 -> onTimeButtonTapped -// timeButton.addTarget(self, action: #selector(tapTime), for: .touchUpInside) -// // (6) 저장 -> onSaveTapped -// saveButton.addTarget(self, action: #selector(tapSave), for: .touchUpInside) -// } -// -// private func setupCollectionView() { -// imagesCollectionView.dataSource = self -// imagesCollectionView.delegate = self -// } -// -// // MARK: - Public Methods -// /// 외부에서 "이미지 목록"을 세팅할 때 사용 -// func updateImages(_ newImages: [ExtendedImage]) { -// self.images = newImages -// imagesCollectionView.reloadData() -// updateSaveButtonState() -// } -// -// /// 저장버튼 활성화 업데이트 -// private func updateSaveButtonState() { -// // 예: 이미지가 1장 이상 있을 때만 활성화 -// let hasImages = !images.isEmpty -// saveButton.isEnabled = hasImages -// saveButton.backgroundColor = hasImages ? .systemBlue : .lightGray -// } -// -// // MARK: - Actions -// @objc private func tapAddImage() { -// onAddImageTapped?() -// } -// @objc private func tapRemoveAll() { -// onRemoveAllTapped?() -// } -// @objc private func tapCategory() { -// onCategoryButtonTapped?() -// } -// @objc private func tapPeriod() { -// onPeriodButtonTapped?() -// } -// @objc private func tapTime() { -// onTimeButtonTapped?() -// } -// @objc private func tapSave() { -// onSaveTapped?() -// } -// -// // MARK: - Helpers -// private func makeRow(title: String, rightView: UIView) -> UIView { -// let row = UIView() -// -// // 왼쪽 BG -// let leftBG = UIView() -// leftBG.backgroundColor = UIColor(white:0.94, alpha:1) -// row.addSubview(leftBG) -// leftBG.snp.makeConstraints { make in -// make.top.left.bottom.equalToSuperview() -// make.width.equalTo(80) -// } -// -// // 왼쪽 라벨 -// let label = UILabel() -// label.text = title -// label.font = .systemFont(ofSize:15, weight:.bold) -// label.textColor = .black -// label.textAlignment = .center -// leftBG.addSubview(label) -// label.snp.makeConstraints { make in -// make.centerY.equalToSuperview() -// make.left.right.equalToSuperview().inset(8) -// } -// -// // 오른쪽 BG -// let rightBG = UIView() -// rightBG.backgroundColor = .white -// row.addSubview(rightBG) -// rightBG.snp.makeConstraints { make in -// make.top.bottom.right.equalToSuperview() -// make.left.equalTo(leftBG.snp.right) -// } -// -// // 오른쪽 컨텐츠 (파라미터) -// rightBG.addSubview(rightView) -// rightView.snp.makeConstraints { make in -// make.top.equalToSuperview().offset(8) -// make.bottom.equalToSuperview().offset(-8) -// make.left.equalToSuperview().offset(8) -// make.right.equalToSuperview().offset(-8) -// make.height.equalTo(36).priority(.medium) -// } -// -// // 구분선 -// let sep = UIView() -// sep.backgroundColor = UIColor.lightGray.withAlphaComponent(0.3) -// row.addSubview(sep) -// sep.snp.makeConstraints { make in -// make.left.right.bottom.equalToSuperview() -// make.height.equalTo(1) -// } -// -// return row -// } -// } -// -//// MARK: - UICollectionViewDataSource -// extension PopUpStoreRegisterView: UICollectionViewDataSource { -// func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { -// return images.count -// } -// -// func collectionView(_ collectionView: UICollectionView, -// cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { -// guard let cell = collectionView.dequeueReusableCell( -// withReuseIdentifier: PopUpImageCell.identifier, -// for: indexPath -// ) as? PopUpImageCell else { -// return UICollectionViewCell() -// } -// let item = images[indexPath.item] -// cell.configure(with: item) -// -// cell.onMainCheckToggled = { [weak self] in -// self?.onToggleMainImage?(indexPath.item) -// } -// cell.onDeleteTapped = { [weak self] in -// self?.onDeleteImage?(indexPath.item) -// } -// return cell -// } -// } -// -//// MARK: - UICollectionViewDelegateFlowLayout -// extension PopUpStoreRegisterView: UICollectionViewDelegateFlowLayout { -// // 혹시 셀 사이즈/간격을 동적으로 조정하고 싶다면 여기서 -// } -// -//// MARK: - PopUpImageCell (같은 파일) -// final class PopUpImageCell: UICollectionViewCell { -// static let identifier = "PopUpImageCell" -// -// // 콜백 -// var onMainCheckToggled: (() -> Void)? -// var onDeleteTapped: (() -> Void)? -// -// private let thumbImageView = UIImageView().then { -// $0.contentMode = .scaleAspectFill -// $0.layer.cornerRadius = 6 -// $0.clipsToBounds = true -// } -// private let mainCheckButton = UIButton(type: .system).then { -// $0.setTitle("대표", for: .normal) -// $0.setTitleColor(.white, for: .normal) -// $0.backgroundColor = .gray -// $0.titleLabel?.font = .systemFont(ofSize:12, weight:.medium) -// $0.layer.cornerRadius = 4 -// } -// private let deleteButton = UIButton(type: .system).then { -// $0.setTitle("삭제", for: .normal) -// $0.setTitleColor(.red, for: .normal) -// $0.titleLabel?.font = .systemFont(ofSize:12, weight:.medium) -// } -// -// override init(frame: CGRect) { -// super.init(frame: frame) -// contentView.addSubview(thumbImageView) -// contentView.addSubview(mainCheckButton) -// contentView.addSubview(deleteButton) -// -// thumbImageView.snp.makeConstraints { make in -// make.top.left.right.equalToSuperview() -// make.height.equalTo(thumbImageView.snp.width) -// } -// mainCheckButton.snp.makeConstraints { make in -// make.top.equalTo(thumbImageView.snp.bottom).offset(4) -// make.left.equalToSuperview() -// make.width.equalTo(40) -// make.height.equalTo(24) -// } -// deleteButton.snp.makeConstraints { make in -// make.top.equalTo(thumbImageView.snp.bottom).offset(4) -// make.right.equalToSuperview() -// make.width.equalTo(40) -// make.height.equalTo(24) -// } -// -// mainCheckButton.addTarget(self, action: #selector(didTapMainCheck), for: .touchUpInside) -// deleteButton.addTarget(self, action: #selector(didTapDelete), for: .touchUpInside) -// } -// required init?(coder: NSCoder) { -// fatalError("init(coder:) has not been implemented") -// } -// -// @objc private func didTapMainCheck() { -// onMainCheckToggled?() -// } -// @objc private func didTapDelete() { -// onDeleteTapped?() -// } -// -// func configure(with item: ExtendedImage) { -// thumbImageView.image = item.image -// mainCheckButton.backgroundColor = item.isMain ? .systemRed : .gray -// } -// } diff --git a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/InstaCommentAddController.swift b/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/InstaCommentAddController.swift deleted file mode 100644 index 68c6327b..00000000 --- a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/InstaCommentAddController.swift +++ /dev/null @@ -1,107 +0,0 @@ -// -// InstaCommentAddController.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - -import UIKit - -import ReactorKit -import RxCocoa -import RxSwift -import SnapKit -import SwiftSoup - -final class InstaCommentAddController: BaseViewController, View { - - typealias Reactor = InstaCommentAddReactor - - // MARK: - Properties - var disposeBag = DisposeBag() - - private var mainView = InstaCommentAddView() - private var sections: [any Sectionable] = [] -} - -// MARK: - Life Cycle -extension InstaCommentAddController { - override func viewDidLoad() { - super.viewDidLoad() - setUp() - } -} - -// MARK: - SetUp -private extension InstaCommentAddController { - func setUp() { - if let layout = reactor?.compositionalLayout { - mainView.contentCollectionView.collectionViewLayout = layout - } - mainView.contentCollectionView.delegate = self - mainView.contentCollectionView.dataSource = self - mainView.contentCollectionView.register(InstaGuideSectionCell.self, forCellWithReuseIdentifier: InstaGuideSectionCell.identifiers) - view.backgroundColor = .g50 - view.addSubview(mainView) - mainView.snp.makeConstraints { make in - make.edges.equalTo(view.safeAreaLayoutGuide) - } - } -} - -// MARK: - Methods -extension InstaCommentAddController { - func bind(reactor: Reactor) { - - SceneDelegate.appDidBecomeActive - .subscribe { _ in - if let url = UIPasteboard.general.string { -// guard let url = URL(string: url) else { return } -// self.crawl(url: url) -// self.fetchHTML(url: url) - } else { - print("Clipboard is empty or does not contain text") - } - } - .disposed(by: disposeBag) - - rx.viewWillAppear - .map { Reactor.Action.viewWillAppear } - .bind(to: reactor.action) - .disposed(by: disposeBag) - - mainView.instaButton.rx.tap - .map { Reactor.Action.instaButtonTapped } - .bind(to: reactor.action) - .disposed(by: disposeBag) - - reactor.state - .withUnretained(self) - .subscribe { (owner, state) in - owner.sections = state.sections - owner.mainView.contentCollectionView.reloadData() - } - .disposed(by: disposeBag) - } -} - -// MARK: - UICollectionViewDelegate, UICollectionViewDataSource -extension InstaCommentAddController: UICollectionViewDelegate, UICollectionViewDataSource { - func numberOfSections(in collectionView: UICollectionView) -> Int { - return sections.count - } - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return sections[section].dataCount - } - - func collectionView( - _ collectionView: UICollectionView, - cellForItemAt indexPath: IndexPath - ) -> UICollectionViewCell { - let cell = sections[indexPath.section].getCell(collectionView: collectionView, indexPath: indexPath) - guard let reactor = reactor else { return cell } - - return cell - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/InstaCommentAddReactor.swift b/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/InstaCommentAddReactor.swift deleted file mode 100644 index c9d0e127..00000000 --- a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/InstaCommentAddReactor.swift +++ /dev/null @@ -1,153 +0,0 @@ -// -// InstaCommentAddReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - -import UIKit - -import ReactorKit -import RxCocoa -import RxSwift - -final class InstaCommentAddReactor: Reactor { - - // MARK: - Reactor - enum Action { - case viewWillAppear - case instaButtonTapped - } - - enum Mutation { - case loadView - case moveToInsta - } - - struct State { - var sections: [any Sectionable] = [] - } - - // MARK: - properties - - var initialState: State - var disposeBag = DisposeBag() - - lazy var compositionalLayout: UICollectionViewCompositionalLayout = { - UICollectionViewCompositionalLayout { [weak self] section, env in - guard let self = self else { - return NSCollectionLayoutSection(group: NSCollectionLayoutGroup( - layoutSize: .init( - widthDimension: .fractionalWidth(1), - heightDimension: .fractionalHeight(1) - )) - ) - } - return getSection()[section].getSection(section: section, env: env) - } - }() - - private let guideSection = InstaGuideSection(inputDataList: [ - .init( - imageList: [ - UIImage(named: "icon_instaGuide_0"), - UIImage(named: "icon_instaGuide_1"), - UIImage(named: "icon_instaGuide_2"), - UIImage(named: "icon_instaGuide_3") - ], - title: [ - { - let title = "아래 인스타그램 열기\n버튼을 터치해 앱 열기" - let attributedTitle = NSMutableAttributedString(string: title) - let koreanFont = UIFont.korFont(style: .bold, size: 20)! - attributedTitle.addAttribute(.font, value: koreanFont, range: NSRange(location: 0, length: title.count)) - attributedTitle.addAttribute(.foregroundColor, value: UIColor.blu500.cgColor, range: (title as NSString).range(of: "인스타그램 열기")) - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.lineHeightMultiple = 1.2 - attributedTitle.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: title.count)) - return attributedTitle - }(), - { - let title = "원하는 피드의 이미지로 이동 후\n공유하기 > 링크복사 터치하기" - let attributedTitle = NSMutableAttributedString(string: title) - let koreanFont = UIFont.korFont(style: .bold, size: 20)! - attributedTitle.addAttribute(.font, value: koreanFont, range: NSRange(location: 0, length: title.count)) - attributedTitle.addAttribute(.foregroundColor, value: UIColor.blu500.cgColor, range: (title as NSString).range(of: "공유하기 > 링크복사")) - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.lineHeightMultiple = 1.2 - attributedTitle.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: title.count)) - return attributedTitle - }(), - { - let title = "아래 이미지 영역을 터치해\n팝풀 앱으로 돌아오기" - let attributedTitle = NSMutableAttributedString(string: title) - let koreanFont = UIFont.korFont(style: .bold, size: 20)! - attributedTitle.addAttribute(.font, value: koreanFont, range: NSRange(location: 0, length: title.count)) - attributedTitle.addAttribute(.foregroundColor, value: UIColor.blu500.cgColor, range: (title as NSString).range(of: "팝풀 앱")) - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.lineHeightMultiple = 1.2 - attributedTitle.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: title.count)) - return attributedTitle - }(), - { - let title = "복사된 인스타 피드 이미지와\n함께할 글을 입력 후 등록하기" - let attributedTitle = NSMutableAttributedString(string: title) - let koreanFont = UIFont.korFont(style: .bold, size: 20)! - attributedTitle.addAttribute(.font, value: koreanFont, range: NSRange(location: 0, length: title.count)) - attributedTitle.addAttribute(.foregroundColor, value: UIColor.blu500.cgColor, range: (title as NSString).range(of: "글을 입력 후 등록")) - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.lineHeightMultiple = 1.2 - attributedTitle.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: title.count)) - return attributedTitle - }() - ] - ) - ]) - - // MARK: - init - init() { - self.initialState = State() - } - - // MARK: - Reactor Methods - func mutate(action: Action) -> Observable { - switch action { - case .viewWillAppear: - return Observable.just(.loadView) - case .instaButtonTapped: - return Observable.just(.moveToInsta) - } - } - - func reduce(state: State, mutation: Mutation) -> State { - var newState = state - switch mutation { - case .loadView: - newState.sections = getSection() - case .moveToInsta: - openInstagram() - - } - return newState - } - - func getSection() -> [any Sectionable] { - return [ - guideSection - ] - } - - func openInstagram() { - // Instagram 앱의 URL Scheme - let instagramURL = URL(string: "instagram://app")! - - if UIApplication.shared.canOpenURL(instagramURL) { - // Instagram 앱 열기 - UIApplication.shared.open(instagramURL, options: [:], completionHandler: nil) - } else { - // Instagram 앱이 설치되지 않은 경우 - let appStoreURL = URL(string: "https://apps.apple.com/app/instagram/id389801252")! - UIApplication.shared.open(appStoreURL, options: [:], completionHandler: nil) - } - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaCommentAddView.swift b/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaCommentAddView.swift deleted file mode 100644 index c7c9faa0..00000000 --- a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaCommentAddView.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// InstaCommentAddView.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - -import UIKit - -import SnapKit - -final class InstaCommentAddView: UIView { - - // MARK: - Components - let headerView: PPReturnHeaderView = { - let view = PPReturnHeaderView() - view.headerLabel.setLineHeightText(text: "코멘트 작성하기", font: .korFont(style: .regular, size: 15)) - return view - }() - - let instaButton: UIButton = { - let button = UIButton() - button.setTitleColor(.white, for: .normal) - button.backgroundColor = .g900 - button.layer.cornerRadius = 4 - - let title = "Instagram 열기" - let attributedTitle = NSMutableAttributedString(string: title) - - let englishFont = UIFont.engFont(style: .medium, size: 15)! - attributedTitle.addAttribute(.font, value: englishFont, range: (title as NSString).range(of: "Instagram")) - - let koreanFont = UIFont.korFont(style: .medium, size: 15)! - attributedTitle.addAttribute(.font, value: koreanFont, range: (title as NSString).range(of: "열기")) - - button.setAttributedTitle(attributedTitle, for: .normal) - - return button - }() - - private let instaImageView: UIImageView = { - let view = UIImageView() - view.image = UIImage(named: "icon_instagram") - return view - }() - - let contentCollectionView: UICollectionView = { - let view = UICollectionView(frame: .zero, collectionViewLayout: .init()) - view.backgroundColor = .g50 - return view - }() - - // MARK: - init - init() { - super.init(frame: .zero) - setUpConstraints() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} - -// MARK: - SetUp -private extension InstaCommentAddView { - - func setUpConstraints() { - self.addSubview(headerView) - headerView.snp.makeConstraints { make in - make.top.leading.trailing.equalToSuperview() - } - - self.addSubview(instaButton) - instaButton.snp.makeConstraints { make in - make.leading.trailing.bottom.equalToSuperview().inset(20) - make.height.equalTo(52) - } - - instaButton.addSubview(instaImageView) - instaImageView.snp.makeConstraints { make in - make.leading.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - make.size.equalTo(22) - } - - self.addSubview(contentCollectionView) - contentCollectionView.snp.makeConstraints { make in - make.top.equalTo(headerView.snp.bottom) - make.leading.trailing.equalToSuperview() - make.bottom.equalTo(instaButton.snp.top) - } - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideChildSection/InstaGuideChildSection.swift b/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideChildSection/InstaGuideChildSection.swift deleted file mode 100644 index cb88aa60..00000000 --- a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideChildSection/InstaGuideChildSection.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// InstaGuideChildSection.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - -import UIKit - -import RxSwift - -struct InstaGuideChildSection: Sectionable { - - var currentPage: PublishSubject = .init() - - typealias CellType = InstaGuideChildSectionCell - - var inputDataList: [CellType.Input] - - var supplementaryItems: [any SectionSupplementaryItemable]? - - var decorationItems: [any SectionDecorationItemable]? - - func setSection(section: Int, env: any NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection { - let itemSize = NSCollectionLayoutSize( - widthDimension: .fractionalWidth(1), - heightDimension: .estimated(500) - ) - let item = NSCollectionLayoutItem(layoutSize: itemSize) - - let groupSize = NSCollectionLayoutSize( - widthDimension: .fractionalWidth(1), - heightDimension: .estimated(500) - ) - let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item]) - - // 섹션 생성 - let section = NSCollectionLayoutSection(group: group) - section.orthogonalScrollingBehavior = .paging - return section - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideChildSection/InstaGuideChildSectionCell.swift b/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideChildSection/InstaGuideChildSectionCell.swift deleted file mode 100644 index 5a4bff39..00000000 --- a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideChildSection/InstaGuideChildSectionCell.swift +++ /dev/null @@ -1,103 +0,0 @@ -// -// InstaGuideChildSectionCell.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - -import UIKit - -import RxSwift -import SnapKit - -final class InstaGuideChildSectionCell: UICollectionViewCell { - - // MARK: - Components - - let disposeBag = DisposeBag() - - private let indexTrailgView: UIView = { - let view = UIView() - view.backgroundColor = .g900 - view.clipsToBounds = true - view.layer.cornerRadius = 4 - return view - }() - - private let indexLabel: UILabel = { - let label = UILabel() - label.font = .engFont(style: .medium, size: 16) - label.textColor = .w100 - label.textAlignment = .center - return label - }() - - private let titleLabel: UILabel = { - let label = UILabel() - label.numberOfLines = 2 - return label - }() - - private let imageView: UIImageView = { - let view = UIImageView() - view.layer.cornerRadius = 8 - view.clipsToBounds = true - return view - }() - - // MARK: - init - - override init(frame: CGRect) { - super.init(frame: frame) - setUpConstraints() - } - - required init?(coder: NSCoder) { - fatalError() - } -} - -// MARK: - SetUp -private extension InstaGuideChildSectionCell { - func setUpConstraints() { - contentView.addSubview(indexTrailgView) - indexTrailgView.snp.makeConstraints { make in - make.top.equalToSuperview().inset(36) - make.leading.equalToSuperview().inset(20) - make.width.equalTo(40) - make.height.equalTo(33) - } - - indexTrailgView.addSubview(indexLabel) - indexLabel.snp.makeConstraints { make in - make.center.equalToSuperview() - } - - contentView.addSubview(titleLabel) - titleLabel.snp.makeConstraints { make in - make.leading.trailing.equalToSuperview().inset(20) - make.top.equalTo(indexTrailgView.snp.bottom).offset(16) - } - contentView.addSubview(imageView) - imageView.snp.makeConstraints { make in - make.size.equalTo(335) - make.centerX.equalToSuperview() - make.top.equalTo(titleLabel.snp.bottom).offset(28) - make.bottom.equalToSuperview() - } - } -} - -extension InstaGuideChildSectionCell: Inputable { - struct Input { - var image: UIImage? - var title: NSMutableAttributedString? - var index: Int - } - - func injection(with input: Input) { - indexLabel.text = "#\(input.index + 1)" - titleLabel.attributedText = input.title - imageView.image = input.image - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideSection/InstaGuideSection.swift b/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideSection/InstaGuideSection.swift deleted file mode 100644 index 13bfca92..00000000 --- a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideSection/InstaGuideSection.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// InstaGuideSection.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - -import UIKit - -import RxSwift - -struct InstaGuideSection: Sectionable { - - var currentPage: PublishSubject = .init() - - typealias CellType = InstaGuideSectionCell - - var inputDataList: [CellType.Input] - - var supplementaryItems: [any SectionSupplementaryItemable]? - - var decorationItems: [any SectionDecorationItemable]? - - func setSection(section: Int, env: any NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection { - let itemSize = NSCollectionLayoutSize( - widthDimension: .fractionalWidth(1), - heightDimension: .estimated(600) - ) - let item = NSCollectionLayoutItem(layoutSize: itemSize) - - let groupSize = NSCollectionLayoutSize( - widthDimension: .fractionalWidth(1.0), - heightDimension: .estimated(600) - ) - let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item]) - - // 섹션 생성 - - return NSCollectionLayoutSection(group: group) - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideSection/InstaGuideSectionCell.swift b/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideSection/InstaGuideSectionCell.swift deleted file mode 100644 index d3c3371e..00000000 --- a/Poppool/Poppool/Presentation/Scene/Comment/InstaComment/View/InstaGuideSection/InstaGuideSection/InstaGuideSectionCell.swift +++ /dev/null @@ -1,206 +0,0 @@ -// -// InstaGuideSectionCell.swift -// Poppool -// -// Created by SeoJunYoung on 12/15/24. -// - -import UIKit - -import RxSwift -import SnapKit - -final class InstaGuideSectionCell: UICollectionViewCell { - - // MARK: - Components - - let disposeBag = DisposeBag() - - private var autoScrollTimer: Timer? - - private lazy var contentCollectionView: UICollectionView = { - let view = UICollectionView(frame: .zero, collectionViewLayout: compositionalLayout) - view.isScrollEnabled = false - view.backgroundColor = .g50 - return view - }() - - var pageControl: UIPageControl = { - let controller = UIPageControl() - controller.currentPage = 0 - controller.preferredIndicatorImage = UIImage(systemName: "circle") - controller.preferredCurrentPageIndicatorImage = UIImage(systemName: "circle.fill") - controller.pageIndicatorTintColor = .pb30 - controller.currentPageIndicatorTintColor = .g600 - controller.isUserInteractionEnabled = false - controller.transform = CGAffineTransform(scaleX: 0.8, y: 0.8) - return controller - }() - - let stopButton: UIButton = { - let button = UIButton() - button.setImage(UIImage(named: "icon_banner_stopButton_gray"), for: .normal) - return button - }() - - private var isAutoBannerPlay: Bool = false - - private var imageSection = InstaGuideChildSection(inputDataList: []) - - lazy var compositionalLayout: UICollectionViewCompositionalLayout = { - UICollectionViewCompositionalLayout { [weak self] section, env in - guard let self = self else { - return NSCollectionLayoutSection(group: NSCollectionLayoutGroup( - layoutSize: .init( - widthDimension: .fractionalWidth(1), - heightDimension: .fractionalHeight(1) - )) - ) - } - return getSection()[section].getSection(section: section, env: env) - } - }() - - // MARK: - init - - override init(frame: CGRect) { - super.init(frame: frame) - setUp() - setUpConstraints() - bind() - } - - required init?(coder: NSCoder) { - fatalError() - } - - override func prepareForReuse() { - super.prepareForReuse() - stopAutoScroll() - } - - deinit { - stopAutoScroll() - } -} - -// MARK: - SetUp -private extension InstaGuideSectionCell { - func setUp() { - contentCollectionView.delegate = self - contentCollectionView.dataSource = self - - contentCollectionView.register( - InstaGuideChildSectionCell.self, - forCellWithReuseIdentifier: InstaGuideChildSectionCell.identifiers - ) - imageSection.currentPage - .withUnretained(self) - .subscribe { (owner, page) in - owner.pageControl.currentPage = page - } - .disposed(by: disposeBag) - } - - func setUpConstraints() { - contentView.addSubview(contentCollectionView) - contentCollectionView.snp.makeConstraints { make in - make.top.leading.trailing.equalToSuperview() - make.height.equalTo(504) - } - - contentView.addSubview(pageControl) - pageControl.snp.makeConstraints { make in - make.top.equalTo(contentCollectionView.snp.bottom) - make.centerX.equalToSuperview() - make.bottom.equalToSuperview() - } - - contentView.addSubview(stopButton) - stopButton.snp.makeConstraints { make in - make.size.equalTo(8) - make.centerY.equalTo(pageControl.snp.centerY) - make.leading.equalTo(pageControl.snp.trailing).offset(-36) - } - } - - func getSection() -> [any Sectionable] { - return [imageSection] - } - - func startAutoScroll(interval: TimeInterval = 3.0) { - stopAutoScroll() // 기존 타이머를 중지 - isAutoBannerPlay = true - autoScrollTimer = Timer.scheduledTimer(withTimeInterval: interval, repeats: true) { [weak self] _ in - self?.scrollToNextItem() - } - } - - // 자동 스크롤 중지 함수 - func stopAutoScroll() { - isAutoBannerPlay = false - autoScrollTimer?.invalidate() - autoScrollTimer = nil - } - - // 다음 배너로 스크롤 - private func scrollToNextItem() { - - let visibleIndexPaths = contentCollectionView.indexPathsForVisibleItems.sorted() - guard let currentIndex = visibleIndexPaths.first else { return } - - let nextIndex = IndexPath( - item: (currentIndex.item + 1) % imageSection.dataCount, - section: currentIndex.section - ) - - contentCollectionView.scrollToItem(at: nextIndex, at: .centeredHorizontally, animated: true) - pageControl.currentPage = nextIndex.item - } - - func bind() { - stopButton.rx.tap - .withUnretained(self) - .subscribe { (owner, _) in - if owner.isAutoBannerPlay { - owner.stopAutoScroll() - } else { - owner.startAutoScroll() - } - } - .disposed(by: disposeBag) - } -} - -extension InstaGuideSectionCell: Inputable { - struct Input { - var imageList: [UIImage?] - var title: [NSMutableAttributedString?] - } - - func injection(with input: Input) { - pageControl.numberOfPages = input.imageList.count - let datas = zip(input.imageList, input.title).enumerated().map { $0 } - imageSection.inputDataList = datas.map { .init(image: $0.element.0, title: $0.element.1, index: $0.offset)} - contentCollectionView.reloadData() - startAutoScroll() - } -} - -// MARK: - UICollectionViewDelegate, UICollectionViewDataSource -extension InstaGuideSectionCell: UICollectionViewDelegate, UICollectionViewDataSource { - - func numberOfSections(in collectionView: UICollectionView) -> Int { - return getSection().count - } - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return getSection()[section].dataCount - } - - func collectionView( - _ collectionView: UICollectionView, - cellForItemAt indexPath: IndexPath - ) -> UICollectionViewCell { - return getSection()[indexPath.section].getCell(collectionView: collectionView, indexPath: indexPath) - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Map/CustomClusterRenderer.swift b/Poppool/Poppool/Presentation/Scene/Map/CustomClusterRenderer.swift deleted file mode 100644 index 82fa4b7d..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/CustomClusterRenderer.swift +++ /dev/null @@ -1,15 +0,0 @@ -// import GoogleMaps -// -// class CustomClusterRenderer: GMUDefaultClusterRenderer { -// override func willRenderMarker(_ marker: GMSMarker) { -// super.willRenderMarker(marker) -// // 클러스터일 경우 처리 -// if let cluster = marker.userData as? GMUCluster { -// let customView = MapMarker() -// // 예: 클러스터의 이름과 count를 injection -// customView.injection(with: .init(isSelected: false, isCluster: true, regionName: cluster.clusterIdentifier, count: cluster.count)) -// // marker의 iconView에 적용 -// marker.iconView = customView -// } -// } -// } diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/CategoryFilterView.swift b/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/CategoryFilterView.swift deleted file mode 100644 index 06fd3d99..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/CategoryFilterView.swift +++ /dev/null @@ -1,35 +0,0 @@ -// import UIKit -// import SnapKit -// -// final class CategoryFilterView: UIView { -// private let stackView = UIStackView() -// private let categories = ["게임", "라이프스타일", "엔터테인먼트", "패션", "음식/요리", "키즈"] -// -// override init(frame: CGRect) { -// super.init(frame: frame) -// setupLayout() -// setupCategories() -// } -// -// required init?(coder: NSCoder) { -// fatalError("init(coder:) has not been implemented") -// } -// -// private func setupLayout() { -// addSubview(stackView) -// stackView.axis = .vertical -// stackView.spacing = 12 -// stackView.snp.makeConstraints { make in -// make.top.equalToSuperview().offset(20) -// make.leading.trailing.equalToSuperview().inset(20) -// } -// } -// -// private func setupCategories() { -// for c in categories { -// let chip = FilterChip() -// chip.setTitle(c, style: .inactive) -// stackView.addArrangedSubview(chip) -// } -// } -// } diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterTabsView.swift b/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterTabsView.swift deleted file mode 100644 index 99dfe49c..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterTabsView.swift +++ /dev/null @@ -1,39 +0,0 @@ -// import UIKit -// import RxSwift -// import RxCocoa -// -// final class FilterTabsView: UIView { -// private let tabs = ["지역", "카테고리"] -// let segmentedControl = UISegmentedControl() -// -// var rx: Reactive { -// return Reactive(self) -// } -// -// override init(frame: CGRect) { -// super.init(frame: frame) -// setupTabs() -// } -// -// required init?(coder: NSCoder) { -// fatalError("init(coder:) has not been implemented") -// } -// -// private func setupTabs() { -// tabs.enumerated().forEach { index, title in -// segmentedControl.insertSegment(withTitle: title, at: index, animated: false) -// } -// segmentedControl.selectedSegmentIndex = 0 -// addSubview(segmentedControl) -// -// segmentedControl.snp.makeConstraints { make in -// make.edges.equalToSuperview() -// } -// } -// } -// -// extension Reactive where Base: FilterTabsView { -// var selectedIndex: ControlProperty { -// return base.segmentedControl.rx.selectedSegmentIndex -// } -// } diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/LocationFilterView.swift b/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/LocationFilterView.swift deleted file mode 100644 index 567dfd1d..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/LocationFilterView.swift +++ /dev/null @@ -1,40 +0,0 @@ -// import UIKit -// import SnapKit -// -// final class LocationFilterView: UIView { -// private let scrollView = UIScrollView() -// private let contentStack = UIStackView() -// -// private let regions = ["서울", "경기", "인천", "부산", "제주"] -// -// override init(frame: CGRect) { -// super.init(frame: frame) -// setupLayout() -// setupRegions() -// } -// -// required init?(coder: NSCoder) { -// fatalError("init(coder:) has not been implemented") -// } -// -// private func setupLayout() { -// addSubview(scrollView) -// scrollView.snp.makeConstraints { $0.edges.equalToSuperview() } -// -// scrollView.addSubview(contentStack) -// contentStack.axis = .horizontal -// contentStack.spacing = 8 -// contentStack.snp.makeConstraints { make in -// make.edges.equalToSuperview().inset(20) -// make.height.equalTo(40) -// } -// } -// -// private func setupRegions() { -// for r in regions { -// let chip = FilterChip() -// chip.setTitle(r, style: .inactive) -// contentStack.addArrangedSubview(chip) -// } -// } -// } diff --git a/Poppool/Poppool/Presentation/Scene/Map/FindMap/GuideMapViewController.swift b/Poppool/Poppool/Presentation/Scene/Map/FindMap/GuideMapViewController.swift deleted file mode 100644 index 8b137891..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/FindMap/GuideMapViewController.swift +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideAppService.swift b/Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideAppService.swift deleted file mode 100644 index 048c1f2f..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideAppService.swift +++ /dev/null @@ -1,71 +0,0 @@ -import CoreLocation -import UIKit - -enum MapAppType { - case naver - case kakao - case apple - - static func from(string: String) -> MapAppType? { - switch string.lowercased() { - case "naver": - return .naver - case "kakao": - return .kakao - case "apple", "applemap": - return .apple - default: - return nil - } - } - - func urlScheme(coordinate: CLLocationCoordinate2D, name: String, address: String) -> String { - let encodedName = name.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" - let encodedAddress = address.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" - - switch self { - case .naver: - return "nmap://place?lat=\(coordinate.latitude)&lng=\(coordinate.longitude)&name=\(encodedName)&addr=\(encodedAddress)&appname=com.poppool.app" - case .kakao: - return "kakaomap://look?p=\(coordinate.latitude),\(coordinate.longitude)" - case .apple: - return "maps://?q=\(encodedName)&ll=\(coordinate.latitude),\(coordinate.longitude)&z=16" - } - } - - var appStoreURL: String { - switch self { - case .naver: - return "https://apps.apple.com/kr/app/id311867728" - case .kakao: - return "https://apps.apple.com/kr/app/id304608425" - case .apple: - return "https://apps.apple.com/kr/app/id1108185179" - } - } -} - -class MapAppService { - static func openMapApp(_ appTypeString: String, coordinate: CLLocationCoordinate2D, name: String, address: String) -> Observable { - guard let appType = MapAppType.from(string: appTypeString) else { - return Observable.just("지원하지 않는 맵 앱입니다.") - } - - let urlScheme = appType.urlScheme(coordinate: coordinate, name: name, address: address) - - Logger.log(message: "🗺 맵 앱 열기 시도: \(urlScheme)", category: .debug) - - if let url = URL(string: urlScheme), UIApplication.shared.canOpenURL(url) { - Logger.log(message: "✅ \(appType) 앱 실행", category: .debug) - UIApplication.shared.open(url, options: [:], completionHandler: nil) - return Observable.empty() - } else { - Logger.log(message: "❌ \(appType) 앱 미설치 - 앱스토어로 이동", category: .debug) - if let appStoreURL = URL(string: appType.appStoreURL) { - UIApplication.shared.open(appStoreURL, options: [:], completionHandler: nil) - return Observable.just("\(appTypeString) 앱이 설치되어 있지 않아 앱스토어로 이동합니다.") - } - return Observable.just("앱을 열 수 없습니다.") - } - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Map/MapStoreCard.swift b/Poppool/Poppool/Presentation/Scene/Map/MapStoreCard.swift deleted file mode 100644 index a4c86d8f..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/MapStoreCard.swift +++ /dev/null @@ -1,116 +0,0 @@ -// import UIKit -// import SnapKit -// -// final class MapStoreCard: UIView { -// // MARK: - Components -// private let containerView: UIView = { -// let view = UIView() -// view.backgroundColor = .white -// view.layer.cornerRadius = 16 -// view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] -// view.layer.shadowColor = UIColor.black.cgColor -// view.layer.shadowOpacity = 0.1 -// view.layer.shadowRadius = 4 -// view.layer.shadowOffset = CGSize(width: 0, height: -2) -// return view -// }() -// -// private let thumbnailImageView: UIImageView = { -// let iv = UIImageView() -// iv.contentMode = .scaleAspectFill -// iv.clipsToBounds = true -// iv.layer.cornerRadius = 8 -// return iv -// }() -// -// private let categoryLabel = PPLabel(style: .regular, fontSize: 12) -// private let titleLabel: PPLabel = { -// let label = PPLabel(style: .bold, fontSize: 16) -// label.numberOfLines = 2 // 최대 2줄로 제한 -// return label -// }() -// -// private let locationLabel = PPLabel(style: .regular, fontSize: 12) -// private let dateLabel = PPLabel(style: .regular, fontSize: 12) -// -// // MARK: - Init -// init() { -// super.init(frame: .zero) -// setupLayout() -// configureUI() -// } -// -// required init?(coder: NSCoder) { -// fatalError("init(coder:) has not been implemented") -// } -// } -// -//// MARK: - Setup -// private extension MapStoreCard { -// func setupLayout() { -// addSubview(containerView) -// -// [thumbnailImageView, categoryLabel, titleLabel, locationLabel, dateLabel].forEach { -// containerView.addSubview($0) -// } -// -// containerView.snp.makeConstraints { make in -// make.edges.equalToSuperview().inset(16) -// } -// -// -// thumbnailImageView.snp.makeConstraints { make in -// make.leading.equalToSuperview() -// make.top.bottom.equalToSuperview().inset(20) -// make.width.equalTo(80) // 고정된 너비 -// } -// -// categoryLabel.snp.makeConstraints { make in -// make.leading.equalTo(thumbnailImageView.snp.trailing).offset(16) -// make.trailing.equalToSuperview().inset(16) -// make.top.equalTo(thumbnailImageView) -// } -// -// titleLabel.snp.makeConstraints { make in -// make.leading.equalTo(categoryLabel) -// make.trailing.equalToSuperview().inset(16) -// make.top.equalTo(categoryLabel.snp.bottom).offset(8) -// } -// -// locationLabel.snp.makeConstraints { make in -// make.leading.equalTo(categoryLabel) -// make.top.equalTo(titleLabel.snp.bottom).offset(4) -// } -// -// dateLabel.snp.makeConstraints { make in -// make.leading.equalTo(locationLabel.snp.trailing).offset(8) -// make.centerY.equalTo(locationLabel) -// } -// -// } -// -// func configureUI() { -// categoryLabel.textColor = .g700 -// locationLabel.textColor = .g500 -// dateLabel.textColor = .g500 -// } -// } -// -//// MARK: - Inputable -// extension MapStoreCard: Inputable { -// struct Input { -// let image: UIImage? -// let category: String -// let title: String -// let location: String -// let date: String -// } -// -// func injection(with input: Input) { -// thumbnailImageView.image = input.image ?? UIImage(named: "default_thumbnail") -// categoryLabel.text = input.category -// titleLabel.text = input.title -// locationLabel.text = input.location -// dateLabel.text = input.date -// } -// } diff --git a/Poppool/Poppool/Presentation/Scene/Map/MicroClusterMarkerView.swift b/Poppool/Poppool/Presentation/Scene/Map/MicroClusterMarkerView.swift deleted file mode 100644 index f7d21f38..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/MicroClusterMarkerView.swift +++ /dev/null @@ -1,2 +0,0 @@ -import Foundation -import UIKit diff --git a/Poppool/Poppool/Presentation/Scene/Map/StoreListPanelLayout.swift b/Poppool/Poppool/Presentation/Scene/Map/StoreListPanelLayout.swift deleted file mode 100644 index 5dd5201d..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/StoreListPanelLayout.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// import FloatingPanel -// import UIKit -// -// class StoreListPanelLayout: FloatingPanelLayout { -// let position: FloatingPanelPosition = .bottom -// let initialState: FloatingPanelState = .half -// -// var anchors: [FloatingPanelState: FloatingPanelLayoutAnchoring] { -// return [ -// .full: FloatingPanelLayoutAnchor(absoluteInset: 120, edge: .top, referenceGuide: .superview), -// .half: FloatingPanelLayoutAnchor(fractionalInset: 0.6, edge: .bottom, referenceGuide: .safeArea), -// .tip: FloatingPanelLayoutAnchor(absoluteInset: -100, edge: .bottom, referenceGuide: .safeArea) // 완전히 내림 -// ] -// } -// -// func backdropAlpha(for state: FloatingPanelState) -> CGFloat { -// return 0.0 -// } -// -// func shouldMove(for proposedTargetState: FloatingPanelState) -> Bool { -// return true -// } -// -// var cornerRadius: CGFloat { return 0 } -// -// func surfaceLayout(for size: CGSize) -> NSCollectionLayoutDimension { -// return .fractionalWidth(1.0) -// } -// } diff --git a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListHeaderView.swift b/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListHeaderView.swift deleted file mode 100644 index 65f574b0..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListHeaderView.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// import UIKit -// import SnapKit -// import RxSwift -// -// -// class StoreListHeaderView: UICollectionReusableView { -// static let identifier = "StoreListHeaderView" -// -// let searchInput = MapSearchInput() -// let filterChips = MapFilterChips() -// -// var disposeBag = DisposeBag() -// override init(frame: CGRect) { -// super.init(frame: frame) -//// print("[DEBUG] StoreListHeaderView 초기화 - frame: \(frame)") -// setupLayout() -// searchInput.setBackgroundColorForList() -// -// } -// -// required init?(coder: NSCoder) { -// fatalError("init(coder:) has not been implemented") -// } -// -// private func setupLayout() { -// -// backgroundColor = .white -// addSubview(searchInput) -// addSubview(filterChips) -// -// -// searchInput.snp.makeConstraints { make in -// make.top.equalToSuperview().offset(16) -// make.left.equalToSuperview().offset(20) -// make.right.equalToSuperview().inset(16) -// make.height.equalTo(37) -// -// -// } -// -// filterChips.snp.makeConstraints { make in -// make.top.equalTo(searchInput.snp.bottom).offset(11) -// make.left.right.equalToSuperview().inset(20) -// make.height.equalTo(36) -// make.bottom.equalToSuperview().offset(-20) -// } -// -// -// layoutIfNeeded() -// -// -// } -// } diff --git a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListPanelLayout.swift b/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListPanelLayout.swift deleted file mode 100644 index ab3b649d..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListPanelLayout.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// StoreListPanelLayout.swift -// Poppool -// -// Created by 김기현 on 12/20/24. -// - -import FloatingPanel -import UIKit - -class StoreListPanelLayout: FloatingPanelLayout { - let position: FloatingPanelPosition = .bottom - let initialState: FloatingPanelState = .half - - var anchors: [FloatingPanelState: FloatingPanelLayoutAnchoring] { - return [ - // 스택뷰 (검색바 + 필터칩) 바로 아래에 맞춰서 올라오도록 설정 - .full: FloatingPanelLayoutAnchor(absoluteInset: 90, edge: .top, referenceGuide: .safeArea), - .half: FloatingPanelLayoutAnchor(fractionalInset: 0.6, edge: .bottom, referenceGuide: .safeArea) - ] - } - - func backdropAlpha(for state: FloatingPanelState) -> CGFloat { - return 0.0 - } - - // 스크롤 뷰와의 상호작용 방지 - func shouldMove(for proposedTargetState: FloatingPanelState) -> Bool { - return true - } - - // 패널의 모서리 둥글기 설정 - var cornerRadius: CGFloat { return 0 } // 페이지처럼 보이도록 모서리 둥글기 제거 - - // 화면 전체를 덮도록 surface 레이아웃 설정 - func surfaceLayout(for size: CGSize) -> NSCollectionLayoutDimension { - return .fractionalWidth(1.0) - } -} diff --git a/Poppool/Poppool/Presentation/Scene/Map/StoreLocation.swift b/Poppool/Poppool/Presentation/Scene/Map/StoreLocation.swift deleted file mode 100644 index e8e7b76c..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/StoreLocation.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// StoreLocation.swift -// Poppool -// -// Created by 김기현 on 2/7/25. -// - -import Foundation diff --git a/Poppool/Poppool/Presentation/Scene/Map/TestViewController.swift b/Poppool/Poppool/Presentation/Scene/Map/TestViewController.swift deleted file mode 100644 index 82bd615b..00000000 --- a/Poppool/Poppool/Presentation/Scene/Map/TestViewController.swift +++ /dev/null @@ -1,153 +0,0 @@ -// -// ViewController.swift -// Poppool -// -// Created by Porori on 11/24/24. -// - -import UIKit - -import RxCocoa -import RxGesture -import RxSwift -import SnapKit - -class TestViewController: UIViewController { - - private let topView: UIView = { - let view = UIView() - view.backgroundColor = .w100 - view.alpha = 0 - return view - }() - - private let topViewLabel: UILabel = { - let label = UILabel() - label.text = "Top View Label" - return label - }() - - private let bottomView: UIView = { - let view = UIView() - view.backgroundColor = .w100 - return view - }() - - private let gestureBar: UIView = { - let view = UIView() - view.backgroundColor = .g200 - return view - }() - - private let listButton: PPButton = { - return PPButton(style: .secondary, text: "리스트 버튼") - }() - - private let disposeBag = DisposeBag() - - private var bottomViewTopConstraints: Constraint? - - enum ModalState { - case top - case middle - case bottom - } - - var modalState: ModalState = .bottom - - override func viewDidLoad() { - super.viewDidLoad() - view.backgroundColor = .blue - setUpConstratins() - bind() - } - - func setUpConstratins() { - view.addSubview(listButton) - listButton.snp.makeConstraints { make in - make.leading.trailing.bottom.equalToSuperview().inset(20) - make.height.equalTo(50) - } - - view.addSubview(topView) - topView.snp.makeConstraints { make in - make.top.leading.trailing.equalToSuperview() - make.bottom.equalTo(view.safeAreaLayoutGuide.snp.top).offset(104) - } - - topView.addSubview(topViewLabel) - topViewLabel.snp.makeConstraints { make in - make.center.equalToSuperview() - } - - view.addSubview(bottomView) - bottomView.snp.makeConstraints { make in - make.leading.trailing.equalToSuperview() - bottomViewTopConstraints = make.top.equalTo(topView.snp.bottom).offset(700).constraint - make.height.equalTo(700) - } - - bottomView.addSubview(gestureBar) - gestureBar.snp.makeConstraints { make in - make.width.equalTo(50) - make.height.equalTo(20) - make.top.equalToSuperview().inset(20) - make.centerX.equalToSuperview() - } - } - - func bind() { - listButton.rx.tap - .withUnretained(self) - .subscribe { (owner, _) in - print("listButtonTapped") - UIView.animate(withDuration: 0.3) { - owner.bottomViewTopConstraints?.update(offset: 124) - owner.topView.alpha = 0 - owner.view.layoutIfNeeded() - } - } - .disposed(by: disposeBag) - - gestureBar.rx.swipeGesture(.up) - .skip(1) - .withUnretained(self) - .subscribe { (owner, _) in - print("swipe up") - UIView.animate(withDuration: 0.3) { - owner.bottomViewTopConstraints?.update(offset: 0) - owner.topView.alpha = 1 - owner.view.layoutIfNeeded() - owner.modalState = .top - } - } - .disposed(by: disposeBag) - - gestureBar.rx.swipeGesture(.down) - .skip(1) - .withUnretained(self) - .subscribe { (owner, _) in - print("swipe down") - switch owner.modalState { - case .top: - UIView.animate(withDuration: 0.3) { - owner.bottomViewTopConstraints?.update(offset: 124) - owner.topView.alpha = 0 - owner.view.layoutIfNeeded() - owner.modalState = .middle - } - case .middle: - UIView.animate(withDuration: 0.3) { - owner.bottomViewTopConstraints?.update(offset: 700) - owner.topView.alpha = 0 - owner.view.layoutIfNeeded() - owner.modalState = .bottom - } - case .bottom: - break - } - - } - .disposed(by: disposeBag) - } -} diff --git a/Poppool/Poppool/Presentation/Utills/Common/ViewportBounds.swift b/Poppool/Poppool/Presentation/Utills/Common/ViewportBounds.swift deleted file mode 100644 index 9c1fc360..00000000 --- a/Poppool/Poppool/Presentation/Utills/Common/ViewportBounds.swift +++ /dev/null @@ -1,6 +0,0 @@ -import CoreLocation - -struct ViewportBounds { - let northEast: CLLocationCoordinate2D - let southWest: CLLocationCoordinate2D -} diff --git a/Poppool/Poppool/Poppool.entitlements b/Poppool/Poppool/Resource/Poppool.entitlements similarity index 100% rename from Poppool/Poppool/Poppool.entitlements rename to Poppool/Poppool/Resource/Poppool.entitlements diff --git a/Poppool/PresentationLayer/Presentation/Presentation.xcodeproj/project.pbxproj b/Poppool/PresentationLayer/Presentation/Presentation.xcodeproj/project.pbxproj new file mode 100644 index 00000000..f8acaeec --- /dev/null +++ b/Poppool/PresentationLayer/Presentation/Presentation.xcodeproj/project.pbxproj @@ -0,0 +1,632 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 05125B982DB626E3001342A2 /* ReactorKit in Frameworks */ = {isa = PBXBuildFile; productRef = 05125B972DB626E3001342A2 /* ReactorKit */; }; + 05125BA12DB6275C001342A2 /* PanModal in Frameworks */ = {isa = PBXBuildFile; productRef = 05125BA02DB6275C001342A2 /* PanModal */; }; + 0522C1E12DB67C8300B141FF /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0522C1E02DB67C8300B141FF /* RxSwift */; }; + 05BDD5CC2DB6756500C1E192 /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = 05BDD5CB2DB6756500C1E192 /* SnapKit */; }; + 05BDD5CF2DB6770300C1E192 /* Lottie in Frameworks */ = {isa = PBXBuildFile; productRef = 05BDD5CE2DB6770300C1E192 /* Lottie */; }; + 05C1D62C2DB53A8200508FFD /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D62A2DB53A8200508FFD /* DomainInterface.framework */; }; + 05C1D62E2DB53A8200508FFD /* Infrastructure.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05C1D62B2DB53A8200508FFD /* Infrastructure.framework */; }; + 05EC93CF2DB64C6F00771CB3 /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 05EC93CE2DB64C6F00771CB3 /* KakaoSDKAuth */; }; + 05EC93D12DB64C6F00771CB3 /* KakaoSDKUser in Frameworks */ = {isa = PBXBuildFile; productRef = 05EC93D02DB64C6F00771CB3 /* KakaoSDKUser */; }; + 05EC93D32DB6536200771CB3 /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 05EC93D22DB6536200771CB3 /* RxCocoa */; }; + 08B2A3582DB66B4100E57EFA /* RxKeyboard in Frameworks */ = {isa = PBXBuildFile; productRef = 08B2A3572DB66B4100E57EFA /* RxKeyboard */; }; + 08B2A35B2DB66B5A00E57EFA /* FloatingPanel in Frameworks */ = {isa = PBXBuildFile; productRef = 08B2A35A2DB66B5A00E57EFA /* FloatingPanel */; }; + 08B2A35E2DB66B8600E57EFA /* RxDataSources in Frameworks */ = {isa = PBXBuildFile; productRef = 08B2A35D2DB66B8600E57EFA /* RxDataSources */; }; + 08B2A3612DB66BAB00E57EFA /* Then in Frameworks */ = {isa = PBXBuildFile; productRef = 08B2A3602DB66BAB00E57EFA /* Then */; }; + 08B2A3642DB66BBC00E57EFA /* Tabman in Frameworks */ = {isa = PBXBuildFile; productRef = 08B2A3632DB66BBC00E57EFA /* Tabman */; }; + 08B2A3672DB66BD400E57EFA /* Pageboy in Frameworks */ = {isa = PBXBuildFile; productRef = 08B2A3662DB66BD400E57EFA /* Pageboy */; }; + 08B2A36A2DB66BF200E57EFA /* RxGesture in Frameworks */ = {isa = PBXBuildFile; productRef = 08B2A3692DB66BF200E57EFA /* RxGesture */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 05BDD5C22DB6744000C1E192 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 058CC9042DB537960084221A /* Presentation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D62A2DB53A8200508FFD /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05C1D62B2DB53A8200508FFD /* Infrastructure.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Infrastructure.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 058CC9062DB537960084221A /* Presentation */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = Presentation; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 058CC9012DB537960084221A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 08B2A3672DB66BD400E57EFA /* Pageboy in Frameworks */, + 05BDD5CC2DB6756500C1E192 /* SnapKit in Frameworks */, + 08B2A36A2DB66BF200E57EFA /* RxGesture in Frameworks */, + 05C1D62C2DB53A8200508FFD /* DomainInterface.framework in Frameworks */, + 05125B982DB626E3001342A2 /* ReactorKit in Frameworks */, + 05BDD5CF2DB6770300C1E192 /* Lottie in Frameworks */, + 08B2A35B2DB66B5A00E57EFA /* FloatingPanel in Frameworks */, + 08B2A3612DB66BAB00E57EFA /* Then in Frameworks */, + 0522C1E12DB67C8300B141FF /* RxSwift in Frameworks */, + 05C1D62E2DB53A8200508FFD /* Infrastructure.framework in Frameworks */, + 05125BA12DB6275C001342A2 /* PanModal in Frameworks */, + 05EC93CF2DB64C6F00771CB3 /* KakaoSDKAuth in Frameworks */, + 08B2A3642DB66BBC00E57EFA /* Tabman in Frameworks */, + 05EC93D32DB6536200771CB3 /* RxCocoa in Frameworks */, + 08B2A35E2DB66B8600E57EFA /* RxDataSources in Frameworks */, + 05EC93D12DB64C6F00771CB3 /* KakaoSDKUser in Frameworks */, + 08B2A3582DB66B4100E57EFA /* RxKeyboard in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 058CC8FA2DB537960084221A = { + isa = PBXGroup; + children = ( + 058CC9062DB537960084221A /* Presentation */, + 05C1D6292DB53A8200508FFD /* Frameworks */, + 058CC9052DB537960084221A /* Products */, + ); + sourceTree = ""; + }; + 058CC9052DB537960084221A /* Products */ = { + isa = PBXGroup; + children = ( + 058CC9042DB537960084221A /* Presentation.framework */, + ); + name = Products; + sourceTree = ""; + }; + 05C1D6292DB53A8200508FFD /* Frameworks */ = { + isa = PBXGroup; + children = ( + 05C1D62A2DB53A8200508FFD /* DomainInterface.framework */, + 05C1D62B2DB53A8200508FFD /* Infrastructure.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 058CC8FF2DB537960084221A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 058CC9032DB537960084221A /* Presentation */ = { + isa = PBXNativeTarget; + buildConfigurationList = 058CC90B2DB537960084221A /* Build configuration list for PBXNativeTarget "Presentation" */; + buildPhases = ( + 058CC8FF2DB537960084221A /* Headers */, + 058CC9002DB537960084221A /* Sources */, + 058CC9012DB537960084221A /* Frameworks */, + 058CC9022DB537960084221A /* Resources */, + 05BDD5C22DB6744000C1E192 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 058CC9062DB537960084221A /* Presentation */, + ); + name = Presentation; + packageProductDependencies = ( + 05125B972DB626E3001342A2 /* ReactorKit */, + 05125BA02DB6275C001342A2 /* PanModal */, + 05EC93CE2DB64C6F00771CB3 /* KakaoSDKAuth */, + 05EC93D02DB64C6F00771CB3 /* KakaoSDKUser */, + 05EC93D22DB6536200771CB3 /* RxCocoa */, + 08B2A3572DB66B4100E57EFA /* RxKeyboard */, + 08B2A35A2DB66B5A00E57EFA /* FloatingPanel */, + 08B2A35D2DB66B8600E57EFA /* RxDataSources */, + 08B2A3602DB66BAB00E57EFA /* Then */, + 08B2A3632DB66BBC00E57EFA /* Tabman */, + 08B2A3662DB66BD400E57EFA /* Pageboy */, + 08B2A3692DB66BF200E57EFA /* RxGesture */, + 05BDD5CB2DB6756500C1E192 /* SnapKit */, + 05BDD5CE2DB6770300C1E192 /* Lottie */, + 0522C1E02DB67C8300B141FF /* RxSwift */, + ); + productName = Presentation; + productReference = 058CC9042DB537960084221A /* Presentation.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 058CC8FB2DB537960084221A /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1630; + LastUpgradeCheck = 1630; + TargetAttributes = { + 058CC9032DB537960084221A = { + CreatedOnToolsVersion = 16.3; + }; + }; + }; + buildConfigurationList = 058CC8FE2DB537960084221A /* Build configuration list for PBXProject "Presentation" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 058CC8FA2DB537960084221A; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 05125B932DB62295001342A2 /* XCRemoteSwiftPackageReference "RxSwift" */, + 05125B962DB626E3001342A2 /* XCRemoteSwiftPackageReference "ReactorKit" */, + 05125B992DB626ED001342A2 /* XCRemoteSwiftPackageReference "SnapKit" */, + 05125B9F2DB6275C001342A2 /* XCRemoteSwiftPackageReference "PanModal" */, + 05EC93CD2DB64C6F00771CB3 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, + 08B2A3562DB66B4100E57EFA /* XCRemoteSwiftPackageReference "RxKeyboard" */, + 08B2A3592DB66B5A00E57EFA /* XCRemoteSwiftPackageReference "FloatingPanel" */, + 08B2A35C2DB66B8600E57EFA /* XCRemoteSwiftPackageReference "RxDataSources" */, + 08B2A35F2DB66BAB00E57EFA /* XCRemoteSwiftPackageReference "Then" */, + 08B2A3622DB66BBC00E57EFA /* XCRemoteSwiftPackageReference "Tabman" */, + 08B2A3652DB66BD400E57EFA /* XCRemoteSwiftPackageReference "Pageboy" */, + 08B2A3682DB66BF200E57EFA /* XCRemoteSwiftPackageReference "RxGesture" */, + 05BDD5CD2DB6770300C1E192 /* XCRemoteSwiftPackageReference "lottie-ios" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 058CC9052DB537960084221A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 058CC9032DB537960084221A /* Presentation */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 058CC9022DB537960084221A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 058CC9002DB537960084221A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 058CC9092DB537960084221A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 058CC90A2DB537960084221A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 058CC90C2DB537960084221A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.Presentation; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 058CC90D2DB537960084221A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.poppoolIOS.poppool.Presentation; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 058CC8FE2DB537960084221A /* Build configuration list for PBXProject "Presentation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 058CC9092DB537960084221A /* Debug */, + 058CC90A2DB537960084221A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 058CC90B2DB537960084221A /* Build configuration list for PBXNativeTarget "Presentation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 058CC90C2DB537960084221A /* Debug */, + 058CC90D2DB537960084221A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 05125B932DB62295001342A2 /* XCRemoteSwiftPackageReference "RxSwift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ReactiveX/RxSwift"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 6.9.0; + }; + }; + 05125B962DB626E3001342A2 /* XCRemoteSwiftPackageReference "ReactorKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ReactorKit/ReactorKit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.2.0; + }; + }; + 05125B992DB626ED001342A2 /* XCRemoteSwiftPackageReference "SnapKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SnapKit/SnapKit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.7.1; + }; + }; + 05125B9F2DB6275C001342A2 /* XCRemoteSwiftPackageReference "PanModal" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/slackhq/PanModal"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.2.7; + }; + }; + 05BDD5CD2DB6770300C1E192 /* XCRemoteSwiftPackageReference "lottie-ios" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/airbnb/lottie-ios"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.5.1; + }; + }; + 05EC93CD2DB64C6F00771CB3 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kakao/kakao-ios-sdk"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.24.0; + }; + }; + 08B2A3562DB66B4100E57EFA /* XCRemoteSwiftPackageReference "RxKeyboard" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/RxSwiftCommunity/RxKeyboard"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.0.1; + }; + }; + 08B2A3592DB66B5A00E57EFA /* XCRemoteSwiftPackageReference "FloatingPanel" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/scenee/FloatingPanel"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.8.7; + }; + }; + 08B2A35C2DB66B8600E57EFA /* XCRemoteSwiftPackageReference "RxDataSources" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/RxSwiftCommunity/RxDataSources"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.0.2; + }; + }; + 08B2A35F2DB66BAB00E57EFA /* XCRemoteSwiftPackageReference "Then" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/devxoul/Then"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; + }; + }; + 08B2A3622DB66BBC00E57EFA /* XCRemoteSwiftPackageReference "Tabman" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/uias/Tabman"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.2.0; + }; + }; + 08B2A3652DB66BD400E57EFA /* XCRemoteSwiftPackageReference "Pageboy" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/uias/Pageboy"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.2.0; + }; + }; + 08B2A3682DB66BF200E57EFA /* XCRemoteSwiftPackageReference "RxGesture" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/RxSwiftCommunity/RxGesture"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.0.4; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 05125B972DB626E3001342A2 /* ReactorKit */ = { + isa = XCSwiftPackageProductDependency; + package = 05125B962DB626E3001342A2 /* XCRemoteSwiftPackageReference "ReactorKit" */; + productName = ReactorKit; + }; + 05125BA02DB6275C001342A2 /* PanModal */ = { + isa = XCSwiftPackageProductDependency; + package = 05125B9F2DB6275C001342A2 /* XCRemoteSwiftPackageReference "PanModal" */; + productName = PanModal; + }; + 0522C1E02DB67C8300B141FF /* RxSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 05125B932DB62295001342A2 /* XCRemoteSwiftPackageReference "RxSwift" */; + productName = RxSwift; + }; + 05BDD5CB2DB6756500C1E192 /* SnapKit */ = { + isa = XCSwiftPackageProductDependency; + package = 05125B992DB626ED001342A2 /* XCRemoteSwiftPackageReference "SnapKit" */; + productName = SnapKit; + }; + 05BDD5CE2DB6770300C1E192 /* Lottie */ = { + isa = XCSwiftPackageProductDependency; + package = 05BDD5CD2DB6770300C1E192 /* XCRemoteSwiftPackageReference "lottie-ios" */; + productName = Lottie; + }; + 05EC93CE2DB64C6F00771CB3 /* KakaoSDKAuth */ = { + isa = XCSwiftPackageProductDependency; + package = 05EC93CD2DB64C6F00771CB3 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; + productName = KakaoSDKAuth; + }; + 05EC93D02DB64C6F00771CB3 /* KakaoSDKUser */ = { + isa = XCSwiftPackageProductDependency; + package = 05EC93CD2DB64C6F00771CB3 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; + productName = KakaoSDKUser; + }; + 05EC93D22DB6536200771CB3 /* RxCocoa */ = { + isa = XCSwiftPackageProductDependency; + package = 05125B932DB62295001342A2 /* XCRemoteSwiftPackageReference "RxSwift" */; + productName = RxCocoa; + }; + 08B2A3572DB66B4100E57EFA /* RxKeyboard */ = { + isa = XCSwiftPackageProductDependency; + package = 08B2A3562DB66B4100E57EFA /* XCRemoteSwiftPackageReference "RxKeyboard" */; + productName = RxKeyboard; + }; + 08B2A35A2DB66B5A00E57EFA /* FloatingPanel */ = { + isa = XCSwiftPackageProductDependency; + package = 08B2A3592DB66B5A00E57EFA /* XCRemoteSwiftPackageReference "FloatingPanel" */; + productName = FloatingPanel; + }; + 08B2A35D2DB66B8600E57EFA /* RxDataSources */ = { + isa = XCSwiftPackageProductDependency; + package = 08B2A35C2DB66B8600E57EFA /* XCRemoteSwiftPackageReference "RxDataSources" */; + productName = RxDataSources; + }; + 08B2A3602DB66BAB00E57EFA /* Then */ = { + isa = XCSwiftPackageProductDependency; + package = 08B2A35F2DB66BAB00E57EFA /* XCRemoteSwiftPackageReference "Then" */; + productName = Then; + }; + 08B2A3632DB66BBC00E57EFA /* Tabman */ = { + isa = XCSwiftPackageProductDependency; + package = 08B2A3622DB66BBC00E57EFA /* XCRemoteSwiftPackageReference "Tabman" */; + productName = Tabman; + }; + 08B2A3662DB66BD400E57EFA /* Pageboy */ = { + isa = XCSwiftPackageProductDependency; + package = 08B2A3652DB66BD400E57EFA /* XCRemoteSwiftPackageReference "Pageboy" */; + productName = Pageboy; + }; + 08B2A3692DB66BF200E57EFA /* RxGesture */ = { + isa = XCSwiftPackageProductDependency; + package = 08B2A3682DB66BF200E57EFA /* XCRemoteSwiftPackageReference "RxGesture" */; + productName = RxGesture; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 058CC8FB2DB537960084221A /* Project object */; +} diff --git a/Poppool/Poppool/Presentation/Components/PPButton.swift b/Poppool/PresentationLayer/Presentation/Presentation/Components/PPButton.swift similarity index 100% rename from Poppool/Poppool/Presentation/Components/PPButton.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Components/PPButton.swift diff --git a/Poppool/Poppool/Presentation/Components/PPCancelHeaderView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Components/PPCancelHeaderView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Components/PPCancelHeaderView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Components/PPCancelHeaderView.swift diff --git a/Poppool/Poppool/Presentation/Components/PPLabel.swift b/Poppool/PresentationLayer/Presentation/Presentation/Components/PPLabel.swift similarity index 100% rename from Poppool/Poppool/Presentation/Components/PPLabel.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Components/PPLabel.swift diff --git a/Poppool/Poppool/Presentation/Components/PPPicker.swift b/Poppool/PresentationLayer/Presentation/Presentation/Components/PPPicker.swift similarity index 100% rename from Poppool/Poppool/Presentation/Components/PPPicker.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Components/PPPicker.swift diff --git a/Poppool/Poppool/Presentation/Components/PPProgressIndicator/PPProgressIndicator.swift b/Poppool/PresentationLayer/Presentation/Presentation/Components/PPProgressIndicator/PPProgressIndicator.swift similarity index 100% rename from Poppool/Poppool/Presentation/Components/PPProgressIndicator/PPProgressIndicator.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Components/PPProgressIndicator/PPProgressIndicator.swift diff --git a/Poppool/Poppool/Presentation/Components/PPProgressIndicator/PPProgressView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Components/PPProgressIndicator/PPProgressView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Components/PPProgressIndicator/PPProgressView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Components/PPProgressIndicator/PPProgressView.swift diff --git a/Poppool/Poppool/Presentation/Components/PPReturnHeaderView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Components/PPReturnHeaderView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Components/PPReturnHeaderView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Components/PPReturnHeaderView.swift diff --git a/Poppool/Poppool/Presentation/Components/PPSegmentedControl.swift b/Poppool/PresentationLayer/Presentation/Presentation/Components/PPSegmentedControl.swift similarity index 100% rename from Poppool/Poppool/Presentation/Components/PPSegmentedControl.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Components/PPSegmentedControl.swift diff --git a/Poppool/Poppool/Presentation/Extension/UIApplication+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIApplication+.swift similarity index 100% rename from Poppool/Poppool/Presentation/Extension/UIApplication+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIApplication+.swift diff --git a/Poppool/Poppool/Presentation/Extension/UICollectionReusableView+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UICollectionReusableView+.swift similarity index 100% rename from Poppool/Poppool/Presentation/Extension/UICollectionReusableView+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UICollectionReusableView+.swift diff --git a/Poppool/Poppool/Presentation/Extension/UICollectionViewCell+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UICollectionViewCell+.swift similarity index 100% rename from Poppool/Poppool/Presentation/Extension/UICollectionViewCell+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UICollectionViewCell+.swift diff --git a/Poppool/Poppool/Presentation/Extension/UIColor+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIColor+.swift similarity index 99% rename from Poppool/Poppool/Presentation/Extension/UIColor+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIColor+.swift index 1ea48e23..72662faf 100644 --- a/Poppool/Poppool/Presentation/Extension/UIColor+.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIColor+.swift @@ -7,7 +7,7 @@ import UIKit -extension UIColor { +public extension UIColor { // 무채색 컬러 static let g50 = UIColor(hexCode: "F2F5F7") diff --git a/Poppool/Poppool/Presentation/Extension/UIFont+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIFont+.swift similarity index 94% rename from Poppool/Poppool/Presentation/Extension/UIFont+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIFont+.swift index 75bdb25b..3720eb67 100644 --- a/Poppool/Poppool/Presentation/Extension/UIFont+.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIFont+.swift @@ -1,7 +1,8 @@ import Foundation + import UIKit -extension UIFont { +public extension UIFont { static func korFont(style: FontStyle, size: CGFloat) -> UIFont? { return UIFont(name: "GothicA1\(style.rawValue)", size: size) } diff --git a/Poppool/Poppool/Presentation/Extension/UILabel+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UILabel+.swift similarity index 100% rename from Poppool/Poppool/Presentation/Extension/UILabel+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UILabel+.swift diff --git a/Poppool/Poppool/Presentation/Extension/UINavigationController+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UINavigationController+.swift similarity index 100% rename from Poppool/Poppool/Presentation/Extension/UINavigationController+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UINavigationController+.swift diff --git a/Poppool/Poppool/Presentation/Extension/UITableViewCell+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UITableViewCell+.swift similarity index 100% rename from Poppool/Poppool/Presentation/Extension/UITableViewCell+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UITableViewCell+.swift diff --git a/Poppool/Poppool/Presentation/Extension/UITextField+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UITextField+.swift similarity index 100% rename from Poppool/Poppool/Presentation/Extension/UITextField+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UITextField+.swift diff --git a/Poppool/Poppool/Presentation/Extension/UIView+.swift b/Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIView+.swift similarity index 100% rename from Poppool/Poppool/Presentation/Extension/UIView+.swift rename to Poppool/PresentationLayer/Presentation/Presentation/DesignSystem/Extension/UIView+.swift diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetView.swift similarity index 99% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetView.swift index b23047dc..69a94cbe 100644 --- a/Poppool/Poppool/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetView.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetView.swift @@ -1,8 +1,11 @@ +import UIKit + +import Infrastructure + import ReactorKit import RxCocoa import RxSwift import SnapKit -import UIKit final class AdminBottomSheetView: UIView { diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetViewController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetViewController.swift similarity index 99% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetViewController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetViewController.swift index 4f3a1a7b..89ee0c06 100644 --- a/Poppool/Poppool/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetViewController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminBottomSheet/AdminBottomSheetViewController.swift @@ -1,8 +1,11 @@ +import UIKit + +import Infrastructure + import ReactorKit import RxCocoa import RxSwift import SnapKit -import UIKit final class AdminBottomSheetViewController: BaseViewController, View { diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminReactor.swift similarity index 76% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminReactor.swift index e258e6df..33da143f 100644 --- a/Poppool/Poppool/Presentation/Scene/Admin/AdminReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminReactor.swift @@ -1,3 +1,6 @@ +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -14,27 +17,27 @@ 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? // ✅ 추가 } var initialState: State var disposeBag = DisposeBag() - private let useCase: AdminUseCase + private let adminUseCase: AdminUseCase - init(useCase: AdminUseCase) { - self.useCase = useCase + init(adminUseCase: AdminUseCase) { + self.adminUseCase = adminUseCase self.initialState = State() } @@ -43,21 +46,21 @@ final class AdminReactor: Reactor { case .viewDidLoad, .reloadData: return .concat([ .just(.setIsLoading(true)), - useCase.fetchStoreList(query: nil, page: 0, size: 100) - .map { .setStores($0.popUpStoreList ?? []) }, // ✅ nil 방지 + adminUseCase.fetchStoreList(query: nil, page: 0, size: 100) + .map { .setStores($0) }, // ✅ nil 방지 .just(.setIsLoading(false)) ]) case let .updateSearchQuery(query): return .concat([ .just(.setIsLoading(true)), - useCase.fetchStoreList(query: query, page: 0, size: 100) + adminUseCase.fetchStoreList(query: query, page: 0, size: 100) .do(onNext: { response in Logger.log(message: "조회 성공 - 응답 데이터: \(response)", category: .info) }, onError: { error in Logger.log(message: "조회 실패 - 에러: \(error.localizedDescription)", category: .error) }) - .map { .setStores($0.popUpStoreList ?? []) }, // ✅ nil 방지 + .map { .setStores($0) }, .just(.setIsLoading(false)) ]) diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminRegister/PopUpImagesCollectionView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpImagesCollectionView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminRegister/PopUpImagesCollectionView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpImagesCollectionView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift similarity index 91% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift index e2c6cb67..324f2183 100644 --- a/Poppool/Poppool/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterReactor.swift @@ -1,6 +1,8 @@ +import CoreLocation import UIKit -import CoreLocation +import DomainInterface +import Infrastructure import ReactorKit import RxCocoa @@ -10,15 +12,19 @@ final class PopUpStoreRegisterReactor: Reactor { // MARK: - Properties private let adminUseCase: AdminUseCase - private let presignedService: PreSignedService + private let preSignedUseCase: PreSignedUseCase private let isEditMode: Bool private let editingStoreId: Int64? private var disposeBag = DisposeBag() - init(adminUseCase: AdminUseCase, presignedService: PreSignedService, editingStore: GetAdminPopUpStoreListResponseDTO.PopUpStore? = nil) { + init( + adminUseCase: AdminUseCase, + preSignedUseCase: PreSignedUseCase, + editingStore: AdminStore? = nil + ) { self.adminUseCase = adminUseCase - self.presignedService = presignedService + self.preSignedUseCase = preSignedUseCase self.isEditMode = editingStore != nil self.editingStoreId = editingStore?.id @@ -85,7 +91,7 @@ final class PopUpStoreRegisterReactor: Reactor { case addDeletedImage(id: Int64, path: String) // 기존 스토어 데이터 설정 - case setStoreDetail(GetAdminPopUpStoreDetailResponseDTO) + case setStoreDetail(AdminStoreDetail) case setOriginalImageIds([String: Int64]) // UI 상태 관리 @@ -357,7 +363,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() @@ -516,7 +522,7 @@ final class PopUpStoreRegisterReactor: Reactor { private func deleteImagesFromS3(_ imagePaths: [String]) { guard !imagePaths.isEmpty else { return } - presignedService.tryDelete(targetPaths: .init(objectKeyList: imagePaths)) + preSignedUseCase.tryDelete(objectKeyList: imagePaths) .subscribe( onCompleted: { Logger.log(message: "S3에서 모든 이미지 삭제 성공: \(imagePaths.count)개", category: .info) @@ -615,7 +621,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 +635,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 @@ -644,7 +650,7 @@ final class PopUpStoreRegisterReactor: Reactor { dispatchGroup.enter() - if let imageURL = self.presignedService.fullImageURL(from: imageData.imageUrl) { + if let imageURL = self.preSignedUseCase.fullImageURL(from: imageData.imageUrl) { URLSession.shared.dataTask(with: imageURL) { data, _, error in defer { dispatchGroup.leave() } @@ -718,8 +724,8 @@ final class PopUpStoreRegisterReactor: Reactor { isMain: image.isMain) } - return presignedService.tryUpload(datas: updatedImages.map { - PreSignedService.PresignedURLRequest(filePath: $0.filePath, image: $0.image) + return preSignedUseCase.tryUpload(presignedURLRequest: updatedImages.map { + return (filePath: $0.filePath, image: $0.image) }) .asObservable() // Single을 Observable로 변환 .map { _ in updatedImages.map { $0.filePath } } @@ -742,7 +748,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 +764,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))) } } @@ -798,8 +804,8 @@ final class PopUpStoreRegisterReactor: Reactor { isMain: image.isMain) } - return presignedService.tryUpload(datas: updatedImages.map { - PreSignedService.PresignedURLRequest(filePath: $0.filePath, image: $0.image) + return preSignedUseCase.tryUpload(presignedURLRequest: updatedImages.map { + return (filePath: $0.filePath, image: $0.image) }) .asObservable() .map { _ in updatedImages.map { $0.filePath } } @@ -856,43 +862,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/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift similarity index 98% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift index 15e6855b..6d4523e8 100644 --- a/Poppool/Poppool/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminRegister/PopUpStoreRegisterViewController.swift @@ -2,6 +2,9 @@ import CoreLocation import PhotosUI import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -11,7 +14,6 @@ final class PopUpStoreRegisterViewController: BaseViewController { // MARK: - Properties private var pickerViewController: PHPickerViewController? - private let adminUseCase: AdminUseCase private let nickname: String var completionHandler: (() -> Void)? var disposeBag = DisposeBag() @@ -19,17 +21,18 @@ final class PopUpStoreRegisterViewController: BaseViewController { private var mainView: PopUpRegisterView // MARK: - Initializer - init(nickname: String, adminUseCase: AdminUseCase, editingStore: GetAdminPopUpStoreListResponseDTO.PopUpStore? = nil) { + init( + nickname: String, + editingStore: AdminStore? = nil + ) { self.nickname = nickname - self.adminUseCase = adminUseCase self.mainView = PopUpRegisterView() super.init() - let presignedService = PreSignedService() let reactor = PopUpStoreRegisterReactor( - adminUseCase: adminUseCase, - presignedService: presignedService, + adminUseCase: DIContainer.resolve(AdminUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self), editingStore: editingStore ) diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminStoreCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminStoreCell.swift similarity index 94% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminStoreCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminStoreCell.swift index 5ab3d4c4..2abf1f73 100644 --- a/Poppool/Poppool/Presentation/Scene/Admin/AdminStoreCell.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminStoreCell.swift @@ -1,6 +1,11 @@ +import UIKit + +import DomainInterface +import Infrastructure + import RxSwift import SnapKit -import UIKit + final class AdminStoreCell: UITableViewCell { private let disposeBag = DisposeBag() @@ -75,15 +80,14 @@ final class AdminStoreCell: UITableViewCell { } // MARK: - Configure - func configure(with store: GetAdminPopUpStoreListResponseDTO.PopUpStore) { + func configure(with store: AdminStore) { Logger.log(message: "셀 데이터 바인딩: \(store)", category: .debug) titleLabel.text = store.name categoryLabel.text = store.categoryName statusChip.text = "운영" - // mainImageUrl에서 baseURL 부분 제거 - let imagePath = store.mainImageUrl.replacingOccurrences(of: KeyPath.popPoolS3BaseURL, with: "") + let imagePath = store.mainImageUrl.replacingOccurrences(of: Secrets.popPoolS3BaseURL, with: "") Logger.log(message: "이미지 경로: \(imagePath)", category: .debug) storeImageView.setPPImage(path: imagePath) } diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Admin/AdminViewController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminViewController.swift similarity index 79% rename from Poppool/Poppool/Presentation/Scene/Admin/AdminViewController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminViewController.swift index 5e5474f4..ddf71a45 100644 --- a/Poppool/Poppool/Presentation/Scene/Admin/AdminViewController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/AdminViewController.swift @@ -1,7 +1,11 @@ +import UIKit + +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift -import UIKit final class AdminViewController: BaseViewController, View { @@ -16,7 +20,10 @@ final class AdminViewController: BaseViewController, View { private let adminUseCase: AdminUseCase // MARK: - Init - init(nickname: String, adminUseCase: AdminUseCase = DefaultAdminUseCase(repository: DefaultAdminRepository(provider: ProviderImpl()))) { + init( + nickname: String, + adminUseCase: AdminUseCase + ) { self.nickname = nickname self.adminUseCase = adminUseCase self.mainView = AdminView(frame: .zero) @@ -122,7 +129,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 +157,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 +172,40 @@ 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) + 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,19 +218,19 @@ 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)) Logger.log(message: "삭제할 이미지: \(allImageUrls.count)개", category: .debug) - let imageService = PreSignedService() - imageService.tryDelete(targetPaths: .init(objectKeyList: allImageUrls)) + @Dependency var preSignedUseCase: PreSignedUseCase + preSignedUseCase.tryDelete(objectKeyList: allImageUrls) .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: "삭제되었습니다") }, @@ -245,10 +269,7 @@ final class AdminViewController: BaseViewController, View { mainView.registerButton.rx.tap .subscribe(onNext: { [weak self] _ in guard let self = self else { return } - let registerVC = PopUpStoreRegisterViewController( - nickname: self.nickname, - adminUseCase: self.adminUseCase - ) + let registerVC = PopUpStoreRegisterViewController(nickname: self.nickname) registerVC.completionHandler = { [weak self] in self?.reactor?.action.onNext(.reloadData) @@ -276,8 +297,8 @@ final class AdminViewController: BaseViewController, View { .bind(to: mainView.tableView.rx.items( cellIdentifier: AdminStoreCell.identifier, cellType: AdminStoreCell.self - )) { _, item, cell in - cell.configure(with: item) + )) { _, store, cell in + cell.configure(with: store) } .disposed(by: disposeBag) } diff --git a/Poppool/Poppool/Presentation/Scene/Admin/ImageCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/ImageCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Admin/ImageCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Admin/ImageCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentCheck/CommentCheckController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentCheck/CommentCheckController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentCheck/CommentCheckController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentCheck/CommentCheckController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentCheck/CommentCheckReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentCheck/CommentCheckReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentCheck/CommentCheckReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentCheck/CommentCheckReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentCheck/CommentCheckView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentCheck/CommentCheckView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentCheck/CommentCheckView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentCheck/CommentCheckView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/CommentDetailController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/CommentDetailController.swift similarity index 98% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/CommentDetailController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/CommentDetailController.swift index 49d47a25..6c8b4cbc 100644 --- a/Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/CommentDetailController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/CommentDetailController.swift @@ -1,10 +1,3 @@ -// -// CommentDetailController.swift -// Poppool -// -// Created by SeoJunYoung on 12/25/24. -// - import UIKit import PanModal @@ -67,7 +60,6 @@ private extension CommentDetailController { // MARK: - Methods extension CommentDetailController { func bind(reactor: Reactor) { - rx.viewWillAppear .map { Reactor.Action.viewWillAppear } .bind(to: reactor.action) diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/CommentDetailReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/CommentDetailReactor.swift similarity index 93% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/CommentDetailReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/CommentDetailReactor.swift index 8b7d28f3..510d5841 100644 --- a/Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/CommentDetailReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/CommentDetailReactor.swift @@ -1,12 +1,8 @@ -// -// CommentDetailReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/25/24. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -36,7 +32,7 @@ final class CommentDetailReactor: Reactor { var initialState: State var disposeBag = DisposeBag() - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -58,8 +54,12 @@ final class CommentDetailReactor: Reactor { private let spacing16Section = SpacingSection(inputDataList: [.init(spacing: 16)]) // MARK: - init - init(comment: DetailCommentSection.CellType.Input) { + init( + comment: DetailCommentSection.CellType.Input, + userAPIUseCase: UserAPIUseCase + ) { self.initialState = State(commentData: comment) + self.userAPIUseCase = userAPIUseCase } // MARK: - Reactor Methods diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/View/CommentDetailContentSection/CommentDetailContentSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/View/CommentDetailContentSection/CommentDetailContentSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/View/CommentDetailContentSection/CommentDetailContentSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/View/CommentDetailContentSection/CommentDetailContentSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/View/CommentDetailContentSection/CommentDetailContentSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/View/CommentDetailContentSection/CommentDetailContentSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/View/CommentDetailContentSection/CommentDetailContentSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/View/CommentDetailContentSection/CommentDetailContentSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/View/CommentDetailImageSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/View/CommentDetailImageSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/View/CommentDetailImageSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/View/CommentDetailImageSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/View/CommentDetailView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/View/CommentDetailView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentDetail/View/CommentDetailView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentDetail/View/CommentDetailView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentMyMenu/CommentMyMenuView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentInfoMenu/CommentUserInfo/CommentUserInfoView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentList/CommentListController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/CommentListController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentList/CommentListController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/CommentListController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentList/CommentListReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/CommentListReactor.swift similarity index 90% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentList/CommentListReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/CommentListReactor.swift index 3823d183..e0b71792 100644 --- a/Poppool/Poppool/Presentation/Scene/Comment/CommentList/CommentListReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/CommentListReactor.swift @@ -1,12 +1,8 @@ -// -// CommentListReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/25/24. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -48,10 +44,10 @@ final class CommentListReactor: Reactor { private var page: Int32 = 0 private var appendDataIsEmpty: Bool = false - private var imageService = PreSignedService() - private let popUpAPIUseCase = PopUpAPIUseCaseImpl(repository: PopUpAPIRepositoryImpl(provider: ProviderImpl())) - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) - private let commentAPIUseCase = CommentAPIUseCaseImpl(repository: CommentAPIRepository(provider: ProviderImpl())) + private let preSignedUseCase: PreSignedUseCase + private let popUpAPIUseCase: PopUpAPIUseCase + private let userAPIUseCase: UserAPIUseCase + private let commentAPIUseCase: CommentAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -73,10 +69,21 @@ final class CommentListReactor: Reactor { private let spacing24Section = SpacingSection(inputDataList: [.init(spacing: 24)]) private let spacing28Section = SpacingSection(inputDataList: [.init(spacing: 28)]) // MARK: - init - init(popUpID: Int64, popUpName: String?) { + init( + popUpID: Int64, + popUpName: String?, + userAPIUseCase: UserAPIUseCase, + popUpAPIUseCase: PopUpAPIUseCase, + commentAPIUseCase: CommentAPIUseCase, + preSignedUseCase: PreSignedUseCase + ) { self.initialState = State() self.popUpID = popUpID self.popUpName = popUpName + self.userAPIUseCase = userAPIUseCase + self.popUpAPIUseCase = popUpAPIUseCase + self.commentAPIUseCase = commentAPIUseCase + self.preSignedUseCase = preSignedUseCase } // MARK: - Reactor Methods @@ -188,7 +195,10 @@ final class CommentListReactor: Reactor { case .presentDetailScene(let controller, let row): let comment = commentSection.inputDataList[row] let nextController = CommentDetailController() - nextController.reactor = CommentDetailReactor(comment: comment) + nextController.reactor = CommentDetailReactor( + comment: comment, + userAPIUseCase: userAPIUseCase + ) nextController.mainView.likeButton.rx.tap .map { Action.detailSceneLikeButtonTapped(row: row)} .bind(to: action) @@ -233,7 +243,10 @@ final class CommentListReactor: Reactor { case .normal: owner.dismiss(animated: true) { [weak controller] in let otherUserCommentController = OtherUserCommentController() - otherUserCommentController.reactor = OtherUserCommentReactor(commenterID: comment.creator) + otherUserCommentController.reactor = OtherUserCommentReactor( + commenterID: comment.creator, + userAPIUseCase: self.userAPIUseCase + ) controller?.navigationController?.pushViewController(otherUserCommentController, animated: true) } case .block: @@ -272,7 +285,6 @@ final class CommentListReactor: Reactor { func showMyCommentMenu(controller: BaseViewController, comment: DetailCommentSection.CellType.Input) { let nextController = CommentMyMenuController() nextController.reactor = CommentMyMenuReactor(nickName: comment.nickName) - imageService = PreSignedService() controller.presentPanModal(nextController) nextController.reactor?.state @@ -289,16 +301,22 @@ final class CommentListReactor: Reactor { .disposed(by: self.disposeBag) let commentList = comment.imageList.compactMap { $0 } - self.imageService.tryDelete(targetPaths: .init(objectKeyList: commentList)) - .subscribe { + self.preSignedUseCase.tryDelete(objectKeyList: commentList) + .subscribe(onDisposed: { Logger.log(message: "S3 Image Delete 완료", category: .info) - } + }) .disposed(by: self.disposeBag) case .edit: owner.dismiss(animated: true) { [weak controller] in guard let popUpName = self.popUpName else { return } let editController = NormalCommentEditController() - editController.reactor = NormalCommentEditReactor(popUpID: self.popUpID, popUpName: popUpName, comment: comment) + editController.reactor = NormalCommentEditReactor( + popUpID: self.popUpID, + popUpName: popUpName, + comment: comment, + commentAPIUseCase: self.commentAPIUseCase, + preSignedUseCase: self.preSignedUseCase + ) controller?.navigationController?.pushViewController(editController, animated: true) } case .cancel: diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentList/View/CommentListTitleSection/CommentListTitleSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/View/CommentListTitleSection/CommentListTitleSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentList/View/CommentListTitleSection/CommentListTitleSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/View/CommentListTitleSection/CommentListTitleSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentList/View/CommentListTitleSection/CommentListTitleSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/View/CommentListTitleSection/CommentListTitleSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentList/View/CommentListTitleSection/CommentListTitleSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/View/CommentListTitleSection/CommentListTitleSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentList/View/CommentListView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/View/CommentListView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentList/View/CommentListView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentList/View/CommentListView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentSelected/CommentSelectedController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentSelected/CommentSelectedController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentSelected/CommentSelectedController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentSelected/CommentSelectedController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentSelected/CommentSelectedReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentSelected/CommentSelectedReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentSelected/CommentSelectedReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentSelected/CommentSelectedReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentSelected/CommentSelectedView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentSelected/CommentSelectedView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentSelected/CommentSelectedView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentSelected/CommentSelectedView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/CommentUserBlock/CommentUserBlockView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddReactor.swift similarity index 85% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddReactor.swift index 63b51884..b68f78ed 100644 --- a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/NormalCommentAddReactor.swift @@ -1,13 +1,9 @@ -// -// NormalCommentAddReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/14/24. -// - import PhotosUI import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -47,8 +43,8 @@ final class NormalCommentAddReactor: Reactor { private var popUpID: Int64 private var popUpName: String - private let commentAPIUseCase = CommentAPIUseCaseImpl(repository: CommentAPIRepository(provider: ProviderImpl())) - private let imageService = PreSignedService() + private let commentAPIUseCase: CommentAPIUseCase + private let preSignedUseCase: PreSignedUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -74,10 +70,17 @@ final class NormalCommentAddReactor: Reactor { private let spacing16Section = SpacingSection(inputDataList: [.init(spacing: 16)]) private let spacing32Section = SpacingSection(inputDataList: [.init(spacing: 32)]) // MARK: - init - init(popUpID: Int64, popUpName: String) { + init( + popUpID: Int64, + popUpName: String, + commentAPIUseCase: CommentAPIUseCase, + preSignedUseCase: PreSignedUseCase + ) { self.initialState = State() self.popUpID = popUpID self.popUpName = popUpName + self.commentAPIUseCase = commentAPIUseCase + self.preSignedUseCase = preSignedUseCase } // MARK: - Reactor Methods @@ -155,20 +158,25 @@ final class NormalCommentAddReactor: Reactor { let uuid = UUID().uuidString let pathList = images.map { "PopUpComment/\(popUpName)/\(uuid)/\($0.offset).jpg" } - imageService.tryUpload(datas: images.map { .init(filePath: "PopUpComment/\(popUpName)/\(uuid)/\($0.offset).jpg", image: $0.element)}) - .subscribe(onSuccess: { [weak self] _ in - guard let self = self else { return } - self.commentAPIUseCase.postCommentAdd(popUpStoreId: self.popUpID, content: newState.text, commentType: "NORMAL", imageUrlList: pathList) - .subscribe(onDisposed: { - controller.navigationController?.popViewController(animated: true) { - DispatchQueue.main.asyncAfter(deadline: .now()) { - ToastMaker.createToast(message: "코멘트 작성을 완료했어요") - } + preSignedUseCase.tryUpload(presignedURLRequest: images.map { + return ( + filePath: "PopUpComment/\(popUpName)/\(uuid)/\($0.offset).jpg", + image: $0.element + ) + }) + .subscribe(onSuccess: { [weak self] _ in + guard let self = self else { return } + self.commentAPIUseCase.postCommentAdd(popUpStoreId: self.popUpID, content: newState.text, commentType: "NORMAL", imageUrlList: pathList) + .subscribe(onDisposed: { + controller.navigationController?.popViewController(animated: true) { + DispatchQueue.main.asyncAfter(deadline: .now()) { + ToastMaker.createToast(message: "코멘트 작성을 완료했어요") } - }) - .disposed(by: disposeBag) - }) - .disposed(by: disposeBag) + } + }) + .disposed(by: disposeBag) + }) + .disposed(by: disposeBag) } } diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentDescriptionSection/AddCommentDescriptionSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentDescriptionSection/AddCommentDescriptionSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentDescriptionSection/AddCommentDescriptionSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentDescriptionSection/AddCommentDescriptionSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentDescriptionSection/AddCommentDescriptionSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentDescriptionSection/AddCommentDescriptionSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentDescriptionSection/AddCommentDescriptionSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentDescriptionSection/AddCommentDescriptionSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentImageSection/AddCommentImageSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentImageSection/AddCommentImageSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentImageSection/AddCommentImageSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentImageSection/AddCommentImageSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentImageSection/AddCommentImageSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentImageSection/AddCommentImageSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentImageSection/AddCommentImageSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentImageSection/AddCommentImageSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentSection/AddCommentSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentSection/AddCommentSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentSection/AddCommentSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentSection/AddCommentSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentSection/AddCommentSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentSection/AddCommentSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentSection/AddCommentSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentSection/AddCommentSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentTitleSection/AddCommentTitleSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentTitleSection/AddCommentTitleSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentTitleSection/AddCommentTitleSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentTitleSection/AddCommentTitleSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentTitleSection/AddCommentTitleSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentTitleSection/AddCommentTitleSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentTitleSection/AddCommentTitleSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/AddCommentTitleSection/AddCommentTitleSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/NormalCommentAddView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/NormalCommentAddView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentAdd/View/NormalCommentAddView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentAdd/View/NormalCommentAddView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditReactor.swift similarity index 80% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditReactor.swift index dee4c3cc..1ad07a70 100644 --- a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditReactor.swift @@ -1,13 +1,9 @@ -// -// NormalCommentEditReactor.swift -// Poppool -// -// Created by SeoJunYoung on 2/1/25. -// - import PhotosUI import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -40,6 +36,12 @@ final class NormalCommentEditReactor: Reactor { var isSaving: Bool = false } + struct PutCommentImageData { + var imageId: Int64? + var imageUrl: String? + var actionType: String? + } + // MARK: - properties var initialState: State @@ -48,8 +50,8 @@ final class NormalCommentEditReactor: Reactor { private var popUpName: String private var originComment: DetailCommentSection.CellType.Input - private let commentAPIUseCase = CommentAPIUseCaseImpl(repository: CommentAPIRepository(provider: ProviderImpl())) - private let imageService = PreSignedService() + private let commentAPIUseCase: CommentAPIUseCase + private let preSignedUseCase: PreSignedUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -76,11 +78,19 @@ final class NormalCommentEditReactor: Reactor { private let spacing32Section = SpacingSection(inputDataList: [.init(spacing: 32)]) // MARK: - init - init(popUpID: Int64, popUpName: String, comment: DetailCommentSection.CellType.Input) { + init( + popUpID: Int64, + popUpName: String, + comment: DetailCommentSection.CellType.Input, + commentAPIUseCase: CommentAPIUseCase, + preSignedUseCase: PreSignedUseCase + ) { self.initialState = State(text: comment.comment) self.popUpID = popUpID self.popUpName = popUpName self.originComment = comment + self.commentAPIUseCase = commentAPIUseCase + self.preSignedUseCase = preSignedUseCase let imageList = zip(comment.imageList, comment.imageIDList) imageSection.inputDataList.append(contentsOf: imageList.map({ url, id in .init(image: nil, isFirstCell: false, isEditCase: true, imageURL: url, imageID: id) @@ -163,41 +173,43 @@ final class NormalCommentEditReactor: Reactor { } } - var convertAddImages: [PutCommentImageDataRequestDTO] = addImages.map { .init(imageId: nil, imageUrl: pathList[$0.offset], actionType: "ADD")} - var convertKeepImages: [PutCommentImageDataRequestDTO] = keepImages.map { .init(imageId: nil, imageUrl: $0, actionType: "KEEP")} - var convertDeleteImages: [PutCommentImageDataRequestDTO] = deleteImages.map { .init(imageId: $0.1, imageUrl: $0.0, actionType: "DELETE")} + var convertAddImages: [PutCommentImageData] = addImages.map { .init(imageId: nil, imageUrl: pathList[$0.offset], actionType: "ADD")} + var convertKeepImages: [PutCommentImageData] = keepImages.map { .init(imageId: nil, imageUrl: $0, actionType: "KEEP")} + var convertDeleteImages: [PutCommentImageData] = deleteImages.map { .init(imageId: $0.1, imageUrl: $0.0, actionType: "DELETE")} if !addImages.isEmpty { - imageService.tryUpload(datas: addImages.map { .init(filePath: pathList[$0.offset], image: $0.element)}) - .subscribe { [weak self] _ in + preSignedUseCase.tryUpload(presignedURLRequest: addImages.map { + return (filePath: pathList[$0.offset], image: $0.element) + }) + .subscribe { [weak self] _ in + guard let self = self else { return } + self.commentAPIUseCase.editComment( + popUpStoreId: self.popUpID, + commentId: self.originComment.commentID, + content: newState.text, + imageUrlList: (convertAddImages + convertKeepImages + convertDeleteImages).map { $0.imageUrl } + ) + .subscribe(onDisposed: { [weak self, weak controller] in guard let self = self else { return } - self.commentAPIUseCase.editComment( - popUpStoreId: self.popUpID, - commentId: self.originComment.commentID, - content: newState.text, - imageUrlList: convertAddImages + convertKeepImages + convertDeleteImages - ) - .subscribe { [weak self, weak controller] in - guard let self = self else { return } - self.imageService.tryDelete(targetPaths: .init(objectKeyList: deleteImages.compactMap { $0.0 })) - .subscribe { - controller?.navigationController?.popViewController(animated: true) - } - .disposed(by: self.disposeBag) - } - .disposed(by: self.disposeBag) - } - .disposed(by: disposeBag) + self.preSignedUseCase.tryDelete(objectKeyList: deleteImages.compactMap { $0.0 }) + .subscribe(onDisposed: { + controller?.navigationController?.popViewController(animated: true) + }) + .disposed(by: self.disposeBag) + }) + .disposed(by: self.disposeBag) + } + .disposed(by: disposeBag) } else { commentAPIUseCase.editComment( popUpStoreId: self.popUpID, commentId: self.originComment.commentID, content: newState.text, - imageUrlList: convertAddImages + convertKeepImages + convertDeleteImages + imageUrlList: (convertAddImages + convertKeepImages + convertDeleteImages).map { $0.imageUrl } ) .subscribe { [weak self, weak controller] in guard let self = self else { return } - self.imageService.tryDelete(targetPaths: .init(objectKeyList: deleteImages.compactMap { $0.0 })) + self.preSignedUseCase.tryDelete(objectKeyList: deleteImages.compactMap { $0.0 }) .subscribe { controller?.navigationController?.popViewController(animated: true) } diff --git a/Poppool/Poppool/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/NormalCommentEdit/NormalCommentEditView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentReactor.swift similarity index 86% rename from Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentReactor.swift index bc2de562..8d8506db 100644 --- a/Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/OtherUserCommentReactor.swift @@ -1,12 +1,8 @@ -// -// OtherUserCommentReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/27/24. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -38,7 +34,7 @@ final class OtherUserCommentReactor: Reactor { var disposeBag = DisposeBag() private let commenterID: String? - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -58,9 +54,13 @@ final class OtherUserCommentReactor: Reactor { private var popUpSection = MyCommentedPopUpGridSection(inputDataList: []) // MARK: - init - init(commenterID: String?) { + init( + commenterID: String?, + userAPIUseCase: UserAPIUseCase + ) { self.initialState = State() self.commenterID = commenterID + self.userAPIUseCase = userAPIUseCase } // MARK: - Reactor Methods @@ -103,7 +103,13 @@ final class OtherUserCommentReactor: Reactor { case .moveToDetailScene(let controller, let row): let id = popUpSection.inputDataList[row].popUpID let nextController = DetailController() - nextController.reactor = DetailReactor(popUpID: id) + nextController.reactor = DetailReactor( + popUpID: id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) } return newState diff --git a/Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentSection/OtherUserCommentSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentSection/OtherUserCommentSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentSection/OtherUserCommentSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentSection/OtherUserCommentSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentSection/OtherUserCommentSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentSection/OtherUserCommentSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentSection/OtherUserCommentSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentSection/OtherUserCommentSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Comment/OtherUserComment/View/OtherUserCommentView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/DetailController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/DetailController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/DetailController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/DetailController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/DetailReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/DetailReactor.swift similarity index 89% rename from Poppool/Poppool/Presentation/Scene/Detail/DetailReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/DetailReactor.swift index 964cdb5f..f54b4f78 100644 --- a/Poppool/Poppool/Presentation/Scene/Detail/DetailReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/DetailReactor.swift @@ -1,5 +1,8 @@ import UIKit +import DomainInterface +import Infrastructure + import LinkPresentation import ReactorKit import RxCocoa @@ -57,10 +60,10 @@ final class DetailReactor: Reactor { private var isLogin: Bool = false private var isFirstRequest: Bool = true - private var imageService = PreSignedService() - private let popUpAPIUseCase = PopUpAPIUseCaseImpl(repository: PopUpAPIRepositoryImpl(provider: ProviderImpl())) - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) - private let commentAPIUseCase = CommentAPIUseCaseImpl(repository: CommentAPIRepository(provider: ProviderImpl())) + private var preSignedUseCase: PreSignedUseCase + private let popUpAPIUseCase: PopUpAPIUseCase + private let userAPIUseCase: UserAPIUseCase + private let commentAPIUseCase: CommentAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in guard let self = self else { @@ -94,8 +97,18 @@ final class DetailReactor: Reactor { private var spacing16Section = SpacingSection(inputDataList: [.init(spacing: 16)]) private var spacing16GraySection = SpacingSection(inputDataList: [.init(spacing: 16, backgroundColor: .g50)]) // MARK: - init - init(popUpID: Int64) { + init( + popUpID: Int64, + userAPIUseCase: UserAPIUseCase, + popUpAPIUseCase: PopUpAPIUseCase, + commentAPIUseCase: CommentAPIUseCase, + preSignedUseCase: PreSignedUseCase + ) { self.popUpID = popUpID + self.userAPIUseCase = userAPIUseCase + self.popUpAPIUseCase = popUpAPIUseCase + self.commentAPIUseCase = commentAPIUseCase + self.preSignedUseCase = preSignedUseCase self.initialState = State() } @@ -145,11 +158,18 @@ final class DetailReactor: Reactor { case .moveToCommentTypeSelectedScene(let controller): if isLogin { let commentController = NormalCommentAddController() - commentController.reactor = NormalCommentAddReactor(popUpID: popUpID, popUpName: popUpName ?? "") + commentController.reactor = NormalCommentAddReactor( + popUpID: popUpID, + popUpName: popUpName ?? "", + commentAPIUseCase: commentAPIUseCase, + preSignedUseCase: preSignedUseCase + ) controller.navigationController?.pushViewController(commentController, animated: true) } else { let loginController = SubLoginController() - loginController.reactor = SubLoginReactor() + loginController.reactor = SubLoginReactor( + authAPIUseCase: DIContainer.resolve(AuthAPIUseCase.self) + ) let nextController = UINavigationController(rootViewController: loginController) nextController.modalPresentationStyle = .fullScreen controller.present(nextController, animated: true) @@ -161,7 +181,10 @@ final class DetailReactor: Reactor { ToastMaker.createToast(message: "주소를 복사했어요") case .moveToAddressScene(let controller): let mapGuideController = MapGuideViewController(popUpStoreId: popUpID) - let reactor = MapGuideReactor(popUpStoreId: popUpID) + let reactor = MapGuideReactor( + popUpStoreId: popUpID, + mapDirectionRepository: DIContainer.resolve(MapDirectionRepository.self) + ) mapGuideController.reactor = reactor mapGuideController.modalPresentationStyle = .overCurrentContext @@ -171,11 +194,20 @@ final class DetailReactor: Reactor { case .moveToCommentTotalScene(let controller): if isLogin { let nextController = CommentListController() - nextController.reactor = CommentListReactor(popUpID: popUpID, popUpName: popUpName) + nextController.reactor = CommentListReactor( + popUpID: popUpID, + popUpName: popUpName, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: popUpAPIUseCase, + commentAPIUseCase: commentAPIUseCase, + preSignedUseCase: preSignedUseCase + ) controller.navigationController?.pushViewController(nextController, animated: true) } else { let loginController = SubLoginController() - loginController.reactor = SubLoginReactor() + loginController.reactor = SubLoginReactor( + authAPIUseCase: DIContainer.resolve(AuthAPIUseCase.self) + ) let nextController = UINavigationController(rootViewController: loginController) nextController.modalPresentationStyle = .fullScreen controller.present(nextController, animated: true) @@ -190,18 +222,29 @@ final class DetailReactor: Reactor { case .showCommentDetailScene(let controller, let indexPath): let comment = commentSection.inputDataList[indexPath.row] let nextController = CommentDetailController() - nextController.reactor = CommentDetailReactor(comment: comment) + nextController.reactor = CommentDetailReactor( + comment: comment, + userAPIUseCase: userAPIUseCase + ) controller.presentPanModal(nextController) case .moveToDetailScene(let controller, let indexPath): let id = similarSection.inputDataList[indexPath.row].id let nextController = DetailController() - nextController.reactor = DetailReactor(popUpID: id) + nextController.reactor = DetailReactor( + popUpID: id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: popUpAPIUseCase, + commentAPIUseCase: commentAPIUseCase, + preSignedUseCase: preSignedUseCase + ) controller.navigationController?.pushViewController(nextController, animated: true) case .moveToRecentScene(let controller): controller.navigationController?.popViewController(animated: true) case .moveToLoginScene(let controller): let loginController = SubLoginController() - loginController.reactor = SubLoginReactor() + loginController.reactor = SubLoginReactor( + authAPIUseCase: DIContainer.resolve(AuthAPIUseCase.self) + ) let nextController = UINavigationController(rootViewController: loginController) nextController.modalPresentationStyle = .fullScreen controller.present(nextController, animated: true) @@ -372,7 +415,7 @@ extension DetailReactor { func showSharedBoard(controller: BaseViewController) { let storeName = titleSection.inputDataList.first?.title ?? "" - let imagePath = KeyPath.popPoolS3BaseURL + (imageBannerSection.inputDataList.first?.imagePaths.first ?? "") + let imagePath = Secrets.popPoolS3BaseURL + (imageBannerSection.inputDataList.first?.imagePaths.first ?? "") // URL 인코딩 후 생성 guard let encodedPath = imagePath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), @@ -436,7 +479,10 @@ extension DetailReactor { case .normal: owner.dismiss(animated: true) { [weak controller] in let otherUserCommentController = OtherUserCommentController() - otherUserCommentController.reactor = OtherUserCommentReactor(commenterID: comment.creator) + otherUserCommentController.reactor = OtherUserCommentReactor( + commenterID: comment.creator, + userAPIUseCase: self.userAPIUseCase + ) controller?.navigationController?.pushViewController(otherUserCommentController, animated: true) } case .block: @@ -475,7 +521,6 @@ extension DetailReactor { func showMyCommentMenu(controller: BaseViewController, indexPath: IndexPath, comment: DetailCommentSection.CellType.Input) { let nextController = CommentMyMenuController() nextController.reactor = CommentMyMenuReactor(nickName: comment.nickName) - imageService = PreSignedService() controller.presentPanModal(nextController) nextController.reactor?.state @@ -492,17 +537,23 @@ extension DetailReactor { .disposed(by: self.disposeBag) let commentList = comment.imageList.compactMap { $0 } - self.imageService.tryDelete(targetPaths: .init(objectKeyList: commentList)) - .subscribe { + self.preSignedUseCase.tryDelete(objectKeyList: commentList) + .subscribe(onDisposed: { Logger.log(message: "S3 Image Delete 완료", category: .info) - } + }) .disposed(by: self.disposeBag) case .edit: owner.dismiss(animated: true) { [weak controller] in guard let popUpName = self.popUpName else { return } let editController = NormalCommentEditController() - editController.reactor = NormalCommentEditReactor(popUpID: self.popUpID, popUpName: popUpName, comment: comment) + editController.reactor = NormalCommentEditReactor( + popUpID: self.popUpID, + popUpName: popUpName, + comment: comment, + commentAPIUseCase: self.commentAPIUseCase, + preSignedUseCase: self.preSignedUseCase + ) controller?.navigationController?.pushViewController(editController, animated: true) } case .cancel: diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentImageCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentImageCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentImageCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentImageCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentProfileView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentProfileView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentProfileView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentProfileView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentSection/DetailCommentSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentTitleSection/DetailCommentTitleSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentTitleSection/DetailCommentTitleSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentTitleSection/DetailCommentTitleSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentTitleSection/DetailCommentTitleSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentTitleSection/DetailCommentTitleSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentTitleSection/DetailCommentTitleSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailCommentTitleSection/DetailCommentTitleSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailCommentTitleSection/DetailCommentTitleSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailContentSection/DetailContentSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailContentSection/DetailContentSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailContentSection/DetailContentSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailContentSection/DetailContentSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailContentSection/DetailContentSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailContentSection/DetailContentSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailContentSection/DetailContentSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailContentSection/DetailContentSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailEmptyCommetSection/DetailEmptyCommetSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailEmptyCommetSection/DetailEmptyCommetSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailEmptyCommetSection/DetailEmptyCommetSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailEmptyCommetSection/DetailEmptyCommetSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailEmptyCommetSection/DetailEmptyCommetSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailEmptyCommetSection/DetailEmptyCommetSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailEmptyCommetSection/DetailEmptyCommetSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailEmptyCommetSection/DetailEmptyCommetSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailInfoSection/DetailInfoSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailInfoSection/DetailInfoSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailInfoSection/DetailInfoSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailInfoSection/DetailInfoSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailInfoSection/DetailInfoSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailInfoSection/DetailInfoSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailInfoSection/DetailInfoSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailInfoSection/DetailInfoSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailSimilarSection/DetailSimilarSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailSimilarSection/DetailSimilarSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailSimilarSection/DetailSimilarSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailSimilarSection/DetailSimilarSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailSimilarSection/DetailSimilarSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailSimilarSection/DetailSimilarSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailSimilarSection/DetailSimilarSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailSimilarSection/DetailSimilarSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailTitleSection/DetailTitleSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailTitleSection/DetailTitleSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailTitleSection/DetailTitleSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailTitleSection/DetailTitleSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailTitleSection/DetailTitleSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailTitleSection/DetailTitleSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailTitleSection/DetailTitleSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailTitleSection/DetailTitleSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Detail/View/DetailView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Detail/View/DetailView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Detail/View/DetailView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/List/HomeListController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/HomeListController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/List/HomeListController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/HomeListController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/List/HomeListReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/HomeListReactor.swift similarity index 92% rename from Poppool/Poppool/Presentation/Scene/Home/List/HomeListReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/HomeListReactor.swift index 23903e0b..f958730d 100644 --- a/Poppool/Poppool/Presentation/Scene/Home/List/HomeListReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/HomeListReactor.swift @@ -1,12 +1,8 @@ -// -// HomeListReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/2/24. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -43,9 +39,9 @@ final class HomeListReactor: Reactor { var disposeBag = DisposeBag() var popUpType: HomePopUpType - private let homeAPIUseCase = HomeAPIUseCaseImpl() + private let homeAPIUseCase: HomeAPIUseCase private let userDefaultService = UserDefaultService() - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase private var isLoading: Bool = false private var totalPage: Int32 = 0 @@ -70,9 +66,15 @@ final class HomeListReactor: Reactor { private var cardSections = HomeCardGridSection(inputDataList: []) // MARK: - init - init(popUpType: HomePopUpType) { + init( + popUpType: HomePopUpType, + userAPIUseCase: UserAPIUseCase, + homeAPIUseCase: HomeAPIUseCase + ) { self.initialState = State(popUpType: popUpType) self.popUpType = popUpType + self.userAPIUseCase = userAPIUseCase + self.homeAPIUseCase = homeAPIUseCase } // MARK: - Reactor Methods @@ -144,7 +146,13 @@ final class HomeListReactor: Reactor { isLoading = false case .moveToDetailScene(let controller, let row): let nextController = DetailController() - nextController.reactor = DetailReactor(popUpID: cardSections.inputDataList[row].id) + nextController.reactor = DetailReactor( + popUpID: cardSections.inputDataList[row].id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) } return newState diff --git a/Poppool/Poppool/Presentation/Scene/Home/List/HomePopUpType.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/HomePopUpType.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/List/HomePopUpType.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/HomePopUpType.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/List/View/HomeCardGridSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/View/HomeCardGridSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/List/View/HomeCardGridSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/View/HomeCardGridSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/List/View/HomeListView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/View/HomeListView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/List/View/HomeListView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/List/View/HomeListView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/HomeController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/HomeController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/HomeController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/HomeController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/HomeReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/HomeReactor.swift similarity index 76% rename from Poppool/Poppool/Presentation/Scene/Home/Main/HomeReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/HomeReactor.swift index aa54ee84..b27415c1 100644 --- a/Poppool/Poppool/Presentation/Scene/Home/Main/HomeReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/HomeReactor.swift @@ -1,5 +1,8 @@ import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -39,8 +42,8 @@ final class HomeReactor: Reactor { var disposeBag = DisposeBag() - private let homeApiUseCase = HomeAPIUseCaseImpl() - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let homeAPIUseCase: HomeAPIUseCase + private let userAPIUseCase: UserAPIUseCase private let userDefaultService = UserDefaultService() lazy var compositionalLayout: UICollectionViewCompositionalLayout = { @@ -84,7 +87,12 @@ final class HomeReactor: Reactor { private var spaceGray24Section = SpacingSection(inputDataList: [.init(spacing: 24, backgroundColor: .g700)]) // MARK: - init - init() { + init( + userAPIUseCase: UserAPIUseCase, + homeAPIUseCase: HomeAPIUseCase + ) { + self.userAPIUseCase = userAPIUseCase + self.homeAPIUseCase = homeAPIUseCase self.initialState = State() } @@ -94,7 +102,7 @@ final class HomeReactor: Reactor { case .changeIndicatorColor(let controller, let row): return Observable.just(.skip) case .viewWillAppear: - return homeApiUseCase.fetchHome(page: 0, size: 6, sort: "viewCount,desc") + return homeAPIUseCase.fetchHome(page: 0, size: 6, sort: "viewCount,desc") .withUnretained(self) .map { (owner, response) in owner.setBannerSection(response: response) @@ -272,35 +280,71 @@ final class HomeReactor: Reactor { case 0: if let id = loginImageBannerSection.inputDataList.first?.idList[indexPath.row - 1] { let controller = DetailController() - controller.reactor = DetailReactor(popUpID: id) + controller.reactor = DetailReactor( + popUpID: id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) currentController.navigationController?.pushViewController(controller, animated: true) } case 2: let controller = HomeListController() - controller.reactor = HomeListReactor(popUpType: .curation) + controller.reactor = HomeListReactor( + popUpType: .curation, + userAPIUseCase: userAPIUseCase, + homeAPIUseCase: homeAPIUseCase + ) currentController.navigationController?.pushViewController(controller, animated: true) case 4: let id = curationSection.inputDataList[indexPath.row].id let controller = DetailController() - controller.reactor = DetailReactor(popUpID: id) + controller.reactor = DetailReactor( + popUpID: id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) currentController.navigationController?.pushViewController(controller, animated: true) case 7: let controller = HomeListController() - controller.reactor = HomeListReactor(popUpType: .popular) + controller.reactor = HomeListReactor( + popUpType: .popular, + userAPIUseCase: userAPIUseCase, + homeAPIUseCase: homeAPIUseCase + ) currentController.navigationController?.pushViewController(controller, animated: true) case 9: let id = popularSection.inputDataList[indexPath.row].id let controller = DetailController() - controller.reactor = DetailReactor(popUpID: id) + controller.reactor = DetailReactor( + popUpID: id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) currentController.navigationController?.pushViewController(controller, animated: true) case 12: let controller = HomeListController() - controller.reactor = HomeListReactor(popUpType: .new) + controller.reactor = HomeListReactor( + popUpType: .new, + userAPIUseCase: userAPIUseCase, + homeAPIUseCase: homeAPIUseCase + ) currentController.navigationController?.pushViewController(controller, animated: true) case 14: let id = newSection.inputDataList[indexPath.row].id let controller = DetailController() - controller.reactor = DetailReactor(popUpID: id) + controller.reactor = DetailReactor( + popUpID: id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) currentController.navigationController?.pushViewController(controller, animated: true) default: break @@ -310,26 +354,52 @@ final class HomeReactor: Reactor { case 0: if let id = loginImageBannerSection.inputDataList.first?.idList[indexPath.row - 1] { let controller = DetailController() - controller.reactor = DetailReactor(popUpID: id) + controller.reactor = DetailReactor( + popUpID: id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) currentController.navigationController?.pushViewController(controller, animated: true) } case 2: let controller = HomeListController() - controller.reactor = HomeListReactor(popUpType: .popular) + controller.reactor = HomeListReactor( + popUpType: .popular, + userAPIUseCase: userAPIUseCase, + homeAPIUseCase: homeAPIUseCase + ) currentController.navigationController?.pushViewController(controller, animated: true) case 4: let id = popularSection.inputDataList[indexPath.row].id let controller = DetailController() - controller.reactor = DetailReactor(popUpID: id) + controller.reactor = DetailReactor( + popUpID: id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) currentController.navigationController?.pushViewController(controller, animated: true) case 7: let controller = HomeListController() - controller.reactor = HomeListReactor(popUpType: .new) + controller.reactor = HomeListReactor( + popUpType: .new, + userAPIUseCase: userAPIUseCase, + homeAPIUseCase: homeAPIUseCase + ) currentController.navigationController?.pushViewController(controller, animated: true) case 9: let id = newSection.inputDataList[indexPath.row].id let controller = DetailController() - controller.reactor = DetailReactor(popUpID: id) + controller.reactor = DetailReactor( + popUpID: id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) currentController.navigationController?.pushViewController(controller, animated: true) default: break diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSectionCell.swift similarity index 99% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSectionCell.swift index 30bb15e1..c69e6409 100644 --- a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSectionCell.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeCardSection/HomeCardSectionCell.swift @@ -57,7 +57,6 @@ final class HomeCardSectionCell: UICollectionViewCell { return label }() - private let imageService = PreSignedService() // MARK: - init override init(frame: CGRect) { diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeHeaderView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeHeaderView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeHeaderView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeHeaderView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSectionCell.swift similarity index 98% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSectionCell.swift index b4bd7862..33170f64 100644 --- a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSectionCell.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomePopularCardSection/HomePopularCardSectionCell.swift @@ -57,7 +57,6 @@ final class HomePopularCardSectionCell: UICollectionViewCell { let disposeBag = DisposeBag() - private let imageService = PreSignedService() // MARK: - init override init(frame: CGRect) { diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeTitleSection/HomeTitleSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeTitleSection/HomeTitleSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeTitleSection/HomeTitleSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeTitleSection/HomeTitleSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeTitleSection/HomeTitleSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeTitleSection/HomeTitleSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeTitleSection/HomeTitleSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeTitleSection/HomeTitleSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/HomeView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/HomeView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerChildSection/ImageBannerChildSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerChildSection/ImageBannerChildSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerChildSection/ImageBannerChildSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerChildSection/ImageBannerChildSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerChildSection/ImageBannerChildSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerChildSection/ImageBannerChildSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerChildSection/ImageBannerChildSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerChildSection/ImageBannerChildSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerSection/ImageBannerSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerSection/ImageBannerSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerSection/ImageBannerSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerSection/ImageBannerSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerSection/ImageBannerSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerSection/ImageBannerSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerSection/ImageBannerSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/ImageBannerSection/ImageBannerSection/ImageBannerSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/SectionBackGroundDecorationView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/SectionBackGroundDecorationView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/SectionBackGroundDecorationView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/SectionBackGroundDecorationView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/SpacingSection/SpacingSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/SpacingSection/SpacingSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/SpacingSection/SpacingSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/SpacingSection/SpacingSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Home/Main/View/SpacingSection/SpacingSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/SpacingSection/SpacingSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Home/Main/View/SpacingSection/SpacingSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Home/Main/View/SpacingSection/SpacingSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/ImageDetail/ImageDetailController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/ImageDetail/ImageDetailController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/ImageDetail/ImageDetailController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/ImageDetail/ImageDetailController.swift diff --git a/Poppool/Poppool/Presentation/Scene/ImageDetail/ImageDetailReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/ImageDetail/ImageDetailReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/ImageDetail/ImageDetailReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/ImageDetail/ImageDetailReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/ImageDetail/ImageDetailView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/ImageDetail/ImageDetailView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/ImageDetail/ImageDetailView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/ImageDetail/ImageDetailView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Login/LastLoginView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/LastLoginView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Login/LastLoginView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/LastLoginView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Login/Main/LoginController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Main/LoginController.swift similarity index 99% rename from Poppool/Poppool/Presentation/Scene/Login/Main/LoginController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Main/LoginController.swift index 47912023..df5d00de 100644 --- a/Poppool/Poppool/Presentation/Scene/Login/Main/LoginController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Main/LoginController.swift @@ -7,6 +7,8 @@ import UIKit +import Infrastructure + import ReactorKit import RxCocoa import RxSwift diff --git a/Poppool/Poppool/Presentation/Scene/Login/Main/LoginReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Main/LoginReactor.swift similarity index 88% rename from Poppool/Poppool/Presentation/Scene/Login/Main/LoginReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Main/LoginReactor.swift index 1d3425a0..32b3fe8e 100644 --- a/Poppool/Poppool/Presentation/Scene/Login/Main/LoginReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Main/LoginReactor.swift @@ -1,9 +1,5 @@ -// -// LoginReactor.swift -// Poppool -// -// Created by SeoJunYoung on 11/24/24. -// +import DomainInterface +import Infrastructure import ReactorKit import RxCocoa @@ -40,12 +36,15 @@ final class LoginReactor: Reactor { private let kakaoLoginService = KakaoLoginService() private var appleLoginService = AppleLoginService() - private let authApiUseCase = AuthAPIUseCaseImpl(repository: AuthAPIRepositoryImpl(provider: ProviderImpl())) - private let keyChainService = KeyChainService() + private let authAPIUseCase: AuthAPIUseCase + @Dependency private var keyChainService: KeyChainService let userDefaultService = UserDefaultService() // MARK: - init - init() { + init( + authAPIUseCase: AuthAPIUseCase + ) { + self.authAPIUseCase = authAPIUseCase self.initialState = State() } @@ -71,7 +70,11 @@ final class LoginReactor: Reactor { switch mutation { case .moveToSignUpScene(let controller): let signUpController = SignUpMainController() - signUpController.reactor = SignUpMainReactor(isFirstResponderCase: true, authrizationCode: authrizationCode) + signUpController.reactor = SignUpMainReactor( + isFirstResponderCase: true, + authrizationCode: authrizationCode, + signUpAPIUseCase: DIContainer.resolve(SignUpAPIUseCase.self) + ) controller.navigationController?.pushViewController(signUpController, animated: true) case .moveToHomeScene(let controller): let homeTabbar = WaveTabBarController() @@ -93,7 +96,7 @@ final class LoginReactor: Reactor { return kakaoLoginService.fetchUserCredential() .withUnretained(self) .flatMap { owner, response in - return owner.authApiUseCase.postTryLogin(userCredential: response, socialType: "kakao") + return owner.authAPIUseCase.postTryLogin(userCredential: response, socialType: "kakao") } .withUnretained(self) .map { [weak controller] (owner, loginResponse) in @@ -121,10 +124,10 @@ final class LoginReactor: Reactor { .withUnretained(self) .flatMap { owner, response in owner.authrizationCode = response.authorizationCode - return owner.authApiUseCase.postTryLogin(userCredential: response, socialType: "apple") + return owner.authAPIUseCase.postTryLogin(userCredential: response, socialType: "apple") } .withUnretained(self) - .map { [weak controller] (owner, loginResponse) in + .map({ [weak controller] (owner, loginResponse) in guard let controller = controller else { return .loadView } owner.userDefaultService.save(key: "userID", value: loginResponse.userId) owner.userDefaultService.save(key: "socialType", value: loginResponse.socialType) @@ -141,6 +144,6 @@ final class LoginReactor: Reactor { case .failure: return .loadView } - } + }) } } diff --git a/Poppool/Poppool/Presentation/Scene/Login/Main/LoginView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Main/LoginView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Login/Main/LoginView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Main/LoginView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Login/Sub/SubLoginController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Sub/SubLoginController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Login/Sub/SubLoginController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Sub/SubLoginController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Login/Sub/SubLoginReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Sub/SubLoginReactor.swift similarity index 89% rename from Poppool/Poppool/Presentation/Scene/Login/Sub/SubLoginReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Sub/SubLoginReactor.swift index 24b6d961..88170711 100644 --- a/Poppool/Poppool/Presentation/Scene/Login/Sub/SubLoginReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Sub/SubLoginReactor.swift @@ -1,9 +1,5 @@ -// -// SubLoginReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/28/24. -// +import DomainInterface +import Infrastructure import ReactorKit import RxCocoa @@ -40,12 +36,15 @@ final class SubLoginReactor: Reactor { private let kakaoLoginService = KakaoLoginService() private var appleLoginService = AppleLoginService() - private let authApiUseCase = AuthAPIUseCaseImpl(repository: AuthAPIRepositoryImpl(provider: ProviderImpl())) - private let keyChainService = KeyChainService() + private let authAPIUseCase: AuthAPIUseCase + @Dependency private var keyChainService: KeyChainService let userDefaultService = UserDefaultService() // MARK: - init - init() { + init( + authAPIUseCase: AuthAPIUseCase + ) { + self.authAPIUseCase = authAPIUseCase self.initialState = State() } @@ -69,7 +68,11 @@ final class SubLoginReactor: Reactor { switch mutation { case .moveToSignUpScene(let controller): let signUpController = SignUpMainController() - signUpController.reactor = SignUpMainReactor(isFirstResponderCase: false, authrizationCode: authrizationCode) + signUpController.reactor = SignUpMainReactor( + isFirstResponderCase: false, + authrizationCode: authrizationCode, + signUpAPIUseCase: DIContainer.resolve(SignUpAPIUseCase.self) + ) controller.navigationController?.pushViewController(signUpController, animated: true) case .dismissScene(let controller): controller.dismiss(animated: true) @@ -90,7 +93,7 @@ final class SubLoginReactor: Reactor { return kakaoLoginService.fetchUserCredential() .withUnretained(self) .flatMap { owner, response in - owner.authApiUseCase.postTryLogin(userCredential: response, socialType: "kakao") + owner.authAPIUseCase.postTryLogin(userCredential: response, socialType: "kakao") } .withUnretained(self) .map { [weak controller] (owner, loginResponse) in @@ -118,7 +121,7 @@ final class SubLoginReactor: Reactor { .withUnretained(self) .flatMap { owner, response in owner.authrizationCode = response.authorizationCode - return owner.authApiUseCase.postTryLogin(userCredential: response, socialType: "apple") + return owner.authAPIUseCase.postTryLogin(userCredential: response, socialType: "apple") } .withUnretained(self) .map { [weak controller] (owner, loginResponse) in diff --git a/Poppool/Poppool/Presentation/Scene/Login/Sub/SubLoginView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Sub/SubLoginView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Login/Sub/SubLoginView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Login/Sub/SubLoginView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/BalloonBackgroundView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/BalloonBackgroundView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/BalloonBackgroundView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/BalloonBackgroundView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/BalloonChipCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/BalloonChipCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/BalloonChipCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/BalloonChipCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetViewController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetViewController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetViewController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterBottomSheetViewController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterChip.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterChip.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterChip.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterChip.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterChipsView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterChipsView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/FillterSheetView/FilterChipsView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FillterSheetView/FilterChipsView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/FullScreenMapViewController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FindMap/MapGuideView/FullScreenMapViewController.swift similarity index 99% rename from Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/FullScreenMapViewController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FindMap/MapGuideView/FullScreenMapViewController.swift index 82393654..b6f8989a 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/FullScreenMapViewController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FindMap/MapGuideView/FullScreenMapViewController.swift @@ -1,9 +1,13 @@ import CoreLocation +import UIKit + +import DomainInterface +import Infrastructure + import NMapsMap import RxCocoa import RxSwift import SnapKit -import UIKit class FullScreenMapViewController: MapViewController { // MARK: - Properties diff --git a/Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideReactor.swift similarity index 95% rename from Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideReactor.swift index dd3fef65..a51aa8ab 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideReactor.swift @@ -1,7 +1,11 @@ import CoreLocation +import UIKit + +import DomainInterface +import Infrastructure + import ReactorKit import RxSwift -import UIKit final class MapGuideReactor: Reactor { // MARK: - Actions @@ -42,15 +46,15 @@ final class MapGuideReactor: Reactor { let initialState: State private let popUpStoreId: Int64 - private let directionRepository: MapDirectionRepository + private let mapDirectionRepository: MapDirectionRepository // MARK: - Init init( popUpStoreId: Int64, - repository: MapDirectionRepository = DefaultMapDirectionRepository(provider: ProviderImpl()) + mapDirectionRepository: MapDirectionRepository ) { self.popUpStoreId = popUpStoreId - self.directionRepository = repository + self.mapDirectionRepository = mapDirectionRepository self.initialState = State() } @@ -70,7 +74,7 @@ final class MapGuideReactor: Reactor { return Observable.just(.navigateBack) case .viewDidLoad(let id): - return directionRepository.getPopUpDirection(popUpStoreId: id) + return mapDirectionRepository.getPopUpDirection(popUpStoreId: id) .map { response -> [Mutation] in return [ .setMap(CLLocationCoordinate2D(latitude: response.latitude, longitude: response.longitude)), diff --git a/Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideViewController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideViewController.swift similarity index 97% rename from Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideViewController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideViewController.swift index 60d2d07c..d583d286 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideViewController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/FindMap/MapGuideView/MapGuideViewController.swift @@ -1,9 +1,13 @@ import CoreLocation +import UIKit + +import DomainInterface +import Infrastructure + import NMapsMap import ReactorKit import RxSwift import SnapKit -import UIKit final class MapGuideViewController: UIViewController, View { // MARK: - Properties @@ -171,11 +175,10 @@ final class MapGuideViewController: UIViewController, View { .subscribe(onNext: { [weak self] in guard let strongSelf = self else { return } - let providerInstance = ProviderImpl() - let repositoryInstance = DefaultMapRepository(provider: providerInstance) - let useCaseInstance = DefaultMapUseCase(repository: repositoryInstance) - let directionRepositoryInstance = DefaultMapDirectionRepository(provider: providerInstance) - let mapReactorInstance = MapReactor(useCase: useCaseInstance, directionRepository: directionRepositoryInstance) + let mapReactorInstance = MapReactor( + mapUseCase: DIContainer.resolve(MapUseCase.self), + mapDirectionRepository: DIContainer.resolve(MapDirectionRepository.self) + ) if let selectedStore = strongSelf.currentCarouselStoreList.first { mapReactorInstance.action.onNext(.didSelectItem(selectedStore)) diff --git a/Poppool/Poppool/Presentation/Scene/Map/MapPopupCardView/MapPopupCarouselView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapPopupCardView/MapPopupCarouselView.swift similarity index 99% rename from Poppool/Poppool/Presentation/Scene/Map/MapPopupCardView/MapPopupCarouselView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapPopupCardView/MapPopupCarouselView.swift index e6779117..8c1a17f7 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/MapPopupCardView/MapPopupCarouselView.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapPopupCardView/MapPopupCarouselView.swift @@ -1,6 +1,9 @@ +import UIKit + +import DomainInterface + import FloatingPanel import SnapKit -import UIKit final class MapPopupCarouselView: UICollectionView { // 스크롤 멈췄을 때의 콜백 diff --git a/Poppool/Poppool/Presentation/Scene/Map/MapPopupCardView/PopupCardCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapPopupCardView/PopupCardCell.swift similarity index 99% rename from Poppool/Poppool/Presentation/Scene/Map/MapPopupCardView/PopupCardCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapPopupCardView/PopupCardCell.swift index 5d2f8f11..7da20209 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/MapPopupCardView/PopupCardCell.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapPopupCardView/PopupCardCell.swift @@ -1,5 +1,7 @@ import UIKit +import DomainInterface + import SnapKit final class PopupCardCell: UICollectionViewCell { diff --git a/Poppool/Poppool/Presentation/Scene/Map/MapView/MapMarker.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapMarker.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/MapView/MapMarker.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapMarker.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/MapView/MapReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapReactor.swift similarity index 95% rename from Poppool/Poppool/Presentation/Scene/Map/MapView/MapReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapReactor.swift index b0e82322..dd6d5db1 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/MapView/MapReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapReactor.swift @@ -1,4 +1,8 @@ import CoreLocation + +import DomainInterface +import Infrastructure + import ReactorKit import RxSwift @@ -64,12 +68,12 @@ final class MapReactor: Reactor { } let initialState: State - private let useCase: MapUseCase - private let directionRepository: MapDirectionRepository + private let mapUseCase: MapUseCase + private let mapDirectionRepository: MapDirectionRepository - init(useCase: MapUseCase, directionRepository: MapDirectionRepository) { - self.useCase = useCase - self.directionRepository = directionRepository + init(mapUseCase: MapUseCase, mapDirectionRepository: MapDirectionRepository) { + self.mapUseCase = mapUseCase + self.mapDirectionRepository = mapDirectionRepository self.initialState = State() } private func store(_ store: MapPopUpStore, matches filter: String) -> Bool { @@ -90,7 +94,7 @@ final class MapReactor: Reactor { func mutate(action: Action) -> Observable { switch action { case .fetchCategories: - return useCase.fetchCategories() + return mapUseCase.fetchCategories() .map { categories in let mapping = categories.reduce(into: [String: Int64]()) { dict, category in dict[category.category] = category.categoryId @@ -107,7 +111,7 @@ final class MapReactor: Reactor { return .concat([ .just(.setSearchResults([])), .just(.setLoading(true)), - useCase.searchStores(query: query, categories: categoryIDs) + mapUseCase.searchStores(query: query, categories: categoryIDs) .flatMap { results -> Observable in if results.isEmpty { return .just(.setToastMessage("검색 결과가 없습니다.")) @@ -124,7 +128,7 @@ final class MapReactor: Reactor { return .concat([ .just(.setLoading(true)), - useCase.fetchStoresInBounds( + mapUseCase.fetchStoresInBounds( northEastLat: northEastLat, northEastLon: northEastLon, southWestLat: southWestLat, @@ -185,7 +189,7 @@ final class MapReactor: Reactor { .compactMap { currentState.categoryMapping[$0] } return Observable.concat([ Observable.just(.setLoading(true)), - useCase.fetchStoresInBounds( + mapUseCase.fetchStoresInBounds( northEastLat: northEastLat, northEastLon: northEastLon, southWestLat: southWestLat, @@ -215,7 +219,7 @@ final class MapReactor: Reactor { } case .viewDidLoad(let id): - return directionRepository.getPopUpDirection(popUpStoreId: id) + return mapDirectionRepository.getPopUpDirection(popUpStoreId: id) .do( onNext: { _ in }, @@ -227,9 +231,7 @@ final class MapReactor: Reactor { }, onSubscribe: { } ) - .map { dto in - let response = dto.toDomain() - + .map { response in return MapPopUpStore( id: response.id, category: response.categoryName, @@ -260,7 +262,7 @@ final class MapReactor: Reactor { return .concat([ .just(.setLoading(true)), - useCase.fetchStoresInBounds( + mapUseCase.fetchStoresInBounds( northEastLat: koreaRegion.northEast.lat, northEastLon: koreaRegion.northEast.lon, southWestLat: koreaRegion.southWest.lat, diff --git a/Poppool/Poppool/Presentation/Scene/Map/MapView/MapSearchInput.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapSearchInput.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/MapView/MapSearchInput.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapSearchInput.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/MapView/MapView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/MapView/MapView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/MapView/MapViewController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapViewController.swift similarity index 97% rename from Poppool/Poppool/Presentation/Scene/Map/MapView/MapViewController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapViewController.swift index e327b463..39e20a31 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/MapView/MapViewController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MapViewController.swift @@ -1,4 +1,9 @@ import CoreLocation +import UIKit + +import DomainInterface +import Infrastructure + import FloatingPanel import NMapsMap import ReactorKit @@ -6,7 +11,6 @@ import RxCocoa import RxGesture import RxSwift import SnapKit -import UIKit class MapViewController: BaseViewController, View, CLLocationManagerDelegate, NMFMapViewTouchDelegate, NMFMapViewCameraDelegate, UIGestureRecognizerDelegate { typealias Reactor = MapReactor @@ -32,8 +36,7 @@ class MapViewController: BaseViewController, View, CLLocationManagerDelegate, NM private var markerDictionary: [Int64: NMFMarker] = [:] private var individualMarkerDictionary: [Int64: NMFMarker] = [:] private var clusterMarkerDictionary: [String: NMFMarker] = [:] - private let popUpAPIUseCase = PopUpAPIUseCaseImpl( - repository: PopUpAPIRepositoryImpl(provider: ProviderImpl())) + @Dependency private var popUpAPIUseCase: PopUpAPIUseCase private let clusteringManager = ClusteringManager() var currentStores: [MapPopUpStore] = [] var disposeBag = DisposeBag() @@ -41,8 +44,16 @@ class MapViewController: BaseViewController, View, CLLocationManagerDelegate, NM let carouselView = MapPopupCarouselView() private let locationManager = CLLocationManager() var currentMarker: NMFMarker? - private let storeListReactor = StoreListReactor() - private let storeListViewController = StoreListViewController(reactor: StoreListReactor()) + private let storeListReactor = StoreListReactor( + userAPIUseCase: DIContainer.resolve(UserAPIUseCase.self), + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self) + ) + private let storeListViewController = StoreListViewController( + reactor: StoreListReactor( + userAPIUseCase: DIContainer.resolve(UserAPIUseCase.self), + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self) + ) + ) private var listViewTopConstraint: Constraint? private var currentFilterBottomSheet: FilterBottomSheetViewController? private var filterChipsTopY: CGFloat = 0 @@ -115,7 +126,13 @@ class MapViewController: BaseViewController, View, CLLocationManagerDelegate, NM carouselView.onCardTapped = { [weak self] store in let detailController = DetailController() - detailController.reactor = DetailReactor(popUpID: Int64(store.id)) + detailController.reactor = DetailReactor( + popUpID: Int64(store.id), + userAPIUseCase: DIContainer.resolve(UserAPIUseCase.self), + popUpAPIUseCase: self?.popUpAPIUseCase ?? DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) self?.navigationController?.isNavigationBarHidden = false self?.navigationController?.tabBarController?.tabBar.isHidden = false @@ -501,7 +518,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 +1071,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)) } @@ -1226,7 +1263,8 @@ class MapViewController: BaseViewController, View, CLLocationManagerDelegate, NM stores.forEach { store in self.popUpAPIUseCase.getPopUpDetail( commentType: "NORMAL", - popUpStoredId: store.id + popUpStoredId: store.id, + isViewCount: true ) .asObservable() .observe(on: MainScheduler.instance) diff --git a/Poppool/Poppool/Presentation/Scene/Map/MapView/MarkerTooltipView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MarkerTooltipView.swift similarity index 99% rename from Poppool/Poppool/Presentation/Scene/Map/MapView/MarkerTooltipView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MarkerTooltipView.swift index a1c2bffe..ed8ce855 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/MapView/MarkerTooltipView.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/MapView/MarkerTooltipView.swift @@ -1,6 +1,9 @@ -import SnapKit import UIKit +import DomainInterface + +import SnapKit + final class MarkerTooltipView: UIView, UIGestureRecognizerDelegate { // MARK: - Properties diff --git a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListReactor.swift similarity index 95% rename from Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListReactor.swift index 21e54ec8..054506ce 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListReactor.swift @@ -1,12 +1,16 @@ import Foundation + +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift final class StoreListReactor: Reactor { // MARK: - Reactor - private let userAPIUseCase: UserAPIUseCaseImpl - private let popUpAPIUseCase: PopUpAPIUseCaseImpl + private let userAPIUseCase: UserAPIUseCase + private let popUpAPIUseCase: PopUpAPIUseCase private let bookmarkStateRelay = PublishRelay<(Int64, Bool)>() // private var currentPage = 0 @@ -48,8 +52,8 @@ final class StoreListReactor: Reactor { var initialState: State init( - userAPIUseCase: UserAPIUseCaseImpl = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())), - popUpAPIUseCase: PopUpAPIUseCaseImpl = PopUpAPIUseCaseImpl(repository: PopUpAPIRepositoryImpl(provider: ProviderImpl())) + userAPIUseCase: UserAPIUseCase, + popUpAPIUseCase: PopUpAPIUseCase ) { self.userAPIUseCase = userAPIUseCase self.popUpAPIUseCase = popUpAPIUseCase @@ -82,7 +86,8 @@ final class StoreListReactor: Reactor { return popUpAPIUseCase.getPopUpDetail( commentType: "NORMAL", - popUpStoredId: Int64(idInt32) // Int32 → Int64 변환 + popUpStoredId: Int64(idInt32), // Int32 → Int64 변환 + isViewCount: true ) .flatMap { detail -> Observable in if detail.bookmarkYn != store.isBookmarked { diff --git a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListViewController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListViewController.swift similarity index 94% rename from Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListViewController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListViewController.swift index 3a358ce8..92dba9d9 100644 --- a/Poppool/Poppool/Presentation/Scene/Map/StoreListView/StoreListViewController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Map/StoreListView/StoreListViewController.swift @@ -1,10 +1,14 @@ +import UIKit + +import DomainInterface +import Infrastructure + import FloatingPanel import ReactorKit import RxCocoa import RxDataSources import RxSwift import SnapKit -import UIKit final class StoreListViewController: UIViewController, View { typealias Reactor = StoreListReactor @@ -116,7 +120,13 @@ final class StoreListViewController: UIViewController, View { let store = owner.reactor?.currentState.stores[indexPath.item] else { return } let detailController = DetailController() - detailController.reactor = DetailReactor(popUpID: Int64(store.id)) + detailController.reactor = DetailReactor( + popUpID: Int64(store.id), + userAPIUseCase: DIContainer.resolve(UserAPIUseCase.self), + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) owner.navigationController?.isNavigationBarHidden = false owner.navigationController?.tabBarController?.tabBar.isHidden = false diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Block/BlockUserManageController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/BlockUserManageController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Block/BlockUserManageController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/BlockUserManageController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Block/BlockUserManageReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/BlockUserManageReactor.swift similarity index 94% rename from Poppool/Poppool/Presentation/Scene/MyPage/Block/BlockUserManageReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/BlockUserManageReactor.swift index 99c16ac2..7d8bc987 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/Block/BlockUserManageReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/BlockUserManageReactor.swift @@ -1,12 +1,7 @@ -// -// BlockUserManageReactor.swift -// Poppool -// -// Created by SeoJunYoung on 1/12/25. -// - import UIKit +import DomainInterface + import ReactorKit import RxCocoa import RxSwift @@ -35,7 +30,7 @@ final class BlockUserManageReactor: Reactor { var initialState: State var disposeBag = DisposeBag() - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -56,7 +51,8 @@ final class BlockUserManageReactor: Reactor { private var spcing16Section = SpacingSection(inputDataList: [.init(spacing: 16)]) // MARK: - init - init() { + init(userAPIUseCase: UserAPIUseCase) { + self.userAPIUseCase = userAPIUseCase self.initialState = State() } diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Block/View/BlockUserListSection/BlockUserListSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/View/BlockUserListSection/BlockUserListSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Block/View/BlockUserListSection/BlockUserListSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/View/BlockUserListSection/BlockUserListSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Block/View/BlockUserListSection/BlockUserListSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/View/BlockUserListSection/BlockUserListSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Block/View/BlockUserListSection/BlockUserListSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/View/BlockUserListSection/BlockUserListSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Block/View/BlockUserManageView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/View/BlockUserManageView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Block/View/BlockUserManageView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Block/View/BlockUserManageView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkReactor.swift similarity index 91% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkReactor.swift index 077b4506..fd82c499 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkReactor.swift @@ -1,12 +1,8 @@ -// -// MyPageBookmarkReactor.swift -// Poppool -// -// Created by SeoJunYoung on 1/14/25. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -52,7 +48,7 @@ final class MyPageBookmarkReactor: Reactor { private var size: Int32 = 10 private var viewType: String = "크게보기" - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -74,7 +70,8 @@ final class MyPageBookmarkReactor: Reactor { private var spacing150Section = SpacingSection(inputDataList: [.init(spacing: 150)]) // MARK: - init - init() { + init(userAPIUseCase: UserAPIUseCase) { + self.userAPIUseCase = userAPIUseCase self.initialState = State() } @@ -178,7 +175,13 @@ final class MyPageBookmarkReactor: Reactor { controller.navigationController?.popViewController(animated: true) case .moveToDetailScene(let controller, let row): let nextController = DetailController() - nextController.reactor = DetailReactor(popUpID: listSection.inputDataList[row].id) + nextController.reactor = DetailReactor( + popUpID: listSection.inputDataList[row].id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) case .presentModal(let controller): let nextController = BookMarkPopUpViewTypeModalController() @@ -195,7 +198,11 @@ final class MyPageBookmarkReactor: Reactor { .disposed(by: nextController.disposeBag) case .moveToSuggestScene(let controller): let nextController = HomeListController() - nextController.reactor = HomeListReactor(popUpType: .curation) + nextController.reactor = HomeListReactor( + popUpType: .curation, + userAPIUseCase: userAPIUseCase, + homeAPIUseCase: DIContainer.resolve(HomeAPIUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) } newState.sections = getSection() diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/MyPageBookmarkView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/View/CountButtonView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/View/CountButtonView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/View/CountButtonView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/View/CountButtonView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/Main/View/PopUpCardSection/PopUpCardView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Bookmark/ViewTypeModal/BookMarkPopUpViewTypeModalView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/FAQ/FAQController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/FAQController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/FAQ/FAQController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/FAQController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/FAQ/FAQReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/FAQReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/FAQ/FAQReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/FAQReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/FAQ/View/FAQDropdownSection/FAQDropdownSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/View/FAQDropdownSection/FAQDropdownSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/FAQ/View/FAQDropdownSection/FAQDropdownSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/View/FAQDropdownSection/FAQDropdownSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/FAQ/View/FAQDropdownSection/FAQDropdownSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/View/FAQDropdownSection/FAQDropdownSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/FAQ/View/FAQDropdownSection/FAQDropdownSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/View/FAQDropdownSection/FAQDropdownSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/FAQ/View/FAQView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/View/FAQView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/FAQ/View/FAQView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/FAQ/View/FAQView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/MyPageController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/MyPageController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/MyPageController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/MyPageController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/MyPageReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/MyPageReactor.swift similarity index 88% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/MyPageReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/MyPageReactor.swift index 7ac24f0b..3fe8c1d9 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/Main/MyPageReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/MyPageReactor.swift @@ -1,14 +1,11 @@ -// -// MyPageReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/30/24. -// +import UIKit + +import DomainInterface +import Infrastructure import ReactorKit import RxCocoa import RxSwift -import UIKit final class MyPageReactor: Reactor { @@ -45,7 +42,7 @@ final class MyPageReactor: Reactor { var initialState: State var disposeBag = DisposeBag() - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -103,7 +100,8 @@ final class MyPageReactor: Reactor { var isAdmin: Bool = false // MARK: - init - init() { + init(userAPIUseCase: UserAPIUseCase) { + self.userAPIUseCase = userAPIUseCase self.initialState = State() } @@ -180,13 +178,17 @@ final class MyPageReactor: Reactor { case .moveToProfileEditScene(let controller): let nextController = ProfileEditController() - nextController.reactor = ProfileEditReactor() + nextController.reactor = ProfileEditReactor( + userAPIUseCase: userAPIUseCase, + signUpAPIUseCase: DIContainer.resolve(SignUpAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) case .logout: - let service = KeyChainService() - _ = service.deleteToken(type: .accessToken) - _ = service.deleteToken(type: .refreshToken) + @Dependency var keyChainService: KeyChainService + _ = keyChainService.deleteToken(type: .accessToken) + _ = keyChainService.deleteToken(type: .refreshToken) ToastMaker.createToast(message: "로그아웃 되었어요") DispatchQueue.main.async { [weak self] in self?.action.onNext(.viewWillAppear) @@ -207,7 +209,7 @@ final class MyPageReactor: Reactor { case .apply: nextController.dismiss(animated: true) { let reasonController = WithdrawlReasonController() - reasonController.reactor = WithdrawlReasonReactor() + reasonController.reactor = WithdrawlReasonReactor(userAPIUseCase: self.userAPIUseCase) controller?.navigationController?.pushViewController(reasonController, animated: true) } case .cancel: @@ -220,12 +222,12 @@ final class MyPageReactor: Reactor { case "차단한 사용자 관리": let nextController = BlockUserManageController() - nextController.reactor = BlockUserManageReactor() + nextController.reactor = BlockUserManageReactor(userAPIUseCase: userAPIUseCase) controller.navigationController?.pushViewController(nextController, animated: true) case "공지사항": let nextController = MyPageNoticeController() - nextController.reactor = MyPageNoticeReactor() + nextController.reactor = MyPageNoticeReactor(userAPIUseCase: userAPIUseCase) controller.navigationController?.pushViewController(nextController, animated: true) case "고객문의": @@ -235,12 +237,12 @@ final class MyPageReactor: Reactor { case "찜한 팝업": let nextController = MyPageBookmarkController() - nextController.reactor = MyPageBookmarkReactor() + nextController.reactor = MyPageBookmarkReactor(userAPIUseCase: userAPIUseCase) controller.navigationController?.pushViewController(nextController, animated: true) case "최근 본 팝업": let nextController = MyPageRecentController() - nextController.reactor = MyPageRecentReactor() + nextController.reactor = MyPageRecentReactor(userAPIUseCase: userAPIUseCase) controller.navigationController?.pushViewController(nextController, animated: true) case "약관": @@ -254,30 +256,33 @@ final class MyPageReactor: Reactor { case .moveToPopUpDetailScene(let controller, let row): let nextController = DetailController() let popUpID = commentSection.inputDataList[row].popUpID - nextController.reactor = DetailReactor(popUpID: popUpID) + nextController.reactor = DetailReactor( + popUpID: popUpID, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) case .moveToLoginScene(let controller): let nextController = SubLoginController() - nextController.reactor = SubLoginReactor() + nextController.reactor = SubLoginReactor( + authAPIUseCase: DIContainer.resolve(AuthAPIUseCase.self) + ) let navigationController = UINavigationController(rootViewController: nextController) navigationController.modalPresentationStyle = .fullScreen controller.present(navigationController, animated: true) - case .moveToMyCommentScene(let controller): let nextController = MyCommentController() - nextController.reactor = MyCommentReactor() + nextController.reactor = MyCommentReactor(userAPIUseCase: userAPIUseCase) 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: DefaultAdminUseCase( - repository: DefaultAdminRepository(provider: ProviderImpl()) - ) - ) + let adminUseCase = DIContainer.resolve(AdminUseCase.self) + let adminVC = AdminViewController(nickname: nickname, adminUseCase: adminUseCase) + adminVC.reactor = AdminReactor(adminUseCase: adminUseCase) controller.navigationController?.pushViewController(adminVC, animated: true) } diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageCommentSection/MyPageCommentSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageCommentSection/MyPageCommentSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageCommentSection/MyPageCommentSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageCommentSection/MyPageCommentSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageCommentSection/MyPageCommentSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageCommentSection/MyPageCommentSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageCommentSection/MyPageCommentSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageCommentSection/MyPageCommentSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageListSection/MyPageListSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageListSection/MyPageListSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageListSection/MyPageListSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageListSection/MyPageListSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageListSection/MyPageListSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageListSection/MyPageListSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageListSection/MyPageListSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageListSection/MyPageListSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageLogoutSection/MyPageLogoutSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageLogoutSection/MyPageLogoutSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageLogoutSection/MyPageLogoutSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageLogoutSection/MyPageLogoutSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageLogoutSection/MyPageLogoutSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageLogoutSection/MyPageLogoutSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageLogoutSection/MyPageLogoutSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageLogoutSection/MyPageLogoutSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageMyCommentTitleSection/MyPageMyCommentTitleSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageMyCommentTitleSection/MyPageMyCommentTitleSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageMyCommentTitleSection/MyPageMyCommentTitleSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageMyCommentTitleSection/MyPageMyCommentTitleSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageMyCommentTitleSection/MyPageMyCommentTitleSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageMyCommentTitleSection/MyPageMyCommentTitleSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageMyCommentTitleSection/MyPageMyCommentTitleSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageMyCommentTitleSection/MyPageMyCommentTitleSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageProfileSection/MyPageProfileSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageProfileSection/MyPageProfileSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageProfileSection/MyPageProfileSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageProfileSection/MyPageProfileSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageProfileSection/MyPageProfileSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageProfileSection/MyPageProfileSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageProfileSection/MyPageProfileSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageProfileSection/MyPageProfileSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Main/View/MyPageView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Main/View/MyPageView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/MyCommentController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/MyCommentController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/MyCommentController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/MyCommentController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/MyCommentReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/MyCommentReactor.swift similarity index 88% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/MyCommentReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/MyCommentReactor.swift index 83445aac..2b4911db 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/MyCommentReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/MyCommentReactor.swift @@ -1,12 +1,8 @@ -// -// MyCommentReactor.swift -// Poppool -// -// Created by SeoJunYoung on 1/8/25. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -37,7 +33,7 @@ final class MyCommentReactor: Reactor { var initialState: State var disposeBag = DisposeBag() - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -59,7 +55,8 @@ final class MyCommentReactor: Reactor { private var spacing64Section = SpacingSection(inputDataList: [.init(spacing: 64)]) // MARK: - init - init() { + init(userAPIUseCase: UserAPIUseCase) { + self.userAPIUseCase = userAPIUseCase self.initialState = State() } @@ -106,7 +103,13 @@ final class MyCommentReactor: Reactor { case .moveToDetailScene(let controller, let row): let popUpID = listSection.inputDataList[row].popUpID let nextController = DetailController() - nextController.reactor = DetailReactor(popUpID: popUpID) + nextController.reactor = DetailReactor( + popUpID: popUpID, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) case .moveToRecentScene(let controller): controller.navigationController?.popViewController(animated: true) diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/ListCountButtonSection/ListCountButtonSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/ListCountButtonSection/ListCountButtonSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/ListCountButtonSection/ListCountButtonSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/ListCountButtonSection/ListCountButtonSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/ListCountButtonSection/ListCountButtonSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/ListCountButtonSection/ListCountButtonSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/ListCountButtonSection/ListCountButtonSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/ListCountButtonSection/ListCountButtonSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentedPopUpGridSection/MyCommentedPopUpGridSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentedPopUpGridSection/MyCommentedPopUpGridSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentedPopUpGridSection/MyCommentedPopUpGridSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentedPopUpGridSection/MyCommentedPopUpGridSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentedPopUpGridSection/MyCommentedPopUpGridSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentedPopUpGridSection/MyCommentedPopUpGridSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentedPopUpGridSection/MyCommentedPopUpGridSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/Main/View/MyCommentedPopUpGridSection/MyCommentedPopUpGridSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/MyComment/SortedModal/MyCommentSortedModalView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailReactor.swift similarity index 88% rename from Poppool/Poppool/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailReactor.swift index 02bb5176..cb16df03 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailReactor.swift @@ -1,9 +1,4 @@ -// -// MyPageNoticeDetailReactor.swift -// Poppool -// -// Created by SeoJunYoung on 1/13/25. -// +import DomainInterface import ReactorKit import RxCocoa @@ -37,10 +32,14 @@ final class MyPageNoticeDetailReactor: Reactor { var content: String? var noticeID: Int64 - let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + let userAPIUseCase: UserAPIUseCase // MARK: - init - init(noticeID: Int64) { + init( + noticeID: Int64, + userAPIUseCase: UserAPIUseCase + ) { self.noticeID = noticeID + self.userAPIUseCase = userAPIUseCase self.initialState = State() } diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/Detail/MyPageNoticeDetailView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/MyPageNoticeController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/MyPageNoticeController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/MyPageNoticeController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/MyPageNoticeController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/MyPageNoticeReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/MyPageNoticeReactor.swift similarity index 90% rename from Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/MyPageNoticeReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/MyPageNoticeReactor.swift index ab4da90c..8af96c6a 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/MyPageNoticeReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/MyPageNoticeReactor.swift @@ -1,12 +1,7 @@ -// -// MyPageNoticeReactor.swift -// Poppool -// -// Created by SeoJunYoung on 1/13/25. -// - import UIKit +import DomainInterface + import ReactorKit import RxCocoa import RxSwift @@ -34,7 +29,7 @@ final class MyPageNoticeReactor: Reactor { var initialState: State var disposeBag = DisposeBag() - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -54,7 +49,8 @@ final class MyPageNoticeReactor: Reactor { private let spacing16Section = SpacingSection(inputDataList: [.init(spacing: 16)]) // MARK: - init - init() { + init(userAPIUseCase: UserAPIUseCase) { + self.userAPIUseCase = userAPIUseCase self.initialState = State() } @@ -85,7 +81,10 @@ final class MyPageNoticeReactor: Reactor { newState.sections = getSection() case .moveToDetailScene(let controller, let row): let nextController = MyPageNoticeDetailController() - nextController.reactor = MyPageNoticeDetailReactor(noticeID: listSection.inputDataList[row].noticeID) + nextController.reactor = MyPageNoticeDetailReactor( + noticeID: listSection.inputDataList[row].noticeID, + userAPIUseCase: userAPIUseCase + ) controller.navigationController?.pushViewController(nextController, animated: true) case .moveToRecentScene(let controller): controller.navigationController?.popViewController(animated: true) diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/View/MyPageNoticeView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/View/MyPageNoticeView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/View/MyPageNoticeView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/View/MyPageNoticeView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/View/NoticeListSection/NoticeListSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/View/NoticeListSection/NoticeListSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/View/NoticeListSection/NoticeListSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/View/NoticeListSection/NoticeListSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/View/NoticeListSection/NoticeListSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/View/NoticeListSection/NoticeListSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Notice/List/View/NoticeListSection/NoticeListSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Notice/List/View/NoticeListSection/NoticeListSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalReactor.swift similarity index 93% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalReactor.swift index 2fb1bac2..e6ae9422 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalReactor.swift @@ -7,6 +7,8 @@ import UIKit +import DomainInterface + import ReactorKit import RxCocoa import RxSwift @@ -52,13 +54,19 @@ final class CategoryEditModalReactor: Reactor { } }() - private var signUpUseCase = SignUpAPIUseCaseImpl(repository: SignUpRepositoryImpl(provider: ProviderImpl())) - private var userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private var signUpUseCase: SignUpAPIUseCase + private var userAPIUseCase: UserAPIUseCase private var tagSection = TagSection(inputDataList: []) // MARK: - init - init(selectedID: [Int64]) { + init( + selectedID: [Int64], + userAPIUseCase: UserAPIUseCase, + signUpAPIUseCase: SignUpAPIUseCase + ) { self.originSelectedID = selectedID + self.userAPIUseCase = userAPIUseCase + self.signUpUseCase = signUpAPIUseCase self.initialState = State(originSelectedID: selectedID) } diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/CategoryEditModal/CategoryEditModalView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalReactor.swift similarity index 93% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalReactor.swift index df0ae566..61d22876 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalReactor.swift @@ -1,12 +1,7 @@ -// -// InfoEditModalReactor.swift -// Poppool -// -// Created by SeoJunYoung on 1/10/25. -// - import UIKit +import DomainInterface + import ReactorKit import RxCocoa import RxSwift @@ -48,11 +43,16 @@ final class InfoEditModalReactor: Reactor { var currentAge: Int32 = 0 var currentGender: String? - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase // MARK: - init - init(age: Int32, gender: String?) { + init( + age: Int32, + gender: String?, + userAPIUseCase: UserAPIUseCase + ) { self.originAge = age self.originGender = gender + self.userAPIUseCase = userAPIUseCase self.initialState = State(age: age, gender: gender) } diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/InfoEditModal/InfoEditModalView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditController.swift similarity index 99% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditController.swift index 95801cc2..9dc41725 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditController.swift @@ -1,13 +1,8 @@ -// -// ProfileEditController.swift -// Poppool -// -// Created by SeoJunYoung on 1/4/25. -// - import PhotosUI import UIKit +import Infrastructure + import ReactorKit import RxCocoa import RxGesture diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditReactor.swift similarity index 87% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditReactor.swift index 5719a881..42702d27 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/ProfileEditReactor.swift @@ -1,13 +1,9 @@ -// -// ProfileEditReactor.swift -// Poppool -// -// Created by SeoJunYoung on 1/4/25. -// - import PhotosUI import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -64,12 +60,19 @@ final class ProfileEditReactor: Reactor { var currentIntro: String? var introIsActive: Bool = false - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) - private let signUpAPIUseCase = SignUpAPIUseCaseImpl(repository: SignUpRepositoryImpl(provider: ProviderImpl())) - private let imageService = PreSignedService() + private let userAPIUseCase: UserAPIUseCase + private let signUpAPIUseCase: SignUpAPIUseCase + private let preSignedUseCase: PreSignedUseCase // MARK: - init - init() { + init( + userAPIUseCase: UserAPIUseCase, + signUpAPIUseCase: SignUpAPIUseCase, + preSignedUseCase: PreSignedUseCase + ) { + self.userAPIUseCase = userAPIUseCase + self.signUpAPIUseCase = signUpAPIUseCase + self.preSignedUseCase = preSignedUseCase self.initialState = State() } @@ -133,11 +136,19 @@ final class ProfileEditReactor: Reactor { newState.introState = checkIntroState(text: currentIntro, isActive: introIsActive) case .moveToCategoryEditScene(let controller): let nextController = CategoryEditModalController() - nextController.reactor = CategoryEditModalReactor(selectedID: newState.originProfileData?.interestCategoryList.map { $0.categoryId } ?? []) + nextController.reactor = CategoryEditModalReactor( + selectedID: newState.originProfileData?.interestCategoryList.map { $0.categoryId } ?? [], + userAPIUseCase: userAPIUseCase, + signUpAPIUseCase: signUpAPIUseCase + ) controller.presentPanModal(nextController) case .moveToInfoEditScene(let controller): let nextController = InfoEditModalController() - nextController.reactor = InfoEditModalReactor(age: originProfileData?.age ?? 0, gender: originProfileData?.gender) + nextController.reactor = InfoEditModalReactor( + age: originProfileData?.age ?? 0, + gender: originProfileData?.gender, + userAPIUseCase: userAPIUseCase + ) controller.presentPanModal(nextController) case .isValidateNickName(let isValidate): if isValidate { @@ -178,14 +189,14 @@ final class ProfileEditReactor: Reactor { let newPath = "ProfileImage/\(UUID().uuidString).jpg" currentImagePath = newPath if originProfileData?.profileImageUrl == nil { - return imageService.tryUpload(datas: [.init(filePath: newPath, image: changeImage)]) + return preSignedUseCase.tryUpload(presignedURLRequest: [(filePath: newPath, image: changeImage)]) .asObservable() .map { .loadView } } else { let deletePath = originProfileData?.profileImageUrl ?? "" - return imageService.tryDelete(targetPaths: .init(objectKeyList: [deletePath])) + return preSignedUseCase.tryDelete(objectKeyList: [deletePath]) .andThen( - imageService.tryUpload(datas: [.init(filePath: newPath, image: changeImage)]) + preSignedUseCase.tryUpload(presignedURLRequest: [(filePath: newPath, image: changeImage)]) .asObservable() .map { .loadView } ) @@ -198,7 +209,7 @@ final class ProfileEditReactor: Reactor { } else { currentImagePath = nil let deletePath = originProfileData?.profileImageUrl ?? "" - return imageService.tryDelete(targetPaths: .init(objectKeyList: [deletePath])) + return preSignedUseCase.tryDelete(objectKeyList: [deletePath]) .andThen(Observable.just(.loadView)) } } else { diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/View/ProfileEditListButton.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/View/ProfileEditListButton.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/View/ProfileEditListButton.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/View/ProfileEditListButton.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/View/ProfileEditView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/View/ProfileEditView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/ProfileEdit/Main/View/ProfileEditView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/ProfileEdit/Main/View/ProfileEditView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Recent/MyPageRecentController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Recent/MyPageRecentController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Recent/MyPageRecentController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Recent/MyPageRecentController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Recent/MyPageRecentReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Recent/MyPageRecentReactor.swift similarity index 89% rename from Poppool/Poppool/Presentation/Scene/MyPage/Recent/MyPageRecentReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Recent/MyPageRecentReactor.swift index 300b6bcb..94b3f651 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/Recent/MyPageRecentReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Recent/MyPageRecentReactor.swift @@ -1,12 +1,8 @@ -// -// MyPageRecentReactor.swift -// Poppool -// -// Created by SeoJunYoung on 1/14/25. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -42,7 +38,7 @@ final class MyPageRecentReactor: Reactor { private var currentPage: Int32 = 0 private var size: Int32 = 100 - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -63,7 +59,8 @@ final class MyPageRecentReactor: Reactor { private var spacing16Section = SpacingSection(inputDataList: [.init(spacing: 16)]) // MARK: - init - init() { + init(userAPIUseCase: UserAPIUseCase) { + self.userAPIUseCase = userAPIUseCase self.initialState = State() } @@ -125,7 +122,13 @@ final class MyPageRecentReactor: Reactor { controller.navigationController?.popViewController(animated: true) case .moveToDetailScene(let controller, let row): let nextController = DetailController() - nextController.reactor = DetailReactor(popUpID: listSection.inputDataList[row].id) + nextController.reactor = DetailReactor( + popUpID: listSection.inputDataList[row].id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self), + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) } return newState diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Recent/View/MyPageRecentView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Recent/View/MyPageRecentView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Recent/View/MyPageRecentView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Recent/View/MyPageRecentView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Recent/View/RecentPopUpSection/RecentPopUpSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Recent/View/RecentPopUpSection/RecentPopUpSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Recent/View/RecentPopUpSection/RecentPopUpSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Recent/View/RecentPopUpSection/RecentPopUpSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Terms/MyPageTermsController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Terms/MyPageTermsController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Terms/MyPageTermsController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Terms/MyPageTermsController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Terms/MyPageTermsReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Terms/MyPageTermsReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Terms/MyPageTermsReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Terms/MyPageTermsReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/CheckModal/WithdrawlCheckModalView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/Complete/WithdrawlCompleteController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/Complete/WithdrawlCompleteController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/Complete/WithdrawlCompleteController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/Complete/WithdrawlCompleteController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/Complete/WithdrawlCompleteView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/Complete/WithdrawlCompleteView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/Complete/WithdrawlCompleteView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/Complete/WithdrawlCompleteView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlCheckSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlCheckSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlCheckSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlCheckSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlCheckSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlCheckSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlCheckSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlCheckSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlReasonView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlReasonView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlReasonView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/View/WithdrawlReasonView.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonController.swift diff --git a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonReactor.swift similarity index 95% rename from Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonReactor.swift index ca08cbf5..8cb10ad6 100644 --- a/Poppool/Poppool/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/MyPage/Withdrawl/SelectedReason/WithdrawlReasonReactor.swift @@ -1,12 +1,8 @@ -// -// WithdrawlReasonReactor.swift -// Poppool -// -// Created by SeoJunYoung on 1/7/25. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -57,11 +53,12 @@ final class WithdrawlReasonReactor: Reactor { private var reasonSection = WithdrawlCheckSection(inputDataList: []) private var spacing156Section = SpacingSection(inputDataList: [.init(spacing: 156)]) - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) - private let keyChainService = KeyChainService() + private let userAPIUseCase: UserAPIUseCase + @Dependency private var keyChainService: KeyChainService private let userDefaultService = UserDefaultService() // MARK: - init - init() { + init(userAPIUseCase: UserAPIUseCase) { + self.userAPIUseCase = userAPIUseCase self.initialState = State() } diff --git a/Poppool/Poppool/Presentation/Scene/Search/AfterSearch/SearchResultController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/SearchResultController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/AfterSearch/SearchResultController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/SearchResultController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/AfterSearch/SearchResultReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/SearchResultReactor.swift similarity index 88% rename from Poppool/Poppool/Presentation/Scene/Search/AfterSearch/SearchResultReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/SearchResultReactor.swift index f4601985..cb8c25b1 100644 --- a/Poppool/Poppool/Presentation/Scene/Search/AfterSearch/SearchResultReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/SearchResultReactor.swift @@ -1,12 +1,8 @@ -// -// SearchResultReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/7/24. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -35,8 +31,8 @@ final class SearchResultReactor: Reactor { var initialState: State var disposeBag = DisposeBag() - private var popUpAPIUseCase = PopUpAPIUseCaseImpl(repository: PopUpAPIRepositoryImpl(provider: ProviderImpl())) - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private var popUpAPIUseCase: PopUpAPIUseCase + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in guard let self = self else { @@ -59,7 +55,12 @@ final class SearchResultReactor: Reactor { private let spacing64Section = SpacingSection(inputDataList: [.init(spacing: 64)]) // MARK: - init - init() { + init( + userAPIUseCase: UserAPIUseCase, + popUpAPIUseCase: PopUpAPIUseCase + ) { + self.userAPIUseCase = userAPIUseCase + self.popUpAPIUseCase = popUpAPIUseCase self.initialState = State() } @@ -123,7 +124,13 @@ final class SearchResultReactor: Reactor { newState.isEmptyResult = true case .moveToDetailScene(let controller, let indexPath): let nextController = DetailController() - nextController.reactor = DetailReactor(popUpID: searchListSection.inputDataList[indexPath.row].id) + nextController.reactor = DetailReactor( + popUpID: searchListSection.inputDataList[indexPath.row].id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: popUpAPIUseCase, + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) } return newState diff --git a/Poppool/Poppool/Presentation/Scene/Search/AfterSearch/View/SearchResultCountSection/SearchResultCountSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/View/SearchResultCountSection/SearchResultCountSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/AfterSearch/View/SearchResultCountSection/SearchResultCountSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/View/SearchResultCountSection/SearchResultCountSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/AfterSearch/View/SearchResultCountSection/SearchResultCountSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/View/SearchResultCountSection/SearchResultCountSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/AfterSearch/View/SearchResultCountSection/SearchResultCountSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/View/SearchResultCountSection/SearchResultCountSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/AfterSearch/View/SearchResultView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/View/SearchResultView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/AfterSearch/View/SearchResultView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/AfterSearch/View/SearchResultView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/SearchController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/SearchController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/SearchController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/SearchController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/SearchReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/SearchReactor.swift similarity index 94% rename from Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/SearchReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/SearchReactor.swift index a8fa3122..17cd6119 100644 --- a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/SearchReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/SearchReactor.swift @@ -1,12 +1,8 @@ -// -// SearchReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/4/24. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -58,8 +54,8 @@ final class SearchReactor: Reactor { private var isLoading: Bool = false let userDefaultService = UserDefaultService() - private let popUpAPIUseCase = PopUpAPIUseCaseImpl(repository: PopUpAPIRepositoryImpl(provider: ProviderImpl())) - private let userAPIUseCase = UserAPIUseCaseImpl(repository: UserAPIRepositoryImpl(provider: ProviderImpl())) + private let popUpAPIUseCase: PopUpAPIUseCase + private let userAPIUseCase: UserAPIUseCase lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -91,7 +87,12 @@ final class SearchReactor: Reactor { private let spacing64Section = SpacingSection(inputDataList: [.init(spacing: 64)]) // MARK: - init - init() { + init( + userAPIUseCase: UserAPIUseCase, + popUpAPIUseCase: PopUpAPIUseCase + ) { + self.userAPIUseCase = userAPIUseCase + self.popUpAPIUseCase = popUpAPIUseCase self.initialState = State() } @@ -188,7 +189,10 @@ final class SearchReactor: Reactor { case .moveToCategoryScene(let controller): let categoryIDList = searchCategorySection.inputDataList.compactMap { $0.id } let nextController = SearchCategoryController() - nextController.reactor = SearchCategoryReactor(originCategoryList: categoryIDList) + nextController.reactor = SearchCategoryReactor( + originCategoryList: categoryIDList, + signUpAPIUseCase: DIContainer.resolve(SignUpAPIUseCase.self) + ) controller.presentPanModal(nextController) nextController.reactor?.state .withUnretained(self) @@ -219,7 +223,13 @@ final class SearchReactor: Reactor { .disposed(by: nextController.disposeBag) case .moveToDetailScene(let controller, let indexPath): let nextController = DetailController() - nextController.reactor = DetailReactor(popUpID: searchListSection.inputDataList[indexPath.row].id) + nextController.reactor = DetailReactor( + popUpID: searchListSection.inputDataList[indexPath.row].id, + userAPIUseCase: userAPIUseCase, + popUpAPIUseCase: popUpAPIUseCase, + commentAPIUseCase: DIContainer.resolve(CommentAPIUseCase.self), + preSignedUseCase: DIContainer.resolve(PreSignedUseCase.self) + ) controller.navigationController?.pushViewController(nextController, animated: true) case .setSearchKeyWord(let text): newState.searchKeyWord = text diff --git a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/CancelableTagSection/CancelableTagSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/CancelableTagSection/CancelableTagSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/CancelableTagSection/CancelableTagSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/CancelableTagSection/CancelableTagSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/CancelableTagSection/CancelableTagSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/CancelableTagSection/CancelableTagSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/CancelableTagSection/CancelableTagSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/CancelableTagSection/CancelableTagSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchCountTitleSection/SearchCountTitleSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchCountTitleSection/SearchCountTitleSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchCountTitleSection/SearchCountTitleSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchCountTitleSection/SearchCountTitleSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchCountTitleSection/SearchCountTitleSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchCountTitleSection/SearchCountTitleSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchCountTitleSection/SearchCountTitleSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchCountTitleSection/SearchCountTitleSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchTitleSection/SearchTitleSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchTitleSection/SearchTitleSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchTitleSection/SearchTitleSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchTitleSection/SearchTitleSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchTitleSection/SearchTitleSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchTitleSection/SearchTitleSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchTitleSection/SearchTitleSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchTitleSection/SearchTitleSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/BeforeSearch/View/SearchView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/BeforeSearch/View/SearchView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/CategoryController/SearchCategoryController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/CategoryController/SearchCategoryController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/CategoryController/SearchCategoryController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/CategoryController/SearchCategoryController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/CategoryController/SearchCategoryReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/CategoryController/SearchCategoryReactor.swift similarity index 94% rename from Poppool/Poppool/Presentation/Scene/Search/CategoryController/SearchCategoryReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/CategoryController/SearchCategoryReactor.swift index 383d676f..267f5dcb 100644 --- a/Poppool/Poppool/Presentation/Scene/Search/CategoryController/SearchCategoryReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/CategoryController/SearchCategoryReactor.swift @@ -1,12 +1,7 @@ -// -// SearchCategoryReactor.swift -// Poppool -// -// Created by SeoJunYoung on 12/6/24. -// - import UIKit +import DomainInterface + import ReactorKit import RxCocoa import RxSwift @@ -43,7 +38,7 @@ final class SearchCategoryReactor: Reactor { var initialState: State var disposeBag = DisposeBag() var originCategoryList: [Int64] - private let signUpAPIUseCase = SignUpAPIUseCaseImpl(repository: SignUpRepositoryImpl(provider: ProviderImpl())) + private let signUpAPIUseCase: SignUpAPIUseCase private var tagSection = TagSection(inputDataList: []) lazy var compositionalLayout: UICollectionViewCompositionalLayout = { UICollectionViewCompositionalLayout { [weak self] section, env in @@ -60,9 +55,13 @@ final class SearchCategoryReactor: Reactor { }() // MARK: - init - init(originCategoryList: [Int64]) { + init( + originCategoryList: [Int64], + signUpAPIUseCase: SignUpAPIUseCase + ) { self.initialState = State() self.originCategoryList = originCategoryList + self.signUpAPIUseCase = signUpAPIUseCase } // MARK: - Reactor Methods diff --git a/Poppool/Poppool/Presentation/Scene/Search/CategoryController/SearchCategoryView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/CategoryController/SearchCategoryView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/CategoryController/SearchCategoryView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/CategoryController/SearchCategoryView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/Main/SearchMainController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/Main/SearchMainController.swift similarity index 93% rename from Poppool/Poppool/Presentation/Scene/Search/Main/SearchMainController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/Main/SearchMainController.swift index c9b9fe6f..7eb6542e 100644 --- a/Poppool/Poppool/Presentation/Scene/Search/Main/SearchMainController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/Main/SearchMainController.swift @@ -1,12 +1,8 @@ -// -// SearchMainController.swift -// Poppool -// -// Created by SeoJunYoung on 12/7/24. -// - import UIKit +import DomainInterface +import Infrastructure + import Pageboy import ReactorKit import RxCocoa @@ -25,13 +21,19 @@ final class SearchMainController: BaseTabmanController, View { var beforeController: SearchController = { let controller = SearchController() - controller.reactor = SearchReactor() + controller.reactor = SearchReactor( + userAPIUseCase: DIContainer.resolve(UserAPIUseCase.self), + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self) + ) return controller }() var afterController: SearchResultController = { let controller = SearchResultController() - controller.reactor = SearchResultReactor() + controller.reactor = SearchResultReactor( + userAPIUseCase: DIContainer.resolve(UserAPIUseCase.self), + popUpAPIUseCase: DIContainer.resolve(PopUpAPIUseCase.self) + ) return controller }() diff --git a/Poppool/Poppool/Presentation/Scene/Search/Main/SearchMainReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/Main/SearchMainReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/Main/SearchMainReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/Main/SearchMainReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/Main/SearchMainView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/Main/SearchMainView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/Main/SearchMainView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/Main/SearchMainView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/SortedController/SearchSortedController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/SortedController/SearchSortedController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/SortedController/SearchSortedController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/SortedController/SearchSortedController.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/SortedController/SearchSortedReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/SortedController/SearchSortedReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/SortedController/SearchSortedReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/SortedController/SearchSortedReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/Search/SortedController/SearchSortedView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/SortedController/SearchSortedView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Search/SortedController/SearchSortedView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Search/SortedController/SearchSortedView.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Main/SignUpMainController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Main/SignUpMainController.swift similarity index 96% rename from Poppool/Poppool/Presentation/Scene/SignUp/Main/SignUpMainController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Main/SignUpMainController.swift index 6fd26f5c..e72b9a4c 100644 --- a/Poppool/Poppool/Presentation/Scene/SignUp/Main/SignUpMainController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Main/SignUpMainController.swift @@ -1,12 +1,8 @@ -// -// SignUpMainController.swift -// Poppool -// -// Created by SeoJunYoung on 11/25/24. -// - import UIKit +import DomainInterface +import Infrastructure + import Pageboy import ReactorKit import RxCocoa @@ -31,13 +27,17 @@ final class SignUpMainController: BaseTabmanController, View { var step2Controller: SignUpStep2Controller = { let controller = SignUpStep2Controller() - controller.reactor = SignUpStep2Reactor() + controller.reactor = SignUpStep2Reactor( + signUpAPIUseCase: DIContainer.resolve(SignUpAPIUseCase.self) + ) return controller }() var step3Controller: SignUpStep3Controller = { let controller = SignUpStep3Controller() - controller.reactor = SignUpStep3Reactor() + controller.reactor = SignUpStep3Reactor( + signUpAPIUseCase: DIContainer.resolve(SignUpAPIUseCase.self) + ) return controller }() diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Main/SignUpMainReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Main/SignUpMainReactor.swift similarity index 95% rename from Poppool/Poppool/Presentation/Scene/SignUp/Main/SignUpMainReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Main/SignUpMainReactor.swift index 363a7ec0..c4f3db3a 100644 --- a/Poppool/Poppool/Presentation/Scene/SignUp/Main/SignUpMainReactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Main/SignUpMainReactor.swift @@ -1,9 +1,5 @@ -// -// SignUpMainReactor.swift -// Poppool -// -// Created by SeoJunYoung on 11/25/24. -// +import DomainInterface +import Infrastructure import ReactorKit import RxCocoa @@ -60,15 +56,20 @@ final class SignUpMainReactor: Reactor { private var authrizationCode: String? - private var signUpAPIUseCase = SignUpAPIUseCaseImpl(repository: SignUpRepositoryImpl(provider: ProviderImpl())) + private let signUpAPIUseCase: SignUpAPIUseCase private let userDefaultService = UserDefaultService() var isFirstResponderCase: Bool // MARK: - init - init(isFirstResponderCase: Bool, authrizationCode: String?) { + init( + isFirstResponderCase: Bool, + authrizationCode: String?, + signUpAPIUseCase: SignUpAPIUseCase + ) { self.initialState = State() self.authrizationCode = authrizationCode self.isFirstResponderCase = isFirstResponderCase + self.signUpAPIUseCase = signUpAPIUseCase } // MARK: - Reactor Methods @@ -122,8 +123,6 @@ final class SignUpMainReactor: Reactor { let nickName = newState.nickName, let gender = newState.gender else { return newState } - signUpAPIUseCase = SignUpAPIUseCaseImpl(repository: SignUpRepositoryImpl(provider: ProviderImpl())) - signUpAPIUseCase.trySignUp( nickName: nickName, gender: gender, diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Main/View/SignUpMainView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Main/View/SignUpMainView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Main/View/SignUpMainView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Main/View/SignUpMainView.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteController.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/SignUpComplete/SignUpCompleteView.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step1/SignUpStep1Controller.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/SignUpStep1Controller.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step1/SignUpStep1Controller.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/SignUpStep1Controller.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step1/SignUpStep1Reactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/SignUpStep1Reactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step1/SignUpStep1Reactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/SignUpStep1Reactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step1/View/SignUpCheckBoxButton.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/View/SignUpCheckBoxButton.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step1/View/SignUpCheckBoxButton.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/View/SignUpCheckBoxButton.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step1/View/SignUpStep1View.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/View/SignUpStep1View.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step1/View/SignUpStep1View.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/View/SignUpStep1View.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step1/View/SignUpTermsView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/View/SignUpTermsView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step1/View/SignUpTermsView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step1/View/SignUpTermsView.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step2/IntroState.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/IntroState.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step2/IntroState.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/IntroState.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step2/NickNameState.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/NickNameState.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step2/NickNameState.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/NickNameState.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step2/SignUpStep2Controller.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/SignUpStep2Controller.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step2/SignUpStep2Controller.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/SignUpStep2Controller.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step2/SignUpStep2Reactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/SignUpStep2Reactor.swift similarity index 94% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step2/SignUpStep2Reactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/SignUpStep2Reactor.swift index 9604a80d..3c700b01 100644 --- a/Poppool/Poppool/Presentation/Scene/SignUp/Step2/SignUpStep2Reactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/SignUpStep2Reactor.swift @@ -1,12 +1,8 @@ -// -// SignUpStep2Reactor.swift -// Poppool -// -// Created by SeoJunYoung on 11/25/24. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift @@ -39,11 +35,14 @@ final class SignUpStep2Reactor: Reactor { var initialState: State var disposeBag = DisposeBag() - private let signUpAPIUseCase = SignUpAPIUseCaseImpl(repository: SignUpRepositoryImpl(provider: ProviderImpl())) + private let signUpAPIUseCase: SignUpAPIUseCase private var nickName: String? // MARK: - init - init() { + init( + signUpAPIUseCase: SignUpAPIUseCase + ) { + self.signUpAPIUseCase = signUpAPIUseCase self.initialState = State() } diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step2/SignUpStep2View.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/SignUpStep2View.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step2/SignUpStep2View.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step2/SignUpStep2View.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step3/SignUpStep3Controller.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/SignUpStep3Controller.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step3/SignUpStep3Controller.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/SignUpStep3Controller.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step3/SignUpStep3Reactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/SignUpStep3Reactor.swift similarity index 93% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step3/SignUpStep3Reactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/SignUpStep3Reactor.swift index 30fbc30b..078e6d52 100644 --- a/Poppool/Poppool/Presentation/Scene/SignUp/Step3/SignUpStep3Reactor.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/SignUpStep3Reactor.swift @@ -1,12 +1,7 @@ -// -// SignUpStep3Reactor.swift -// Poppool -// -// Created by SeoJunYoung on 11/25/24. -// - import UIKit +import DomainInterface + import ReactorKit import RxCocoa import RxSwift @@ -34,7 +29,7 @@ final class SignUpStep3Reactor: Reactor { var initialState: State var disposeBag = DisposeBag() - private let signUpAPIUseCase = SignUpAPIUseCaseImpl(repository: SignUpRepositoryImpl(provider: ProviderImpl())) + private let signUpAPIUseCase: SignUpAPIUseCase private var cetegoryIDList: [Int64] = [] lazy var compositionalLayout: UICollectionViewCompositionalLayout = { @@ -54,7 +49,10 @@ final class SignUpStep3Reactor: Reactor { private var categorySection: TagSection = TagSection(inputDataList: []) // MARK: - init - init() { + init( + signUpAPIUseCase: SignUpAPIUseCase + ) { + self.signUpAPIUseCase = signUpAPIUseCase self.initialState = State() } diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step3/View/SignUpStep3View.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/View/SignUpStep3View.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step3/View/SignUpStep3View.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/View/SignUpStep3View.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step3/View/TagSection/TagSection.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/View/TagSection/TagSection.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step3/View/TagSection/TagSection.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/View/TagSection/TagSection.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step3/View/TagSection/TagSectionCell.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/View/TagSection/TagSectionCell.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step3/View/TagSection/TagSectionCell.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step3/View/TagSection/TagSectionCell.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedController.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedReactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedReactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedReactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedReactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/AgeSelectedModal/AgeSelectedView.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step4/Main/SignUpStep4Controller.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/Main/SignUpStep4Controller.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step4/Main/SignUpStep4Controller.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/Main/SignUpStep4Controller.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step4/Main/SignUpStep4Reactor.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/Main/SignUpStep4Reactor.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step4/Main/SignUpStep4Reactor.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/Main/SignUpStep4Reactor.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step4/Main/View/AgeSelectedButton.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/Main/View/AgeSelectedButton.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step4/Main/View/AgeSelectedButton.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/Main/View/AgeSelectedButton.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/Step4/Main/View/SignUpStep4View.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/Main/View/SignUpStep4View.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/Step4/Main/View/SignUpStep4View.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/Step4/Main/View/SignUpStep4View.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/TermsDetail/TermsDetailController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/TermsDetail/TermsDetailController.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/TermsDetail/TermsDetailController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/TermsDetail/TermsDetailController.swift diff --git a/Poppool/Poppool/Presentation/Scene/SignUp/TermsDetail/TermsDetailView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/TermsDetail/TermsDetailView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/SignUp/TermsDetail/TermsDetailView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/SignUp/TermsDetail/TermsDetailView.swift diff --git a/Poppool/Poppool/Presentation/Scene/Splash/SplashController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Splash/SplashController.swift similarity index 81% rename from Poppool/Poppool/Presentation/Scene/Splash/SplashController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Splash/SplashController.swift index c4fb9af4..a4bc2163 100644 --- a/Poppool/Poppool/Presentation/Scene/Splash/SplashController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Splash/SplashController.swift @@ -1,32 +1,29 @@ -// -// SplashController.swift -// Poppool -// -// Created by Porori on 11/26/24. -// - import UIKit +import DomainInterface +import Infrastructure + import ReactorKit import RxCocoa import RxSwift import SnapKit -final class SplashController: BaseViewController { +public final class SplashController: BaseViewController { // MARK: - Properties var disposeBag = DisposeBag() private var mainView = SplashView() - private let authAPIUseCase = AuthAPIUseCaseImpl(repository: AuthAPIRepositoryImpl(provider: ProviderImpl())) - private let keyChainService = KeyChainService() + // //FIXME: Reactor 태워서 UseCase 처리하도록 수정 + @Dependency private var authAPIUseCase: AuthAPIUseCase + @Dependency private var keyChainService: KeyChainService private var rootViewController: UIViewController? } // MARK: - Life Cycle extension SplashController { - override func viewDidLoad() { + public override func viewDidLoad() { super.viewDidLoad() setUp() setRootview() @@ -65,7 +62,9 @@ private extension SplashController { }, onError: { [weak self] _ in guard let self = self else { return } let loginViewController = LoginController() - loginViewController.reactor = LoginReactor() + loginViewController.reactor = LoginReactor( + authAPIUseCase: authAPIUseCase + ) let loginNavigationController = UINavigationController(rootViewController: loginViewController) rootViewController = loginNavigationController }) diff --git a/Poppool/Poppool/Presentation/Scene/Splash/View/SplashView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/Splash/View/SplashView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Scene/Splash/View/SplashView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/Splash/View/SplashView.swift diff --git a/Poppool/Poppool/Presentation/Scene/TabbarController/TabbarController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Scene/TabbarController/TabbarController.swift similarity index 94% rename from Poppool/Poppool/Presentation/Scene/TabbarController/TabbarController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Scene/TabbarController/TabbarController.swift index efac523a..8bee4e8b 100644 --- a/Poppool/Poppool/Presentation/Scene/TabbarController/TabbarController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Scene/TabbarController/TabbarController.swift @@ -1,12 +1,8 @@ -// -// TabbarController.swift -// Poppool -// -// Created by SeoJunYoung on 12/1/24. -// - import UIKit +import DomainInterface +import Infrastructure + class WaveTabBarController: UITabBarController, UITabBarControllerDelegate { private let waveLayer = CAShapeLayer() @@ -193,18 +189,21 @@ class WaveTabBarController: UITabBarController, UITabBarControllerDelegate { } func addSomeTabItems() { - let provider = ProviderImpl() - let mapController = MapViewController() - let mapUseCase = DefaultMapUseCase(repository: DefaultMapRepository(provider: provider)) - let directionRepository = DefaultMapDirectionRepository(provider: provider) - mapController.reactor = MapReactor(useCase: mapUseCase, directionRepository: directionRepository) + + mapController.reactor = MapReactor( + mapUseCase: DIContainer.resolve(MapUseCase.self), + mapDirectionRepository: DIContainer.resolve(MapDirectionRepository.self) + ) let homeController = HomeController() - homeController.reactor = HomeReactor() + homeController.reactor = HomeReactor( + userAPIUseCase: DIContainer.resolve(UserAPIUseCase.self), + homeAPIUseCase: DIContainer.resolve(HomeAPIUseCase.self) + ) let myPageController = MyPageController() - myPageController.reactor = MyPageReactor() + myPageController.reactor = MyPageReactor(userAPIUseCase: DIContainer.resolve(UserAPIUseCase.self)) let iconSize = CGSize(width: 32, height: 32) // 탭바 아이템 생성 diff --git a/Poppool/Poppool/Presentation/Utills/Common/ClusteringManager.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/ClusteringManager.swift similarity index 99% rename from Poppool/Poppool/Presentation/Utills/Common/ClusteringManager.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/ClusteringManager.swift index ad3b265f..23bebd96 100644 --- a/Poppool/Poppool/Presentation/Utills/Common/ClusteringManager.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/ClusteringManager.swift @@ -1,3 +1,6 @@ +import DomainInterface +import Infrastructure + import NMapsMap class ClusteringManager { diff --git a/Poppool/Poppool/Presentation/Utills/Common/ClusteringModels.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/ClusteringModels.swift similarity index 96% rename from Poppool/Poppool/Presentation/Utills/Common/ClusteringModels.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/ClusteringModels.swift index b0f80b7d..84da1db2 100644 --- a/Poppool/Poppool/Presentation/Utills/Common/ClusteringModels.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/ClusteringModels.swift @@ -1,3 +1,5 @@ +import DomainInterface + import NMapsMap enum MapZoomLevel { diff --git a/Poppool/Poppool/Presentation/Utills/Common/DateTimePickerManager.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/DateTimePickerManager.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/Common/DateTimePickerManager.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/DateTimePickerManager.swift diff --git a/Poppool/Poppool/Presentation/Utills/Common/ExtendedImage.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/ExtendedImage.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/Common/ExtendedImage.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/ExtendedImage.swift diff --git a/Poppool/Poppool/Presentation/Utills/Common/FilterType.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/FilterType.swift similarity index 91% rename from Poppool/Poppool/Presentation/Utills/Common/FilterType.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/FilterType.swift index b19e7c64..c181a940 100644 --- a/Poppool/Poppool/Presentation/Utills/Common/FilterType.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/FilterType.swift @@ -1,5 +1,4 @@ import Foundation -import UIKit /// 맵과 리스트에서 공통으로 사용하는 필터 타입 enum FilterType { diff --git a/Poppool/Poppool/Presentation/Utills/Common/LocationPermissionBottomSheet.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/LocationPermissionBottomSheet.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/Common/LocationPermissionBottomSheet.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/LocationPermissionBottomSheet.swift diff --git a/Poppool/Poppool/Presentation/Utills/Common/MapFilterChips.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/MapFilterChips.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/Common/MapFilterChips.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/MapFilterChips.swift diff --git a/Poppool/Poppool/Presentation/Utills/Common/MapUtilities.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/MapUtilities.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/Common/MapUtilities.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/MapUtilities.swift diff --git a/Poppool/Poppool/Presentation/Utills/Common/NMFMapViewDelegateProxy.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/NMFMapViewDelegateProxy.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/Common/NMFMapViewDelegateProxy.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/NMFMapViewDelegateProxy.swift diff --git a/Poppool/Poppool/Presentation/Utills/Common/RegionDefinitions.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/RegionDefinitions.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/Common/RegionDefinitions.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Common/RegionDefinitions.swift diff --git a/Poppool/Poppool/Presentation/Utills/Controllers/BaseTabmanController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Controllers/BaseTabmanController.swift similarity index 89% rename from Poppool/Poppool/Presentation/Utills/Controllers/BaseTabmanController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Controllers/BaseTabmanController.swift index 639a66e5..42a777dd 100644 --- a/Poppool/Poppool/Presentation/Utills/Controllers/BaseTabmanController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Controllers/BaseTabmanController.swift @@ -1,12 +1,7 @@ -// -// BaseTabmanController.swift -// MomsVillage -// -// Created by SeoJunYoung on 9/25/24. -// - import UIKit +import Infrastructure + import Pageboy import Tabman diff --git a/Poppool/Poppool/Presentation/Utills/Controllers/BaseViewController.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Controllers/BaseViewController.swift similarity index 83% rename from Poppool/Poppool/Presentation/Utills/Controllers/BaseViewController.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Controllers/BaseViewController.swift index 2184b672..03eeded3 100644 --- a/Poppool/Poppool/Presentation/Utills/Controllers/BaseViewController.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Controllers/BaseViewController.swift @@ -1,21 +1,16 @@ -// -// BaseViewController.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/9/24. -// - import UIKit +import Infrastructure + import RxCocoa import RxSwift -class BaseViewController: UIViewController { +public class BaseViewController: UIViewController { var systemStatusBarIsDark: BehaviorRelay = .init(value: true) var systemStatusBarDisposeBag = DisposeBag() - init() { + public init() { super.init(nibName: nil, bundle: nil) Logger.log( message: "\(self) init", @@ -25,18 +20,18 @@ class BaseViewController: UIViewController { ) } - required init?(coder: NSCoder) { + public required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - override func viewDidLoad() { + public override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = .white self.navigationController?.navigationBar.isHidden = true systemStatusBarIsDarkBind() } - override func viewWillAppear(_ animated: Bool) { + public override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) systemStatusBarIsDark.accept(systemStatusBarIsDark.value) } diff --git a/Poppool/Poppool/Presentation/Utills/Interfaces/InOutputable.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/InOutputable.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/Interfaces/InOutputable.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/InOutputable.swift diff --git a/Poppool/Poppool/Presentation/Utills/Interfaces/Sectionable/SectionDecorationItem.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/Sectionable/SectionDecorationItem.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/Interfaces/Sectionable/SectionDecorationItem.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/Sectionable/SectionDecorationItem.swift diff --git a/Poppool/Poppool/Presentation/Utills/Interfaces/Sectionable/SectionSupplementaryItem.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/Sectionable/SectionSupplementaryItem.swift similarity index 96% rename from Poppool/Poppool/Presentation/Utills/Interfaces/Sectionable/SectionSupplementaryItem.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/Sectionable/SectionSupplementaryItem.swift index 2837db0c..c37a5e4b 100644 --- a/Poppool/Poppool/Presentation/Utills/Interfaces/Sectionable/SectionSupplementaryItem.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/Sectionable/SectionSupplementaryItem.swift @@ -1,12 +1,7 @@ -// -// SectionSupplementaryItem.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/29/24. -// - import UIKit +import Infrastructure + /// `SectionSupplementaryItem` 구조체는 섹션에 추가될 Supplementary View에 대한 정보를 정의합니다. /// 제네릭 타입 `View`는 `UICollectionReusableView`와 `InOutputable` 프로토콜을 준수해야 합니다. struct SectionSupplementaryItem: SectionSupplementaryItemable { diff --git a/Poppool/Poppool/Presentation/Utills/Interfaces/Sectionable/Sectionable.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/Sectionable/Sectionable.swift similarity index 98% rename from Poppool/Poppool/Presentation/Utills/Interfaces/Sectionable/Sectionable.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/Sectionable/Sectionable.swift index 158f9092..7153b6a7 100644 --- a/Poppool/Poppool/Presentation/Utills/Interfaces/Sectionable/Sectionable.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Interfaces/Sectionable/Sectionable.swift @@ -1,12 +1,7 @@ -// -// Sectionable.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/29/24. -// - import UIKit +import Infrastructure + import RxSwift import SnapKit diff --git a/Poppool/Poppool/Infrastructure/AppleLoginService.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Service/AppleLoginService.swift similarity index 90% rename from Poppool/Poppool/Infrastructure/AppleLoginService.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Service/AppleLoginService.swift index ecee526f..18458103 100644 --- a/Poppool/Poppool/Infrastructure/AppleLoginService.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Service/AppleLoginService.swift @@ -1,14 +1,12 @@ -// -// AppleLoginService.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/20/24. -// +import DomainInterface +import Infrastructure import AuthenticationServices import RxSwift -final class AppleLoginService: NSObject, AuthServiceable { +public final class AppleLoginService: NSObject, AuthServiceable { + + public override init() { } // 사용자 자격 증명 정보를 방출할 subject private var authServiceResponse: PublishSubject = .init() @@ -34,7 +32,7 @@ final class AppleLoginService: NSObject, AuthServiceable { extension AppleLoginService: ASAuthorizationControllerPresentationContextProviding, ASAuthorizationControllerDelegate { // 인증 컨트롤러의 프레젠테이션 앵커를 반환하는 함수 - func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor { + public func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor { let scenes = UIApplication.shared.connectedScenes let windowSecne = scenes.first as? UIWindowScene guard let window = windowSecne?.windows.first else { @@ -50,7 +48,7 @@ extension AppleLoginService: ASAuthorizationControllerPresentationContextProvidi } // 인증 성공 시 호출되는 함수 - func authorizationController( + public func authorizationController( controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization ) { @@ -81,7 +79,7 @@ extension AppleLoginService: ASAuthorizationControllerPresentationContextProvidi } } // 인증 실패 시 호출되는 함수 - func authorizationController( + public func authorizationController( controller: ASAuthorizationController, didCompleteWithError error: Error ) { diff --git a/Poppool/Poppool/Infrastructure/AuthServiceable.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Service/AuthServiceable.swift similarity index 55% rename from Poppool/Poppool/Infrastructure/AuthServiceable.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Service/AuthServiceable.swift index cd20f3ee..ca1cc728 100644 --- a/Poppool/Poppool/Infrastructure/AuthServiceable.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Service/AuthServiceable.swift @@ -1,11 +1,6 @@ -// -// AuthService.swift -// MomsVillage -// -// Created by SeoJunYoung on 8/22/24. -// +import Foundation -import UIKit +import DomainInterface import RxSwift @@ -15,13 +10,6 @@ protocol AuthServiceable: AnyObject { func fetchUserCredential() -> Observable } -struct AuthServiceResponse: Encodable { - var idToken: String? - var authorizationCode: String? - var kakaoUserId: Int64? - var kakaoAccessToken: String? -} - enum AuthError: Error { case notInstalled case unknownError(description: String?) diff --git a/Poppool/Poppool/Infrastructure/KakaoLoginService.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Service/KakaoLoginService.swift similarity index 94% rename from Poppool/Poppool/Infrastructure/KakaoLoginService.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/Service/KakaoLoginService.swift index 382133e9..634cf838 100644 --- a/Poppool/Poppool/Infrastructure/KakaoLoginService.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/Service/KakaoLoginService.swift @@ -1,8 +1,13 @@ +import DomainInterface +import Infrastructure + import KakaoSDKAuth import KakaoSDKUser import RxSwift -final class KakaoLoginService: AuthServiceable { +public final class KakaoLoginService: AuthServiceable { + + public init() { } var disposeBag = DisposeBag() @@ -22,7 +27,7 @@ final class KakaoLoginService: AuthServiceable { } } - func fetchUserCredential() -> Observable { + public func fetchUserCredential() -> Observable { return Observable.create { [weak self] observer in guard let self else { Logger.log( diff --git a/Poppool/Poppool/Presentation/Utills/ToastMaker/BookMarkToastView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/ToastMaker/BookMarkToastView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/ToastMaker/BookMarkToastView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/ToastMaker/BookMarkToastView.swift diff --git a/Poppool/Poppool/Presentation/Utills/ToastMaker/ToastMaker.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/ToastMaker/ToastMaker.swift similarity index 95% rename from Poppool/Poppool/Presentation/Utills/ToastMaker/ToastMaker.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/ToastMaker/ToastMaker.swift index 54f6fdf7..7c6f29be 100644 --- a/Poppool/Poppool/Presentation/Utills/ToastMaker/ToastMaker.swift +++ b/Poppool/PresentationLayer/Presentation/Presentation/Utills/ToastMaker/ToastMaker.swift @@ -1,12 +1,8 @@ -// -// ToastMaker.swift -// Poppool -// -// Created by SeoJunYoung on 11/25/24. -// - import UIKit +import DomainInterface +import Infrastructure + import RxCocoa import RxSwift import SnapKit @@ -92,7 +88,9 @@ extension ToastMaker { .withUnretained(currentVC) .subscribe(onNext: { (owner, _) in let nextController = MyPageBookmarkController() - nextController.reactor = MyPageBookmarkReactor() + nextController.reactor = MyPageBookmarkReactor( + userAPIUseCase: DIContainer.resolve(UserAPIUseCase.self) + ) owner.navigationController?.pushViewController(nextController, animated: true) }) .disposed(by: disposeBag) diff --git a/Poppool/Poppool/Presentation/Utills/ToastMaker/ToastView.swift b/Poppool/PresentationLayer/Presentation/Presentation/Utills/ToastMaker/ToastView.swift similarity index 100% rename from Poppool/Poppool/Presentation/Utills/ToastMaker/ToastView.swift rename to Poppool/PresentationLayer/Presentation/Presentation/Utills/ToastMaker/ToastView.swift