diff --git a/Animal-Crossing-Wiki/.swiftlint.yml b/Animal-Crossing-Wiki/.swiftlint.yml index 7adfa434..7caca248 100644 --- a/Animal-Crossing-Wiki/.swiftlint.yml +++ b/Animal-Crossing-Wiki/.swiftlint.yml @@ -3,6 +3,7 @@ included: excluded: # 린트 과정에서 무시할 파일 경로. `included`보다 우선순위 높음 - Animal-Crossing-Wiki/Resources/AppDelegate.swift - Animal-Crossing-Wiki/Resources/SceneDelegate.swift + - Animal-Crossing-Wiki/Sources/Utility/Items.swift type_body_length: # 타입 길이 warning: 200 error: 250 @@ -18,7 +19,7 @@ function_body_length: error: 300 type_body_length: - 300 # warning - - 400 + - 500 file_length: warning: 500 error: 1200 @@ -30,6 +31,8 @@ disabled_rules: # 실행에서 제외할 룰 식별자들 - trailing_whitespace - vertical_parameter_alignment - cyclomatic_complexity + - void_function_in_ternary + - comment_spacing opt_in_rules: # 일부 룰은 옵트 인 형태로 제공 - empty_count - conditional_returns_on_newline diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki.xcodeproj/project.pbxproj b/Animal-Crossing-Wiki/Animal-Crossing-Wiki.xcodeproj/project.pbxproj index 00bfce50..0d108470 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki.xcodeproj/project.pbxproj +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki.xcodeproj/project.pbxproj @@ -7,6 +7,33 @@ objects = { /* Begin PBXBuildFile section */ + 023349F629261A3800C7080F /* PhotosReqeust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023349F529261A3800C7080F /* PhotosReqeust.swift */; }; + 023349F829261A5700C7080F /* PhotosResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023349F729261A5700C7080F /* PhotosResponseDTO.swift */; }; + 023349FA29274D1700C7080F /* TopsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023349F929274D1700C7080F /* TopsRequest.swift */; }; + 023349FC29274D3500C7080F /* TopsResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023349FB29274D3500C7080F /* TopsResponseDTO.swift */; }; + 023349FE2927668400C7080F /* BottomsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023349FD2927668400C7080F /* BottomsRequest.swift */; }; + 02334A00292766AB00C7080F /* BottomsResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023349FF292766AB00C7080F /* BottomsResponseDTO.swift */; }; + 02334A02292769BF00C7080F /* DressUpRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A01292769BF00C7080F /* DressUpRequest.swift */; }; + 02334A04292769DD00C7080F /* DressUpResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A03292769DD00C7080F /* DressUpResponseDTO.swift */; }; + 02334A062927701200C7080F /* HeadwearRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A052927701200C7080F /* HeadwearRequest.swift */; }; + 02334A082927702600C7080F /* HeadwearResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A072927702600C7080F /* HeadwearResponseDTO.swift */; }; + 02334A0A292B468100C7080F /* AccessoriesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A09292B468100C7080F /* AccessoriesRequest.swift */; }; + 02334A0C292B469E00C7080F /* AccessoriesResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A0B292B469E00C7080F /* AccessoriesResponseDTO.swift */; }; + 02334A0E292B4A2300C7080F /* SocksRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A0D292B4A2300C7080F /* SocksRequest.swift */; }; + 02334A10292B4A2D00C7080F /* SocksResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A0F292B4A2D00C7080F /* SocksResponseDTO.swift */; }; + 02334A12292B4DDD00C7080F /* ShoesResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A11292B4DDD00C7080F /* ShoesResponseDTO.swift */; }; + 02334A14292B4E1000C7080F /* ShoesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A13292B4E1000C7080F /* ShoesRequest.swift */; }; + 02334A16292B52B800C7080F /* BagsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A15292B52B800C7080F /* BagsRequest.swift */; }; + 02334A18292B55C700C7080F /* BagsResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A17292B55C700C7080F /* BagsResponseDTO.swift */; }; + 02334A1A292B66DF00C7080F /* UmbrellasRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A19292B66DF00C7080F /* UmbrellasRequest.swift */; }; + 02334A1C292B66F900C7080F /* UmbrellasResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A1B292B66F900C7080F /* UmbrellasResponseDTO.swift */; }; + 02334A1E292B6B2500C7080F /* WetSuitRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A1D292B6B2500C7080F /* WetSuitRequest.swift */; }; + 02334A20292B6B5E00C7080F /* WetSuitResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02334A1F292B6B5E00C7080F /* WetSuitResponseDTO.swift */; }; + 023447D3292DE70F00B9457C /* CollectionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023447D2292DE70F00B9457C /* CollectionCoordinator.swift */; }; + 023447D5292E064C00B9457C /* ReactionsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023447D4292E064C00B9457C /* ReactionsRequest.swift */; }; + 023447D7292E067400B9457C /* ReactionsResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023447D6292E067400B9457C /* ReactionsResponseDTO.swift */; }; + 023447D9292E178B00B9457C /* FencingReqeust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023447D8292E178B00B9457C /* FencingReqeust.swift */; }; + 023447DB292E179C00B9457C /* FencingResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023447DA292E179C00B9457C /* FencingResponseDTO.swift */; }; 9A1DB1CE2840504B00689F11 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 9A1DB1CD2840504B00689F11 /* Kingfisher */; }; 9A1DB1D2284069DD00689F11 /* UIImageView+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1DB1D1284069DD00689F11 /* UIImageView+extension.swift */; }; 9A1DB1D7284081E400689F11 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 9A1DB1D6284081E400689F11 /* Alamofire */; }; @@ -113,7 +140,6 @@ 9A7ACF0C287EC26F001D47CB /* ItemBellsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF03287EC26F001D47CB /* ItemBellsView.swift */; }; 9A7ACF0F287EC2D3001D47CB /* CollectionProgressViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF0D287EC2D3001D47CB /* CollectionProgressViewController.swift */; }; 9A7ACF10287EC2D3001D47CB /* CollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF0E287EC2D3001D47CB /* CollectionViewController.swift */; }; - 9A7ACF12287EC2DE001D47CB /* CollectionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF11287EC2DE001D47CB /* CollectionCoordinator.swift */; }; 9A7ACF15287EC2E9001D47CB /* CollectionProgressReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF13287EC2E9001D47CB /* CollectionProgressReactor.swift */; }; 9A7ACF16287EC2E9001D47CB /* CollectionReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF14287EC2E9001D47CB /* CollectionReactor.swift */; }; 9A7ACF19287EC2F3001D47CB /* ItemProgressRow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A7ACF17287EC2F3001D47CB /* ItemProgressRow.xib */; }; @@ -209,6 +235,33 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 023349F529261A3800C7080F /* PhotosReqeust.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotosReqeust.swift; sourceTree = ""; }; + 023349F729261A5700C7080F /* PhotosResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotosResponseDTO.swift; sourceTree = ""; }; + 023349F929274D1700C7080F /* TopsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopsRequest.swift; sourceTree = ""; }; + 023349FB29274D3500C7080F /* TopsResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopsResponseDTO.swift; sourceTree = ""; }; + 023349FD2927668400C7080F /* BottomsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomsRequest.swift; sourceTree = ""; }; + 023349FF292766AB00C7080F /* BottomsResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomsResponseDTO.swift; sourceTree = ""; }; + 02334A01292769BF00C7080F /* DressUpRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DressUpRequest.swift; sourceTree = ""; }; + 02334A03292769DD00C7080F /* DressUpResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DressUpResponseDTO.swift; sourceTree = ""; }; + 02334A052927701200C7080F /* HeadwearRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadwearRequest.swift; sourceTree = ""; }; + 02334A072927702600C7080F /* HeadwearResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadwearResponseDTO.swift; sourceTree = ""; }; + 02334A09292B468100C7080F /* AccessoriesRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessoriesRequest.swift; sourceTree = ""; }; + 02334A0B292B469E00C7080F /* AccessoriesResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessoriesResponseDTO.swift; sourceTree = ""; }; + 02334A0D292B4A2300C7080F /* SocksRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocksRequest.swift; sourceTree = ""; }; + 02334A0F292B4A2D00C7080F /* SocksResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocksResponseDTO.swift; sourceTree = ""; }; + 02334A11292B4DDD00C7080F /* ShoesResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShoesResponseDTO.swift; sourceTree = ""; }; + 02334A13292B4E1000C7080F /* ShoesRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShoesRequest.swift; sourceTree = ""; }; + 02334A15292B52B800C7080F /* BagsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BagsRequest.swift; sourceTree = ""; }; + 02334A17292B55C700C7080F /* BagsResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BagsResponseDTO.swift; sourceTree = ""; }; + 02334A19292B66DF00C7080F /* UmbrellasRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UmbrellasRequest.swift; sourceTree = ""; }; + 02334A1B292B66F900C7080F /* UmbrellasResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UmbrellasResponseDTO.swift; sourceTree = ""; }; + 02334A1D292B6B2500C7080F /* WetSuitRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WetSuitRequest.swift; sourceTree = ""; }; + 02334A1F292B6B5E00C7080F /* WetSuitResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WetSuitResponseDTO.swift; sourceTree = ""; }; + 023447D2292DE70F00B9457C /* CollectionCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionCoordinator.swift; sourceTree = ""; }; + 023447D4292E064C00B9457C /* ReactionsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionsRequest.swift; sourceTree = ""; }; + 023447D6292E067400B9457C /* ReactionsResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionsResponseDTO.swift; sourceTree = ""; }; + 023447D8292E178B00B9457C /* FencingReqeust.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FencingReqeust.swift; sourceTree = ""; }; + 023447DA292E179C00B9457C /* FencingResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FencingResponseDTO.swift; sourceTree = ""; }; 9A1DB1D1284069DD00689F11 /* UIImageView+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImageView+extension.swift"; sourceTree = ""; }; 9A1DB1D82840857300689F11 /* APIError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIError.swift; sourceTree = ""; }; 9A2B0FD82897C84F00285C77 /* UserInfoReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoReactor.swift; sourceTree = ""; }; @@ -281,7 +334,7 @@ 9A6DE35A2889327A00EB2F3F /* MaximizePlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaximizePlayerView.swift; sourceTree = ""; }; 9A6DE35C2889AF1000EB2F3F /* PlayerReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerReactor.swift; sourceTree = ""; }; 9A6DE3602889B18800EB2F3F /* MusicPlayerManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicPlayerManager.swift; sourceTree = ""; }; - 9A6DE362288A9BFB00EB2F3F /* PlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PlayerView.swift; path = Catalog/Views/PlayerView.swift; sourceTree = ""; }; + 9A6DE362288A9BFB00EB2F3F /* PlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerView.swift; sourceTree = ""; }; 9A6DE364288ADAC300EB2F3F /* SongRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongRow.swift; sourceTree = ""; }; 9A6DE365288ADAC300EB2F3F /* SongRow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SongRow.xib; sourceTree = ""; }; 9A6DE368288AE25400EB2F3F /* PlayerMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerMode.swift; sourceTree = ""; }; @@ -295,40 +348,39 @@ 9A7ACEE4287EC194001D47CB /* VillagersCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagersCell.swift; path = Views/VillagersCell.swift; sourceTree = ""; }; 9A7ACEE5287EC194001D47CB /* VillagerHouseView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagerHouseView.swift; path = Views/VillagerHouseView.swift; sourceTree = ""; }; 9A7ACEE6287EC194001D47CB /* VillagersCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VillagersCell.xib; path = Views/VillagersCell.xib; sourceTree = ""; }; - 9A7ACEEB287EC20B001D47CB /* ItemDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemDetailViewController.swift; path = Catalog/ViewControllers/ItemDetailViewController.swift; sourceTree = ""; }; - 9A7ACEEC287EC20B001D47CB /* CatalogViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogViewController.swift; path = Catalog/ViewControllers/CatalogViewController.swift; sourceTree = ""; }; - 9A7ACEED287EC20B001D47CB /* ItemsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemsViewController.swift; path = Catalog/ViewControllers/ItemsViewController.swift; sourceTree = ""; }; - 9A7ACEF1287EC239001D47CB /* CatalogReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogReactor.swift; path = Catalog/ViewModels/CatalogReactor.swift; sourceTree = ""; }; - 9A7ACEF2287EC239001D47CB /* ItemDetailReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemDetailReactor.swift; path = Catalog/ViewModels/ItemDetailReactor.swift; sourceTree = ""; }; - 9A7ACEF3287EC239001D47CB /* CatalogCellReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogCellReactor.swift; path = Catalog/ViewModels/CatalogCellReactor.swift; sourceTree = ""; }; - 9A7ACEF4287EC239001D47CB /* ItemsReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemsReactor.swift; path = Catalog/ViewModels/ItemsReactor.swift; sourceTree = ""; }; - 9A7ACEF9287EC25B001D47CB /* CatalogCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogCoordinator.swift; path = Catalog/Coordinator/CatalogCoordinator.swift; sourceTree = ""; }; - 9A7ACEFB287EC26F001D47CB /* ItemDetailInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemDetailInfoView.swift; path = Catalog/Views/ItemDetailInfoView.swift; sourceTree = ""; }; - 9A7ACEFC287EC26F001D47CB /* CatalogCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CatalogCell.xib; path = Catalog/Views/CatalogCell.xib; sourceTree = ""; }; - 9A7ACEFD287EC26F001D47CB /* CategoryRow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CategoryRow.xib; path = Catalog/Views/CategoryRow.xib; sourceTree = ""; }; - 9A7ACEFE287EC26F001D47CB /* CategoryRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CategoryRow.swift; path = Catalog/Views/CategoryRow.swift; sourceTree = ""; }; - 9A7ACEFF287EC26F001D47CB /* CatalogCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogCell.swift; path = Catalog/Views/CatalogCell.swift; sourceTree = ""; }; - 9A7ACF00287EC26F001D47CB /* ItemOtherInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemOtherInfoView.swift; path = Catalog/Views/ItemOtherInfoView.swift; sourceTree = ""; }; - 9A7ACF01287EC26F001D47CB /* CalendarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CalendarView.swift; path = Catalog/Views/CalendarView.swift; sourceTree = ""; }; - 9A7ACF02287EC26F001D47CB /* ItemSeasonView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemSeasonView.swift; path = Catalog/Views/ItemSeasonView.swift; sourceTree = ""; }; - 9A7ACF03287EC26F001D47CB /* ItemBellsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemBellsView.swift; path = Catalog/Views/ItemBellsView.swift; sourceTree = ""; }; - 9A7ACF0D287EC2D3001D47CB /* CollectionProgressViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CollectionProgressViewController.swift; path = Collection/ViewControllers/CollectionProgressViewController.swift; sourceTree = ""; }; - 9A7ACF0E287EC2D3001D47CB /* CollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CollectionViewController.swift; path = Collection/ViewControllers/CollectionViewController.swift; sourceTree = ""; }; - 9A7ACF11287EC2DE001D47CB /* CollectionCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CollectionCoordinator.swift; path = Collection/Coordinator/CollectionCoordinator.swift; sourceTree = ""; }; - 9A7ACF13287EC2E9001D47CB /* CollectionProgressReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CollectionProgressReactor.swift; path = Collection/ViewModels/CollectionProgressReactor.swift; sourceTree = ""; }; - 9A7ACF14287EC2E9001D47CB /* CollectionReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CollectionReactor.swift; path = Collection/ViewModels/CollectionReactor.swift; sourceTree = ""; }; - 9A7ACF17287EC2F3001D47CB /* ItemProgressRow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = ItemProgressRow.xib; path = Collection/Views/ItemProgressRow.xib; sourceTree = ""; }; - 9A7ACF18287EC2F3001D47CB /* ItemProgressRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemProgressRow.swift; path = Collection/Views/ItemProgressRow.swift; sourceTree = ""; }; + 9A7ACEEB287EC20B001D47CB /* ItemDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemDetailViewController.swift; path = ViewControllers/ItemDetailViewController.swift; sourceTree = ""; }; + 9A7ACEEC287EC20B001D47CB /* CatalogViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogViewController.swift; path = ViewControllers/CatalogViewController.swift; sourceTree = ""; }; + 9A7ACEED287EC20B001D47CB /* ItemsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemsViewController.swift; path = ViewControllers/ItemsViewController.swift; sourceTree = ""; }; + 9A7ACEF1287EC239001D47CB /* CatalogReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogReactor.swift; path = ViewModels/CatalogReactor.swift; sourceTree = ""; }; + 9A7ACEF2287EC239001D47CB /* ItemDetailReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemDetailReactor.swift; path = ViewModels/ItemDetailReactor.swift; sourceTree = ""; }; + 9A7ACEF3287EC239001D47CB /* CatalogCellReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogCellReactor.swift; path = ViewModels/CatalogCellReactor.swift; sourceTree = ""; }; + 9A7ACEF4287EC239001D47CB /* ItemsReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemsReactor.swift; path = ViewModels/ItemsReactor.swift; sourceTree = ""; }; + 9A7ACEF9287EC25B001D47CB /* CatalogCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogCoordinator.swift; path = Coordinator/CatalogCoordinator.swift; sourceTree = ""; }; + 9A7ACEFB287EC26F001D47CB /* ItemDetailInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemDetailInfoView.swift; sourceTree = ""; }; + 9A7ACEFC287EC26F001D47CB /* CatalogCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CatalogCell.xib; sourceTree = ""; }; + 9A7ACEFD287EC26F001D47CB /* CategoryRow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryRow.xib; sourceTree = ""; }; + 9A7ACEFE287EC26F001D47CB /* CategoryRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoryRow.swift; sourceTree = ""; }; + 9A7ACEFF287EC26F001D47CB /* CatalogCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CatalogCell.swift; sourceTree = ""; }; + 9A7ACF00287EC26F001D47CB /* ItemOtherInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemOtherInfoView.swift; sourceTree = ""; }; + 9A7ACF01287EC26F001D47CB /* CalendarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalendarView.swift; sourceTree = ""; }; + 9A7ACF02287EC26F001D47CB /* ItemSeasonView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemSeasonView.swift; sourceTree = ""; }; + 9A7ACF03287EC26F001D47CB /* ItemBellsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemBellsView.swift; sourceTree = ""; }; + 9A7ACF0D287EC2D3001D47CB /* CollectionProgressViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionProgressViewController.swift; sourceTree = ""; }; + 9A7ACF0E287EC2D3001D47CB /* CollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewController.swift; sourceTree = ""; }; + 9A7ACF13287EC2E9001D47CB /* CollectionProgressReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionProgressReactor.swift; sourceTree = ""; }; + 9A7ACF14287EC2E9001D47CB /* CollectionReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionReactor.swift; sourceTree = ""; }; + 9A7ACF17287EC2F3001D47CB /* ItemProgressRow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ItemProgressRow.xib; sourceTree = ""; }; + 9A7ACF18287EC2F3001D47CB /* ItemProgressRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemProgressRow.swift; sourceTree = ""; }; 9A7ACF20287EC459001D47CB /* HapticManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HapticManager.swift; sourceTree = ""; }; 9A7ACF21287EC459001D47CB /* Items.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Items.swift; sourceTree = ""; }; 9A7ACF24287F9C87001D47CB /* HousewaresResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HousewaresResponseDTO.swift; sourceTree = ""; }; 9A7ACF26287F9F00001D47CB /* HousewaresRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HousewaresRequest.swift; sourceTree = ""; }; - 9A7ACF28287FD984001D47CB /* ItemVariantsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ItemVariantsView.swift; path = Catalog/Views/ItemVariantsView.swift; sourceTree = ""; }; - 9A7ACF2A287FDA07001D47CB /* VariantCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = VariantCell.swift; path = Catalog/Views/VariantCell.swift; sourceTree = ""; }; - 9A7ACF2B287FDA07001D47CB /* VariantCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = VariantCell.xib; path = Catalog/Views/VariantCell.xib; sourceTree = ""; }; - 9A7ACF2E288000D7001D47CB /* KeywordCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = KeywordCell.swift; path = Catalog/Views/KeywordCell.swift; sourceTree = ""; }; - 9A7ACF2F288000D7001D47CB /* KeywordCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = KeywordCell.xib; path = Catalog/Views/KeywordCell.xib; sourceTree = ""; }; - 9A7ACF3228800318001D47CB /* ItemKeywordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ItemKeywordView.swift; path = Catalog/Views/ItemKeywordView.swift; sourceTree = ""; }; + 9A7ACF28287FD984001D47CB /* ItemVariantsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemVariantsView.swift; sourceTree = ""; }; + 9A7ACF2A287FDA07001D47CB /* VariantCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VariantCell.swift; sourceTree = ""; }; + 9A7ACF2B287FDA07001D47CB /* VariantCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = VariantCell.xib; sourceTree = ""; }; + 9A7ACF2E288000D7001D47CB /* KeywordCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeywordCell.swift; sourceTree = ""; }; + 9A7ACF2F288000D7001D47CB /* KeywordCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KeywordCell.xib; sourceTree = ""; }; + 9A7ACF3228800318001D47CB /* ItemKeywordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemKeywordView.swift; sourceTree = ""; }; 9A836EF228AE0CAF00B5A74A /* SongsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongsRequest.swift; sourceTree = ""; }; 9A836EF428AE0CC200B5A74A /* SongResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongResponseDTO.swift; sourceTree = ""; }; 9A99AA052858247700629C4A /* Coordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Coordinator.swift; sourceTree = ""; }; @@ -424,15 +476,158 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 023447C8292DCF8400B9457C /* Museum */ = { + isa = PBXGroup; + children = ( + 9A6891C2283380D50061AAF1 /* ArtResponseDTO.swift */, + 9A6891B6283377010061AAF1 /* BugResponseDTO.swift */, + 9A6891B2283371E20061AAF1 /* FishResponseDTO.swift */, + 9A6891BA2833787D0061AAF1 /* FossilsResponseDTO.swift */, + 9A6891BE283379B80061AAF1 /* SeaCreaturesResponseDTO.swift */, + ); + path = Museum; + sourceTree = ""; + }; + 023447C9292DCFCC00B9457C /* Museum */ = { + isa = PBXGroup; + children = ( + 9A6891C0283380CD0061AAF1 /* ArtRequest.swift */, + 9A6891B4283376E50061AAF1 /* BugRequest.swift */, + 9A6891B0283371A60061AAF1 /* FishRequest.swift */, + 9A6891B8283378630061AAF1 /* FossilsRequest.swift */, + 9A6891BC283379830061AAF1 /* SeaCreaturesRequest.swift */, + ); + path = Museum; + sourceTree = ""; + }; + 023447CA292DD06B00B9457C /* Furniture */ = { + isa = PBXGroup; + children = ( + 9A7ACF24287F9C87001D47CB /* HousewaresResponseDTO.swift */, + 9A3CFB2828805C4400B0FFCB /* MiscellaneousResponseDTO.swift */, + 9A3CFB2C2880637100B0FFCB /* WallMountedResponseDTO.swift */, + 9A3CFB3028806A8200B0FFCB /* WallpaperResponseDTO.swift */, + 9A3CFB3228806EDB00B0FFCB /* FloorsResponseDTO.swift */, + 9A3CFB382880787100B0FFCB /* RugsResponseDTO.swift */, + 9A3CFB3C2880809100B0FFCB /* OtherResponseDTO.swift */, + 9A3CFB46288291C300B0FFCB /* CeilingDecorResponseDTO.swift */, + 9A3DE3CD2887B6F5006EECF7 /* RecipeResponseDTO.swift */, + 9A836EF428AE0CC200B5A74A /* SongResponseDTO.swift */, + 023349F729261A5700C7080F /* PhotosResponseDTO.swift */, + 023447DA292E179C00B9457C /* FencingResponseDTO.swift */, + ); + path = Furniture; + sourceTree = ""; + }; + 023447CB292DD15700B9457C /* Furniture */ = { + isa = PBXGroup; + children = ( + 9A7ACF26287F9F00001D47CB /* HousewaresRequest.swift */, + 9A3CFB2A28805F4000B0FFCB /* MiscellaneousRequest.swift */, + 9A3CFB2E2880655900B0FFCB /* WallMountedRequest.swift */, + 9A3CFB34288073AE00B0FFCB /* WallpaperRequest.swift */, + 9A3CFB36288076B900B0FFCB /* FloorsRequest.swift */, + 9A3CFB3A2880790C00B0FFCB /* RugsRequest.swift */, + 9A3CFB3E288082AF00B0FFCB /* OtherRequest.swift */, + 9A3CFB48288295CA00B0FFCB /* CeilingDecorRequest.swift */, + 9A3DE3CF2887B7E6006EECF7 /* RecipesRequest.swift */, + 9A836EF228AE0CAF00B5A74A /* SongsRequest.swift */, + 023349F529261A3800C7080F /* PhotosReqeust.swift */, + 023447D8292E178B00B9457C /* FencingReqeust.swift */, + ); + path = Furniture; + sourceTree = ""; + }; + 023447CC292DE2C400B9457C /* Clothes */ = { + isa = PBXGroup; + children = ( + 023349FB29274D3500C7080F /* TopsResponseDTO.swift */, + 023349FF292766AB00C7080F /* BottomsResponseDTO.swift */, + 02334A03292769DD00C7080F /* DressUpResponseDTO.swift */, + 02334A072927702600C7080F /* HeadwearResponseDTO.swift */, + 02334A0B292B469E00C7080F /* AccessoriesResponseDTO.swift */, + 02334A0F292B4A2D00C7080F /* SocksResponseDTO.swift */, + 02334A11292B4DDD00C7080F /* ShoesResponseDTO.swift */, + 02334A17292B55C700C7080F /* BagsResponseDTO.swift */, + 02334A1B292B66F900C7080F /* UmbrellasResponseDTO.swift */, + 02334A1F292B6B5E00C7080F /* WetSuitResponseDTO.swift */, + ); + path = Clothes; + sourceTree = ""; + }; + 023447CD292DE2CA00B9457C /* Clothes */ = { + isa = PBXGroup; + children = ( + 023349F929274D1700C7080F /* TopsRequest.swift */, + 023349FD2927668400C7080F /* BottomsRequest.swift */, + 02334A01292769BF00C7080F /* DressUpRequest.swift */, + 02334A052927701200C7080F /* HeadwearRequest.swift */, + 02334A09292B468100C7080F /* AccessoriesRequest.swift */, + 02334A0D292B4A2300C7080F /* SocksRequest.swift */, + 02334A13292B4E1000C7080F /* ShoesRequest.swift */, + 02334A15292B52B800C7080F /* BagsRequest.swift */, + 02334A19292B66DF00C7080F /* UmbrellasRequest.swift */, + 02334A1D292B6B2500C7080F /* WetSuitRequest.swift */, + ); + path = Clothes; + sourceTree = ""; + }; + 023447CE292DE5A500B9457C /* ViewControllers */ = { + isa = PBXGroup; + children = ( + 9A7ACF0D287EC2D3001D47CB /* CollectionProgressViewController.swift */, + 9A7ACF0E287EC2D3001D47CB /* CollectionViewController.swift */, + ); + name = ViewControllers; + path = ../Collection/ViewControllers; + sourceTree = ""; + }; + 023447CF292DE5FD00B9457C /* Views */ = { + isa = PBXGroup; + children = ( + 9A6DE35A2889327A00EB2F3F /* MaximizePlayerView.swift */, + 9A6DE3582889271200EB2F3F /* MinimizePlayerView.swift */, + 9A6DE364288ADAC300EB2F3F /* SongRow.swift */, + 9A6DE365288ADAC300EB2F3F /* SongRow.xib */, + ); + path = Views; + sourceTree = ""; + }; + 023447D0292DE60400B9457C /* ViewControllers */ = { + isa = PBXGroup; + children = ( + 9A6DE3522888E2E300EB2F3F /* PlayerViewController.swift */, + ); + path = ViewControllers; + sourceTree = ""; + }; + 023447D1292DE60900B9457C /* ViewModels */ = { + isa = PBXGroup; + children = ( + 9A6DE35C2889AF1000EB2F3F /* PlayerReactor.swift */, + ); + path = ViewModels; + sourceTree = ""; + }; + 023F420D2936EB9A00D41163 /* App */ = { + isa = PBXGroup; + children = ( + 9A541B6828220A72001B57FD /* AppDelegate.swift */, + 9A541B6A28220A72001B57FD /* SceneDelegate.swift */, + 9A99AA09285824DF00629C4A /* AppAppearance.swift */, + ); + path = App; + sourceTree = ""; + }; 9A4B4C3828503A6100CC687C /* Models */ = { isa = PBXGroup; children = ( 9AF0419728505B1C00C51449 /* Items */, 9A4B4C3628503A0400CC687C /* DailyTask.swift */, 9A4B4C32285033B300CC687C /* Fruit.swift */, - 9A4B4C34285034BA00CC687C /* Villager.swift */, - 9AF04226285313ED00C51449 /* UserInfo.swift */, 9AF0423F2856F4C000C51449 /* Hemisphere.swift */, + 9AF04226285313ED00C51449 /* UserInfo.swift */, + 9A4B4C34285034BA00CC687C /* Villager.swift */, ); path = Models; sourceTree = ""; @@ -479,11 +674,11 @@ 9A6891A128335B2D0061AAF1 /* Networking */ = { isa = PBXGroup; children = ( - 9A68919828335ADD0061AAF1 /* DefaultAPIProvider.swift */, 9A6891A028335B250061AAF1 /* Protocol */, 9A6891A5283361F60061AAF1 /* Request */, 9A6891AA283366B10061AAF1 /* Response */, 9A6891AB283367180061AAF1 /* Utilities */, + 9A68919828335ADD0061AAF1 /* DefaultAPIProvider.swift */, ); path = Networking; sourceTree = ""; @@ -491,23 +686,12 @@ 9A6891A5283361F60061AAF1 /* Request */ = { isa = PBXGroup; children = ( - 9A6891C0283380CD0061AAF1 /* ArtRequest.swift */, - 9A6891B4283376E50061AAF1 /* BugRequest.swift */, - 9A6891B0283371A60061AAF1 /* FishRequest.swift */, - 9A6891B8283378630061AAF1 /* FossilsRequest.swift */, - 9A6891BC283379830061AAF1 /* SeaCreaturesRequest.swift */, + 023447CD292DE2CA00B9457C /* Clothes */, + 023447CB292DD15700B9457C /* Furniture */, + 023447C9292DCFCC00B9457C /* Museum */, 9A6891AC283368EE0061AAF1 /* TurnipRequest.swift */, 9A6891A3283361F20061AAF1 /* VillagersRequest.swift */, - 9A7ACF26287F9F00001D47CB /* HousewaresRequest.swift */, - 9A3CFB2A28805F4000B0FFCB /* MiscellaneousRequest.swift */, - 9A3CFB2E2880655900B0FFCB /* WallMountedRequest.swift */, - 9A3CFB34288073AE00B0FFCB /* WallpaperRequest.swift */, - 9A3CFB36288076B900B0FFCB /* FloorsRequest.swift */, - 9A3CFB3A2880790C00B0FFCB /* RugsRequest.swift */, - 9A3CFB3E288082AF00B0FFCB /* OtherRequest.swift */, - 9A3CFB48288295CA00B0FFCB /* CeilingDecorRequest.swift */, - 9A3DE3CF2887B7E6006EECF7 /* RecipesRequest.swift */, - 9A836EF228AE0CAF00B5A74A /* SongsRequest.swift */, + 023447D4292E064C00B9457C /* ReactionsRequest.swift */, ); path = Request; sourceTree = ""; @@ -515,23 +699,12 @@ 9A6891AA283366B10061AAF1 /* Response */ = { isa = PBXGroup; children = ( - 9A6891C2283380D50061AAF1 /* ArtResponseDTO.swift */, - 9A6891B6283377010061AAF1 /* BugResponseDTO.swift */, - 9A6891B2283371E20061AAF1 /* FishResponseDTO.swift */, - 9A6891BA2833787D0061AAF1 /* FossilsResponseDTO.swift */, - 9A6891BE283379B80061AAF1 /* SeaCreaturesResponseDTO.swift */, + 023447CC292DE2C400B9457C /* Clothes */, + 023447CA292DD06B00B9457C /* Furniture */, + 023447C8292DCF8400B9457C /* Museum */, 9A6891AE2833690A0061AAF1 /* TurnipResponseDTO.swift */, 9A6891A6283362C90061AAF1 /* VillagersResponseDTO.swift */, - 9A7ACF24287F9C87001D47CB /* HousewaresResponseDTO.swift */, - 9A3CFB2828805C4400B0FFCB /* MiscellaneousResponseDTO.swift */, - 9A3CFB2C2880637100B0FFCB /* WallMountedResponseDTO.swift */, - 9A3CFB3028806A8200B0FFCB /* WallpaperResponseDTO.swift */, - 9A3CFB3228806EDB00B0FFCB /* FloorsResponseDTO.swift */, - 9A3CFB382880787100B0FFCB /* RugsResponseDTO.swift */, - 9A3CFB3C2880809100B0FFCB /* OtherResponseDTO.swift */, - 9A3CFB46288291C300B0FFCB /* CeilingDecorResponseDTO.swift */, - 9A3DE3CD2887B6F5006EECF7 /* RecipeResponseDTO.swift */, - 9A836EF428AE0CC200B5A74A /* SongResponseDTO.swift */, + 023447D6292E067400B9457C /* ReactionsResponseDTO.swift */, ); path = Response; sourceTree = ""; @@ -548,14 +721,13 @@ 9A6A2EC4287A7A5F007D2EEA /* Colletion */ = { isa = PBXGroup; children = ( - 9A7ACF0E287EC2D3001D47CB /* CollectionViewController.swift */, - 9A7ACF0D287EC2D3001D47CB /* CollectionProgressViewController.swift */, 9A6A2ECC287A7EFF007D2EEA /* Coordinator */, + 023447CE292DE5A500B9457C /* ViewControllers */, 9A6A2ECB287A7EF8007D2EEA /* ViewModel */, 9A6A2ED3287AA21A007D2EEA /* Views */, ); name = Colletion; - path = ../..; + path = Catalog; sourceTree = ""; }; 9A6A2ECB287A7EF8007D2EEA /* ViewModel */ = { @@ -565,14 +737,16 @@ 9A7ACF13287EC2E9001D47CB /* CollectionProgressReactor.swift */, ); name = ViewModel; + path = ../Collection/ViewModels; sourceTree = ""; }; 9A6A2ECC287A7EFF007D2EEA /* Coordinator */ = { isa = PBXGroup; children = ( - 9A7ACF11287EC2DE001D47CB /* CollectionCoordinator.swift */, + 023447D2292DE70F00B9457C /* CollectionCoordinator.swift */, ); name = Coordinator; + path = ../Collection/Coordinator; sourceTree = ""; }; 9A6A2ED3287AA21A007D2EEA /* Views */ = { @@ -582,6 +756,7 @@ 9A7ACF17287EC2F3001D47CB /* ItemProgressRow.xib */, ); name = Views; + path = ../Collection/Views; sourceTree = ""; }; 9A6CB3F92872A4B500B368D4 /* Coordinator */ = { @@ -606,12 +781,9 @@ 9A6DE35F2889AFB400EB2F3F /* MusicPlayer */ = { isa = PBXGroup; children = ( - 9A6DE3522888E2E300EB2F3F /* PlayerViewController.swift */, - 9A6DE35C2889AF1000EB2F3F /* PlayerReactor.swift */, - 9A6DE3582889271200EB2F3F /* MinimizePlayerView.swift */, - 9A6DE35A2889327A00EB2F3F /* MaximizePlayerView.swift */, - 9A6DE364288ADAC300EB2F3F /* SongRow.swift */, - 9A6DE365288ADAC300EB2F3F /* SongRow.xib */, + 023447D0292DE60400B9457C /* ViewControllers */, + 023447D1292DE60900B9457C /* ViewModels */, + 023447CF292DE5FD00B9457C /* Views */, 9A6DE368288AE25400EB2F3F /* PlayerMode.swift */, ); path = MusicPlayer; @@ -620,22 +792,21 @@ 9A7ACED6287EC04B001D47CB /* Catalog */ = { isa = PBXGroup; children = ( + 9A6CB3F92872A4B500B368D4 /* Coordinator */, 9AD343FA2876BF6F008A3D6D /* ViewControllers */, 9A6CB3FC2872A57100B368D4 /* ViewModels */, - 9A6CB3F92872A4B500B368D4 /* Coordinator */, 9AD343E22874282A008A3D6D /* Views */, ); - name = Catalog; - path = ../..; + path = Catalog; sourceTree = ""; }; 9A7ACF1B287EC3F0001D47CB /* Utility */ = { isa = PBXGroup; children = ( - 9A7ACF21287EC459001D47CB /* Items.swift */, + 9A99AA84286AE22200629C4A /* AboutItem.swift */, 9A7ACF20287EC459001D47CB /* HapticManager.swift */, + 9A7ACF21287EC459001D47CB /* Items.swift */, 9A6DE3602889B18800EB2F3F /* MusicPlayerManager.swift */, - 9A99AA84286AE22200629C4A /* AboutItem.swift */, ); path = Utility; sourceTree = ""; @@ -643,8 +814,6 @@ 9A836EF828AE48E000B5A74A /* Resources */ = { isa = PBXGroup; children = ( - 9A541B6828220A72001B57FD /* AppDelegate.swift */, - 9A541B6A28220A72001B57FD /* SceneDelegate.swift */, 9A541B7328220A73001B57FD /* LaunchScreen.storyboard */, 9A541B7128220A73001B57FD /* Assets.xcassets */, ); @@ -654,12 +823,15 @@ 9A836EFA28AE491500B5A74A /* Sources */ = { isa = PBXGroup; children = ( - 9AF041A42851ADFF00C51449 /* Extension */, - 9A836EFB28AE498300B5A74A /* Presentation */, - 9A7ACF1B287EC3F0001D47CB /* Utility */, + 023F420D2936EB9A00D41163 /* App */, 9AF041CD2851DDE700C51449 /* CoreDataStorage */, + 9AF041A42851ADFF00C51449 /* Extension */, 9A4B4C3828503A6100CC687C /* Models */, 9A6891A128335B2D0061AAF1 /* Networking */, + 9A836EFB28AE498300B5A74A /* Presentation */, + 9A7ACF1B287EC3F0001D47CB /* Utility */, + 9A99AA072858248600629C4A /* AppCoordinator.swift */, + 9A99AA052858247700629C4A /* Coordinator.swift */, ); path = Sources; sourceTree = ""; @@ -667,14 +839,11 @@ 9A836EFB28AE498300B5A74A /* Presentation */ = { isa = PBXGroup; children = ( - 9A6DE35F2889AFB400EB2F3F /* MusicPlayer */, - 9A99AA29285890D500629C4A /* Dashboard */, - 9A99AA88286C17B100629C4A /* Villagers */, 9A7ACED6287EC04B001D47CB /* Catalog */, 9A6A2EC4287A7A5F007D2EEA /* Colletion */, - 9A99AA052858247700629C4A /* Coordinator.swift */, - 9A99AA072858248600629C4A /* AppCoordinator.swift */, - 9A99AA09285824DF00629C4A /* AppAppearance.swift */, + 9A99AA29285890D500629C4A /* Dashboard */, + 9A6DE35F2889AFB400EB2F3F /* MusicPlayer */, + 9A99AA88286C17B100629C4A /* Villagers */, ); path = Presentation; sourceTree = ""; @@ -682,8 +851,8 @@ 9A99AA29285890D500629C4A /* Dashboard */ = { isa = PBXGroup; children = ( - 9AD343F82876BF50008A3D6D /* ViewControllers */, 9A99AA4E285B11F300629C4A /* Coordinator */, + 9AD343F82876BF50008A3D6D /* ViewControllers */, 9A99AA6B28618C8500629C4A /* ViewModels */, 9A99AA4D285B11DA00629C4A /* Views */, ); @@ -693,16 +862,16 @@ 9A99AA2A285890F400629C4A /* shared */ = { isa = PBXGroup; children = ( - 9A99AA45285AF1D500629C4A /* SectionsScrollView.swift */, - 9A3DE3C928869137006EECF7 /* LoadingView.swift */, - 9A99AA1D2858743F00629C4A /* SectionView.swift */, - 9A99AA1F28587A7500629C4A /* SectionHeaderView.swift */, - 9A99AA53285C341E00629C4A /* InfoContentView.swift */, - 9A99AA372859F74900629C4A /* ProgressView.swift */, - 9A99AA3B285AE2FC00629C4A /* ProgressBar.swift */, + 9A455C3C28975F73009A14A9 /* EmptyView.swift */, 9A99AA5F28603CB800629C4A /* IconCell.swift */, 9A99AA6028603CB800629C4A /* IconCell.xib */, - 9A455C3C28975F73009A14A9 /* EmptyView.swift */, + 9A99AA53285C341E00629C4A /* InfoContentView.swift */, + 9A3DE3C928869137006EECF7 /* LoadingView.swift */, + 9A99AA3B285AE2FC00629C4A /* ProgressBar.swift */, + 9A99AA372859F74900629C4A /* ProgressView.swift */, + 9A99AA1F28587A7500629C4A /* SectionHeaderView.swift */, + 9A99AA45285AF1D500629C4A /* SectionsScrollView.swift */, + 9A99AA1D2858743F00629C4A /* SectionView.swift */, ); path = shared; sourceTree = ""; @@ -711,13 +880,13 @@ isa = PBXGroup; children = ( 9A99AA2A285890F400629C4A /* shared */, - 9A99AA252858827900629C4A /* UserInfoView.swift */, - 9A99AA2B28597B7500629C4A /* TodaysTasksView.swift */, - 9A99AA352859C8BD00629C4A /* VillagersView.swift */, - 9A99AA392859F9A300629C4A /* CollectionProgressView.swift */, - 9A99AA51285C32C300629C4A /* PreferencesView.swift */, 9A6DC208287C7B42004EEC41 /* AppSettingView.swift */, + 9A99AA392859F9A300629C4A /* CollectionProgressView.swift */, 9A99AA5928602F4A00629C4A /* CustomTaskView.swift */, + 9A99AA51285C32C300629C4A /* PreferencesView.swift */, + 9A99AA2B28597B7500629C4A /* TodaysTasksView.swift */, + 9A99AA252858827900629C4A /* UserInfoView.swift */, + 9A99AA352859C8BD00629C4A /* VillagersView.swift */, ); path = Views; sourceTree = ""; @@ -733,17 +902,17 @@ 9A99AA6B28618C8500629C4A /* ViewModels */ = { isa = PBXGroup; children = ( - 9A6A2ED8287BEB76007D2EEA /* DashboardReactor.swift */, 9A6DC204287C6199004EEC41 /* AboutReactor.swift */, + 9A6DC20A287D0AC5004EEC41 /* AppSettingReactor.swift */, + 9A6A2ED6287BE71A007D2EEA /* CollectionProgressSectionReactor.swift */, + 9A99AA792865CA9300629C4A /* CustomTaskReactor.swift */, + 9A6A2ED8287BEB76007D2EEA /* DashboardReactor.swift */, 9A99AA6C2861945B00629C4A /* PreferencesReactor.swift */, - 9A99AA7328656D1600629C4A /* VillagersSectionReactor.swift */, 9AD343F628767649008A3D6D /* ProgressReactor.swift */, - 9A99AA7528657A9900629C4A /* TodaysTasksSectionReactor.swift */, 9A99AA772865B82A00629C4A /* TasksEditReactor.swift */, - 9A99AA792865CA9300629C4A /* CustomTaskReactor.swift */, - 9A6A2ED6287BE71A007D2EEA /* CollectionProgressSectionReactor.swift */, - 9A6DC20A287D0AC5004EEC41 /* AppSettingReactor.swift */, + 9A99AA7528657A9900629C4A /* TodaysTasksSectionReactor.swift */, 9A2B0FD82897C84F00285C77 /* UserInfoReactor.swift */, + 9A99AA7328656D1600629C4A /* VillagersSectionReactor.swift */, ); path = ViewModels; sourceTree = ""; @@ -759,8 +928,8 @@ 9A99AA88286C17B100629C4A /* Villagers */ = { isa = PBXGroup; children = ( - 9AD343F92876BF5E008A3D6D /* ViewControllers */, 9A99AA93286C1E2600629C4A /* Coordinator */, + 9AD343F92876BF5E008A3D6D /* ViewControllers */, 9A99AA96286C1F7000629C4A /* ViewModels */, 9A99AA8B286C182D00629C4A /* Views */, ); @@ -770,10 +939,10 @@ 9A99AA8B286C182D00629C4A /* Views */ = { isa = PBXGroup; children = ( - 9A7ACEE4287EC194001D47CB /* VillagersCell.swift */, - 9A7ACEE6287EC194001D47CB /* VillagersCell.xib */, 9A7ACEE3287EC194001D47CB /* VillagerDetailView.swift */, 9A7ACEE5287EC194001D47CB /* VillagerHouseView.swift */, + 9A7ACEE4287EC194001D47CB /* VillagersCell.swift */, + 9A7ACEE6287EC194001D47CB /* VillagersCell.xib */, ); name = Views; sourceTree = ""; @@ -789,9 +958,9 @@ 9A99AA96286C1F7000629C4A /* ViewModels */ = { isa = PBXGroup; children = ( - 9A7ACEDE287EC188001D47CB /* VillagersReactor.swift */, - 9A7ACEDD287EC188001D47CB /* VillagersCellReactor.swift */, 9A7ACEDF287EC188001D47CB /* VillagerDetailReactor.swift */, + 9A7ACEDD287EC188001D47CB /* VillagersCellReactor.swift */, + 9A7ACEDE287EC188001D47CB /* VillagersReactor.swift */, ); name = ViewModels; sourceTree = ""; @@ -799,43 +968,43 @@ 9AD343E22874282A008A3D6D /* Views */ = { isa = PBXGroup; children = ( + 9A7ACF01287EC26F001D47CB /* CalendarView.swift */, 9A7ACEFF287EC26F001D47CB /* CatalogCell.swift */, 9A7ACEFC287EC26F001D47CB /* CatalogCell.xib */, + 9A7ACEFE287EC26F001D47CB /* CategoryRow.swift */, + 9A7ACEFD287EC26F001D47CB /* CategoryRow.xib */, 9A7ACF03287EC26F001D47CB /* ItemBellsView.swift */, 9A7ACEFB287EC26F001D47CB /* ItemDetailInfoView.swift */, - 9A7ACF28287FD984001D47CB /* ItemVariantsView.swift */, - 9A7ACF00287EC26F001D47CB /* ItemOtherInfoView.swift */, 9A7ACF3228800318001D47CB /* ItemKeywordView.swift */, 9A3DE3D32887DD71006EECF7 /* ItemMaterialsView.swift */, - 9A7ACF2A287FDA07001D47CB /* VariantCell.swift */, - 9A7ACF2B287FDA07001D47CB /* VariantCell.xib */, + 9A7ACF00287EC26F001D47CB /* ItemOtherInfoView.swift */, + 9A7ACF02287EC26F001D47CB /* ItemSeasonView.swift */, + 9A7ACF28287FD984001D47CB /* ItemVariantsView.swift */, 9A7ACF2E288000D7001D47CB /* KeywordCell.swift */, 9A7ACF2F288000D7001D47CB /* KeywordCell.xib */, - 9A7ACF01287EC26F001D47CB /* CalendarView.swift */, - 9A7ACF02287EC26F001D47CB /* ItemSeasonView.swift */, - 9A7ACEFE287EC26F001D47CB /* CategoryRow.swift */, - 9A7ACEFD287EC26F001D47CB /* CategoryRow.xib */, 9A6DE362288A9BFB00EB2F3F /* PlayerView.swift */, + 9A7ACF2A287FDA07001D47CB /* VariantCell.swift */, + 9A7ACF2B287FDA07001D47CB /* VariantCell.xib */, ); - name = Views; + path = Views; sourceTree = ""; }; 9AD343EF28766417008A3D6D /* UI */ = { isa = PBXGroup; children = ( - 9A99AA0B285824F000629C4A /* UIColor+extension.swift */, + 9A99AA4F285C1C3500629C4A /* UIButton+extension.swift */, 9A99AA632860401400629C4A /* UICollectionView+extension.swift */, - 9A62D74028783A4D0047750F /* UITableView+extension.swift */, - 9A1DB1D1284069DD00689F11 /* UIImageView+extension.swift */, + 9A99AA0B285824F000629C4A /* UIColor+extension.swift */, 9A99AA1328584C9B00629C4A /* UIFont+extension.swift */, - 9A99AA212858802B00629C4A /* UIView+extension.swift */, - 9A99AA232858803D00629C4A /* UIStackView+extension.swift */, - 9A99AA4F285C1C3500629C4A /* UIButton+extension.swift */, - 9A99AA55285C422200629C4A /* UIViewController+extension.swift */, 9A99AA6E28643CA700629C4A /* UIImage+extension.swift */, - 9A6CB3F0286EB57A00B368D4 /* UIMenu+extension.swift */, + 9A1DB1D1284069DD00689F11 /* UIImageView+extension.swift */, 9AD343F028766429008A3D6D /* UILabel+extension.swift */, + 9A6CB3F0286EB57A00B368D4 /* UIMenu+extension.swift */, 9A3DE3CB2886AFDA006EECF7 /* UINavigationItem.swift */, + 9A99AA232858803D00629C4A /* UIStackView+extension.swift */, + 9A62D74028783A4D0047750F /* UITableView+extension.swift */, + 9A99AA212858802B00629C4A /* UIView+extension.swift */, + 9A99AA55285C422200629C4A /* UIViewController+extension.swift */, ); path = UI; sourceTree = ""; @@ -843,12 +1012,12 @@ 9AD343F82876BF50008A3D6D /* ViewControllers */ = { isa = PBXGroup; children = ( - 9A541B6C28220A72001B57FD /* DashboardViewController.swift */, 9A99AA7D286AC4F900629C4A /* AboutViewController.swift */, - 9A99AA43285AF03D00629C4A /* PreferencesViewController.swift */, - 9A99AA57285C6FF900629C4A /* TaskEditViewController.swift */, 9A99AA5B2860319100629C4A /* CustomTaskViewController.swift */, + 9A541B6C28220A72001B57FD /* DashboardViewController.swift */, 9A99AA652860431A00629C4A /* IconChooserViewController.swift */, + 9A99AA43285AF03D00629C4A /* PreferencesViewController.swift */, + 9A99AA57285C6FF900629C4A /* TaskEditViewController.swift */, ); path = ViewControllers; sourceTree = ""; @@ -856,8 +1025,8 @@ 9AD343F92876BF5E008A3D6D /* ViewControllers */ = { isa = PBXGroup; children = ( - 9A7ACED7287EC16E001D47CB /* VillagersViewController.swift */, 9A7ACED8287EC16E001D47CB /* VillagerDetailViewController.swift */, + 9A7ACED7287EC16E001D47CB /* VillagersViewController.swift */, ); name = ViewControllers; sourceTree = ""; @@ -886,12 +1055,12 @@ isa = PBXGroup; children = ( 9AD343EF28766417008A3D6D /* UI */, - 9A99AA3D285AEA1700629C4A /* Date+extension.swift */, - 9A6CB3F228728B3100B368D4 /* String+extension.swift */, + 9A3CFB44288128CD00B0FFCB /* Array+extension.swift */, 9A5D829F2873D87000EC8CE3 /* Collection+extension.swift */, + 9A99AA3D285AEA1700629C4A /* Date+extension.swift */, 9AD343EB28746593008A3D6D /* Int+extension.swift */, - 9A3CFB44288128CD00B0FFCB /* Array+extension.swift */, 9A455C3A28957569009A14A9 /* Reactor+extension.swift */, + 9A6CB3F228728B3100B368D4 /* String+extension.swift */, ); path = Extension; sourceTree = ""; @@ -904,8 +1073,8 @@ 9AF0422A2853160500C51449 /* UserInfoStorage */, 9AF0421228530CDB00C51449 /* VillagersHouseStorage */, 9AF0421A28530DBD00C51449 /* VillagersLikeStorage */, - 9AF0418528503B9400C51449 /* CoreDataStorage.xcdatamodeld */, 9AF041AB2851B20D00C51449 /* CoreDataStorage.swift */, + 9AF0418528503B9400C51449 /* CoreDataStorage.xcdatamodeld */, ); path = CoreDataStorage; sourceTree = ""; @@ -913,9 +1082,9 @@ 9AF0421228530CDB00C51449 /* VillagersHouseStorage */ = { isa = PBXGroup; children = ( - 9AF0421428530CFE00C51449 /* VillagersHouseStorage.swift */, - 9AF0420728530C2D00C51449 /* CoreDataVillagersHouseStorage.swift */, 9AF0421328530CE200C51449 /* EntityMapping */, + 9AF0420728530C2D00C51449 /* CoreDataVillagersHouseStorage.swift */, + 9AF0421428530CFE00C51449 /* VillagersHouseStorage.swift */, ); path = VillagersHouseStorage; sourceTree = ""; @@ -931,9 +1100,9 @@ 9AF0421628530D6E00C51449 /* ItemsStorage */ = { isa = PBXGroup; children = ( - 9AF0421828530D8D00C51449 /* ItemsStorage.swift */, - 9AF0420928530C3800C51449 /* CoreDataItemsStorage.swift */, 9AF0421728530D8000C51449 /* EntityMapping */, + 9AF0420928530C3800C51449 /* CoreDataItemsStorage.swift */, + 9AF0421828530D8D00C51449 /* ItemsStorage.swift */, ); path = ItemsStorage; sourceTree = ""; @@ -949,9 +1118,9 @@ 9AF0421A28530DBD00C51449 /* VillagersLikeStorage */ = { isa = PBXGroup; children = ( - 9AF0421C28530DD100C51449 /* VillagersLikeStorage.swift */, - 9AF0420528530C1E00C51449 /* CoreDataVillagersLikeStorage.swift */, 9AF0421B28530DC200C51449 /* EntityMapping */, + 9AF0420528530C1E00C51449 /* CoreDataVillagersLikeStorage.swift */, + 9AF0421C28530DD100C51449 /* VillagersLikeStorage.swift */, ); path = VillagersLikeStorage; sourceTree = ""; @@ -967,9 +1136,9 @@ 9AF042222853132300C51449 /* DailyTaskStorage */ = { isa = PBXGroup; children = ( - 9AF042242853133200C51449 /* DailyTaskStorage.swift */, - 9AF0421E285312FB00C51449 /* CoreDataDailyTaskStorage.swift */, 9AF042232853132800C51449 /* EntityMapping */, + 9AF0421E285312FB00C51449 /* CoreDataDailyTaskStorage.swift */, + 9AF042242853133200C51449 /* DailyTaskStorage.swift */, ); path = DailyTaskStorage; sourceTree = ""; @@ -985,9 +1154,9 @@ 9AF0422A2853160500C51449 /* UserInfoStorage */ = { isa = PBXGroup; children = ( - 9AF0422B2853161500C51449 /* UserInfoStorage.swift */, - 9AF04228285315FA00C51449 /* CoreDataUserInfoStorage.swift */, 9A99AA722864435100629C4A /* EntityMapping */, + 9AF04228285315FA00C51449 /* CoreDataUserInfoStorage.swift */, + 9AF0422B2853161500C51449 /* UserInfoStorage.swift */, ); path = UserInfoStorage; sourceTree = ""; @@ -1154,19 +1323,23 @@ 9A7ACF10287EC2D3001D47CB /* CollectionViewController.swift in Sources */, 9AF042212853131400C51449 /* DailyTaskEntity+Mapping.swift in Sources */, 9A836EF328AE0CAF00B5A74A /* SongsRequest.swift in Sources */, + 023349FA29274D1700C7080F /* TopsRequest.swift in Sources */, 9A6891BB2833787D0061AAF1 /* FossilsResponseDTO.swift in Sources */, + 02334A0C292B469E00C7080F /* AccessoriesResponseDTO.swift in Sources */, 9A68919D28335AFF0061AAF1 /* APIRequest.swift in Sources */, 9AF0421028530CA300C51449 /* ItemEntity+Mapping.swift in Sources */, 9A7ACEF0287EC20B001D47CB /* ItemsViewController.swift in Sources */, 9A3CFB3B2880790C00B0FFCB /* RugsRequest.swift in Sources */, 9A6891B5283376E50061AAF1 /* BugRequest.swift in Sources */, 9A7ACEF7287EC239001D47CB /* CatalogCellReactor.swift in Sources */, + 02334A02292769BF00C7080F /* DressUpRequest.swift in Sources */, 9A99AA362859C8BD00629C4A /* VillagersView.swift in Sources */, 9A7ACF30288000D7001D47CB /* KeywordCell.swift in Sources */, 9A7ACF04287EC26F001D47CB /* ItemDetailInfoView.swift in Sources */, 9A6DE3612889B18800EB2F3F /* MusicPlayerManager.swift in Sources */, 9A7ACEE9287EC194001D47CB /* VillagerHouseView.swift in Sources */, 9A99AA3C285AE2FC00629C4A /* ProgressBar.swift in Sources */, + 023447D7292E067400B9457C /* ReactionsResponseDTO.swift in Sources */, 9A3CFB2928805C4400B0FFCB /* MiscellaneousResponseDTO.swift in Sources */, 9A6DE369288AE25400EB2F3F /* PlayerMode.swift in Sources */, 9AF041AC2851B20D00C51449 /* CoreDataStorage.swift in Sources */, @@ -1180,14 +1353,19 @@ 9A541B6928220A72001B57FD /* AppDelegate.swift in Sources */, 9A7ACEE8287EC194001D47CB /* VillagersCell.swift in Sources */, 9A6891C3283380D50061AAF1 /* ArtResponseDTO.swift in Sources */, + 023447DB292E179C00B9457C /* FencingResponseDTO.swift in Sources */, + 02334A0A292B468100C7080F /* AccessoriesRequest.swift in Sources */, 9A99AA5A28602F4A00629C4A /* CustomTaskView.swift in Sources */, 9A7ACEDC287EC180001D47CB /* VillagersCoordinator.swift in Sources */, 9A7ACEF8287EC239001D47CB /* ItemsReactor.swift in Sources */, 9A6DE3592889271200EB2F3F /* MinimizePlayerView.swift in Sources */, + 02334A1A292B66DF00C7080F /* UmbrellasRequest.swift in Sources */, 9A6891AD283368EE0061AAF1 /* TurnipRequest.swift in Sources */, + 02334A1E292B6B2500C7080F /* WetSuitRequest.swift in Sources */, 9A62D74128783A4D0047750F /* UITableView+extension.swift in Sources */, 9A99AA46285AF1D600629C4A /* SectionsScrollView.swift in Sources */, 9A6891B3283371E20061AAF1 /* FishResponseDTO.swift in Sources */, + 02334A1C292B66F900C7080F /* UmbrellasResponseDTO.swift in Sources */, 9A3CFB3328806EDB00B0FFCB /* FloorsResponseDTO.swift in Sources */, 9A541B6B28220A72001B57FD /* SceneDelegate.swift in Sources */, 9A7ACEE1287EC188001D47CB /* VillagersReactor.swift in Sources */, @@ -1195,12 +1373,16 @@ 9A836EF528AE0CC200B5A74A /* SongResponseDTO.swift in Sources */, 9A99AA3A2859F9A300629C4A /* CollectionProgressView.swift in Sources */, 9AF0418C2850451100C51449 /* Category.swift in Sources */, + 02334A062927701200C7080F /* HeadwearRequest.swift in Sources */, 9A6891A7283362C90061AAF1 /* VillagersResponseDTO.swift in Sources */, 9A6DC20B287D0AC5004EEC41 /* AppSettingReactor.swift in Sources */, 9A7ACEE7287EC194001D47CB /* VillagerDetailView.swift in Sources */, + 023349FC29274D3500C7080F /* TopsResponseDTO.swift in Sources */, 9A99AA062858247700629C4A /* Coordinator.swift in Sources */, 9A99AA2C28597B7500629C4A /* TodaysTasksView.swift in Sources */, + 023447D5292E064C00B9457C /* ReactionsRequest.swift in Sources */, 9A3DE3D02887B7E6006EECF7 /* RecipesRequest.swift in Sources */, + 02334A14292B4E1000C7080F /* ShoesRequest.swift in Sources */, 9A4B4C33285033B300CC687C /* Fruit.swift in Sources */, 9A6891AF2833690A0061AAF1 /* TurnipResponseDTO.swift in Sources */, 9A3CFB49288295CA00B0FFCB /* CeilingDecorRequest.swift in Sources */, @@ -1219,7 +1401,9 @@ 9A99AA52285C32C300629C4A /* PreferencesView.swift in Sources */, 9AF04227285313ED00C51449 /* UserInfo.swift in Sources */, 9A99AA7E286AC4F900629C4A /* AboutViewController.swift in Sources */, + 02334A18292B55C700C7080F /* BagsResponseDTO.swift in Sources */, 9A2B0FD92897C84F00285C77 /* UserInfoReactor.swift in Sources */, + 02334A082927702600C7080F /* HeadwearResponseDTO.swift in Sources */, 9AF0421528530CFE00C51449 /* VillagersHouseStorage.swift in Sources */, 9A7ACEE0287EC188001D47CB /* VillagersCellReactor.swift in Sources */, 9A99AA642860401400629C4A /* UICollectionView+extension.swift in Sources */, @@ -1236,14 +1420,17 @@ 9AF0422C2853161500C51449 /* UserInfoStorage.swift in Sources */, 9A7ACEFA287EC25B001D47CB /* CatalogCoordinator.swift in Sources */, 9AD343EC28746593008A3D6D /* Int+extension.swift in Sources */, + 02334A00292766AB00C7080F /* BottomsResponseDTO.swift in Sources */, 9A99AA1E2858743F00629C4A /* SectionView.swift in Sources */, 9AF0421928530D8D00C51449 /* ItemsStorage.swift in Sources */, 9A99AA7628657A9900629C4A /* TodaysTasksSectionReactor.swift in Sources */, 9A1DB1D2284069DD00689F11 /* UIImageView+extension.swift in Sources */, + 023447D9292E178B00B9457C /* FencingReqeust.swift in Sources */, 9AF042252853133200C51449 /* DailyTaskStorage.swift in Sources */, 9A6891A9283366220061AAF1 /* EnvironmentsVariable.swift in Sources */, 9A3DE3CE2887B6F5006EECF7 /* RecipeResponseDTO.swift in Sources */, 9A7ACF29287FD984001D47CB /* ItemVariantsView.swift in Sources */, + 023447D3292DE70F00B9457C /* CollectionCoordinator.swift in Sources */, 9A4B4C35285034BA00CC687C /* Villager.swift in Sources */, 9A455C3D28975F73009A14A9 /* EmptyView.swift in Sources */, 9AF0420C28530C5F00C51449 /* VillagersLikeEntity+Mapping.swift in Sources */, @@ -1256,6 +1443,7 @@ 9A6891B9283378630061AAF1 /* FossilsRequest.swift in Sources */, 9A3CFB2B28805F4000B0FFCB /* MiscellaneousRequest.swift in Sources */, 9A99AA0A285824DF00629C4A /* AppAppearance.swift in Sources */, + 02334A12292B4DDD00C7080F /* ShoesResponseDTO.swift in Sources */, 9AF0418828503B9400C51449 /* CoreDataStorage.xcdatamodeld in Sources */, 9A99AA3E285AEA1700629C4A /* Date+extension.swift in Sources */, 9A99AA222858802B00629C4A /* UIView+extension.swift in Sources */, @@ -1290,6 +1478,7 @@ 9A99AA1428584C9B00629C4A /* UIFont+extension.swift in Sources */, 9A3CFB3128806A8200B0FFCB /* WallpaperResponseDTO.swift in Sources */, 9A7ACF1A287EC2F3001D47CB /* ItemProgressRow.swift in Sources */, + 02334A04292769DD00C7080F /* DressUpResponseDTO.swift in Sources */, 9AD343F728767649008A3D6D /* ProgressReactor.swift in Sources */, 9A68919928335ADD0061AAF1 /* DefaultAPIProvider.swift in Sources */, 9A99AA7428656D1600629C4A /* VillagersSectionReactor.swift in Sources */, @@ -1302,15 +1491,19 @@ 9A6891C1283380CD0061AAF1 /* ArtRequest.swift in Sources */, 9A99AA50285C1C3500629C4A /* UIButton+extension.swift in Sources */, 9A7ACF0C287EC26F001D47CB /* ItemBellsView.swift in Sources */, - 9A7ACF12287EC2DE001D47CB /* CollectionCoordinator.swift in Sources */, 9A99AA85286AE22200629C4A /* AboutItem.swift in Sources */, + 02334A16292B52B800C7080F /* BagsRequest.swift in Sources */, + 023349FE2927668400C7080F /* BottomsRequest.swift in Sources */, 9A68919B28335AE90061AAF1 /* APIProvider.swift in Sources */, + 023349F629261A3800C7080F /* PhotosReqeust.swift in Sources */, 9A3CFB3F288082AF00B0FFCB /* OtherRequest.swift in Sources */, 9A6DC205287C6199004EEC41 /* AboutReactor.swift in Sources */, 9A1DB1D92840857300689F11 /* APIError.swift in Sources */, 9AF0420A28530C3800C51449 /* CoreDataItemsStorage.swift in Sources */, + 023349F829261A5700C7080F /* PhotosResponseDTO.swift in Sources */, 9A6891B1283371A60061AAF1 /* FishRequest.swift in Sources */, 9AF0418A28503F7900C51449 /* Item.swift in Sources */, + 02334A0E292B4A2300C7080F /* SocksRequest.swift in Sources */, 9A99AA2028587A7500629C4A /* SectionHeaderView.swift in Sources */, 9A7ACF27287F9F00001D47CB /* HousewaresRequest.swift in Sources */, 9AF042042852F2F500C51449 /* Keyword.swift in Sources */, @@ -1318,6 +1511,8 @@ 9A3DE3CC2886AFDA006EECF7 /* UINavigationItem.swift in Sources */, 9A3CFB45288128CD00B0FFCB /* Array+extension.swift in Sources */, 9A99AA662860431A00629C4A /* IconChooserViewController.swift in Sources */, + 02334A10292B4A2D00C7080F /* SocksResponseDTO.swift in Sources */, + 02334A20292B6B5E00C7080F /* WetSuitResponseDTO.swift in Sources */, 9A6DC209287C7B42004EEC41 /* AppSettingView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1506,7 +1701,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.2.0; PRODUCT_BUNDLE_IDENTIFIER = leeari.NookPortalPlus; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -1532,7 +1727,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.2.0; PRODUCT_BUNDLE_IDENTIFIER = leeari.NookPortalPlus; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json index 04de9d48..f78687a2 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -150,6 +150,66 @@ "scale" : "1x", "size" : "1024x1024" }, + { + "filename" : "16.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "filename" : "32.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "filename" : "32.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "filename" : "64.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "filename" : "128.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "filename" : "256.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "filename" : "256.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "filename" : "512.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "filename" : "512.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "filename" : "1024.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + }, { "filename" : "48.png", "idiom" : "watch", @@ -225,6 +285,13 @@ "size" : "51x51", "subtype" : "45mm" }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "54x54", + "subtype" : "49mm" + }, { "filename" : "172.png", "idiom" : "watch", @@ -257,70 +324,17 @@ "subtype" : "45mm" }, { - "filename" : "1024.png", - "idiom" : "watch-marketing", - "scale" : "1x", - "size" : "1024x1024" - }, - { - "filename" : "16.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "filename" : "32.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "filename" : "32.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "filename" : "64.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "filename" : "128.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "filename" : "256.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "filename" : "256.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "filename" : "512.png", - "idiom" : "mac", + "idiom" : "watch", + "role" : "quickLook", "scale" : "2x", - "size" : "256x256" - }, - { - "filename" : "512.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" + "size" : "129x129", + "subtype" : "49mm" }, { "filename" : "1024.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" + "idiom" : "watch-marketing", + "scale" : "1x", + "size" : "1024x1024" } ], "info" : { diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Contents.json index 12742b60..c5e42bc0 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Contents.json +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Contents.json @@ -5,7 +5,7 @@ "scale" : "1x" }, { - "filename" : "Image.png", + "filename" : "icon-photos.png", "idiom" : "universal", "scale" : "2x" }, diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Image.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Image.png deleted file mode 100644 index 4a4741c6..00000000 Binary files a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Image.png and /dev/null differ diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/icon-photos.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/icon-photos.png new file mode 100644 index 00000000..14710d72 Binary files /dev/null and b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/icon-photos.png differ diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-reactions.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-reactions.imageset/Contents.json new file mode 100644 index 00000000..88f0b524 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-reactions.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Grin.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-reactions.imageset/Grin.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-reactions.imageset/Grin.png new file mode 100644 index 00000000..e9cad1bd Binary files /dev/null and b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-reactions.imageset/Grin.png differ diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/AppAppearance.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/App/AppAppearance.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/AppAppearance.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/App/AppAppearance.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/AppDelegate.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/App/AppDelegate.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/AppDelegate.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/App/AppDelegate.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/SceneDelegate.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/App/SceneDelegate.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/SceneDelegate.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/App/SceneDelegate.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/AppCoordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/AppCoordinator.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/AppCoordinator.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/AppCoordinator.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Coordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Coordinator.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Coordinator.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Coordinator.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents index 8c6c2379..4ab4040a 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -58,6 +58,7 @@ + diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/EntityMapping/ItemEntity+Mapping.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/EntityMapping/ItemEntity+Mapping.swift index 30b80f21..97f4e6c6 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/EntityMapping/ItemEntity+Mapping.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/EntityMapping/ItemEntity+Mapping.swift @@ -64,6 +64,8 @@ extension ItemEntity { self.foodPower = Int64(item.foodPower ?? 0) self.doorDeco = item.doorDeco ?? false self.musicURL = item.musicURL + self.themes = item.themes + self.styles = item.styles?.map { $0.rawValue } } func toKeyword() -> [Keyword: [String]] { @@ -132,7 +134,9 @@ extension ItemEntity { variations: variations?.compactMap { Variant($0)}, foodPower: Int(foodPower), doorDeco: doorDeco, - musicURL: musicURL + musicURL: musicURL, + themes: themes, + styles: styles?.compactMap { Style(rawValue: $0) } ) } } @@ -298,8 +302,8 @@ extension Variant { "variantId": variantId, "internalId": internalId, "variantTranslations": variantTranslations?.toDictionary() ?? [:], - "colors": colors.map { $0.rawValue }, - "concepts": concepts.map { $0.rawValue }, + "colors": colors?.map { $0.rawValue } ?? [], + "concepts": concepts?.map { $0.rawValue } ?? [], "patternTranslations": patternTranslations?.toDictionary() ?? [:] ] } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIViewController+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIViewController+extension.swift index 61eacd58..5c49154b 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIViewController+extension.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIViewController+extension.swift @@ -37,7 +37,7 @@ extension UIViewController { popoverController.barButtonItem = barButtonItem } else { popoverController.sourceRect = CGRect( - x: self.view.bounds.midX , + x: self.view.bounds.midX, y: self.view.bounds.midY, width: .zero, height: .zero diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Category.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Category.swift index 31e2564f..77f43a3f 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Category.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Category.swift @@ -23,6 +23,19 @@ enum Category: String, CaseIterable { case ceilingDecor = "Ceiling Decor" case recipes = "Recipes" case songs = "Songs" + case photos = "Photos" + case fencing = "Fencing" + case tops = "Tops" + case bottoms = "Bottoms" + case dressUp = "Dress-Up" + case headwear = "Headwear" + case accessories = "Accessories" + case socks = "Socks" + case shoes = "Shoes" + case bags = "Bags" + case umbrellas = "Umbrellas" + case wetSuit = "Wet Suit" + case reactions = "Reactions" var iconName: String { switch self { @@ -41,9 +54,22 @@ enum Category: String, CaseIterable { case .ceilingDecor: return "icon-ceiling" case .recipes: return "icon-recipe" case .songs: return "icon-song" + case .photos: return "icon-photos" + case .fencing: return "icon-fence" + case .tops: return "icon-top" + case .bottoms: return "icon-pant" + case .dressUp: return "icon-top" + case .headwear: return "icon-helm" + case .accessories: return "icon-glasses" + case .socks: return "icon-socks" + case .shoes: return "icon-shoes" + case .bags: return "icon-bag" + case .umbrellas: return "icon-umbrella" + case .wetSuit: return "icon-wetsuit" + case .reactions: return "icon-reactions" } } - + var progressIconName: String { switch self { case .bugs: return "Ins1" @@ -61,6 +87,19 @@ enum Category: String, CaseIterable { case .ceilingDecor: return "icon-ceiling" case .recipes: return "icon-recipe" case .songs: return "icon-song" + case .photos: return "icon-photos" + case .fencing: return "icon-fence" + case .tops: return "icon-top" + case .bottoms: return "icon-pant" + case .dressUp: return "icon-top" + case .headwear: return "icon-helm" + case .accessories: return "icon-glasses" + case .socks: return "icon-socks" + case .shoes: return "icon-shoes" + case .bags: return "icon-bag" + case .umbrellas: return "icon-umbrella" + case .wetSuit: return "icon-wetsuit" + case .reactions: return "icon-reactions" } } @@ -70,7 +109,9 @@ enum Category: String, CaseIterable { .fossils, .art, .housewares, .miscellaneous, .wallMounted, .ceilingDecor, .wallpaper, .floors, .rugs, - .other, .recipes, .songs + .other, .recipes, .songs, .photos, .fencing, + .tops, .bottoms, .dressUp, .headwear, .accessories, .socks, .shoes, .bags, .umbrellas, .wetSuit, + .reactions ] } @@ -86,7 +127,54 @@ enum Category: String, CaseIterable { [ .housewares, .miscellaneous, .wallMounted, .ceilingDecor, .wallpaper, .floors, - .rugs, .other, .songs + .rugs, .other, .songs, .photos, .fencing, + .tops, .bottoms, .dressUp, .headwear, .accessories, .socks, .shoes, .bags, .umbrellas, .wetSuit, + .reactions ] } } + +extension Category: Comparable { + + private var sortOrder: Int { + switch self { + case .fishes: return 0 + case .seaCreatures: return 1 + case .bugs: return 2 + case .fossils: return 3 + case .art: return 4 + case .housewares: return 5 + case .miscellaneous: return 6 + case .wallMounted: return 7 + case .wallpaper: return 8 + case .floors: return 9 + case .rugs: return 10 + case .other: return 11 + case .ceilingDecor: return 12 + case .recipes: return 13 + case .songs: return 14 + case .fencing: return 15 + case .photos: return 16 + case .tops: return 17 + case .bottoms: return 18 + case .dressUp: return 19 + case .headwear: return 20 + case .accessories: return 21 + case .socks: return 22 + case .shoes: return 23 + case .bags: return 24 + case .umbrellas: return 25 + case .wetSuit: return 26 + case .reactions: return 27 + } + } + + static func == (lhs: Self, rhs: Self) -> Bool { + return lhs.sortOrder == rhs.sortOrder + } + + static func < (lhs: Self, rhs: Self) -> Bool { + return lhs.sortOrder < rhs.sortOrder + } + +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Item.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Item.swift index 8a7e3057..6583b76c 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Item.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Item.swift @@ -67,12 +67,17 @@ struct Item { var doorDeco: Bool? var musicURL: String? + var themes: [String]? + var styles: [Style]? } extension Item { var keyword: [String] { - var list = colors.map { $0.rawValue } + (concepts?.map { $0.rawValue } ?? []) + var list = colors.map { $0.rawValue } + + (concepts?.map { $0.rawValue } ?? []) + + (themes ?? []) + + (styles?.map { $0.rawValue } ?? []) if let tag = tag, !list.contains(tag.lowercased()) { list.append(tag) } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/AccessoriesRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/AccessoriesRequest.swift new file mode 100644 index 00000000..115dc7f7 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/AccessoriesRequest.swift @@ -0,0 +1,20 @@ +// +// AccessoriesRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation +import Alamofire + +struct AccessoriesRequest: APIRequest { + typealias Response = [AccessoriesResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Accessories.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/BagsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/BagsRequest.swift new file mode 100644 index 00000000..1bf5b898 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/BagsRequest.swift @@ -0,0 +1,20 @@ +// +// BagsRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation +import Alamofire + +struct BagsRequest: APIRequest { + typealias Response = [BagsResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Bags.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/BottomsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/BottomsRequest.swift new file mode 100644 index 00000000..50265610 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/BottomsRequest.swift @@ -0,0 +1,20 @@ +// +// BottomsRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/18. +// + +import Foundation +import Alamofire + +struct BottomsRequest: APIRequest { + typealias Response = [BottomsResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Bottoms.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/DressUpRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/DressUpRequest.swift new file mode 100644 index 00000000..f502e520 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/DressUpRequest.swift @@ -0,0 +1,20 @@ +// +// DressUpRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/18. +// + +import Foundation +import Alamofire + +struct DressUpRequest: APIRequest { + typealias Response = [DressUpResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Dress-Up.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/HeadwearRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/HeadwearRequest.swift new file mode 100644 index 00000000..0fb1b337 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/HeadwearRequest.swift @@ -0,0 +1,20 @@ +// +// HeadwearRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/18. +// + +import Foundation +import Alamofire + +struct HeadwearRequest: APIRequest { + typealias Response = [HeadwearResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Headwear.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/ShoesRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/ShoesRequest.swift new file mode 100644 index 00000000..3c7ede1c --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/ShoesRequest.swift @@ -0,0 +1,20 @@ +// +// ShoesRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation +import Alamofire + +struct ShoesRequest: APIRequest { + typealias Response = [ShoesResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Shoes.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/SocksRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/SocksRequest.swift new file mode 100644 index 00000000..aa3e1e3a --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/SocksRequest.swift @@ -0,0 +1,20 @@ +// +// SocksRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation +import Alamofire + +struct SocksRequest: APIRequest { + typealias Response = [SocksResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Socks.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/TopsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/TopsRequest.swift new file mode 100644 index 00000000..ee19efa6 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/TopsRequest.swift @@ -0,0 +1,20 @@ +// +// TopsRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/18. +// + +import Foundation +import Alamofire + +struct TopsRequest: APIRequest { + typealias Response = [TopsResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Tops.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/UmbrellasRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/UmbrellasRequest.swift new file mode 100644 index 00000000..2fd12867 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/UmbrellasRequest.swift @@ -0,0 +1,20 @@ +// +// UmbrellasRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation +import Alamofire + +struct UmbrellasRequest: APIRequest { + typealias Response = [UmbrellasResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Umbrellas.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/WetSuitRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/WetSuitRequest.swift new file mode 100644 index 00000000..c48fe858 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Clothes/WetSuitRequest.swift @@ -0,0 +1,20 @@ +// +// WetSuitRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation +import Alamofire + +struct WetSuitRequest: APIRequest { + typealias Response = [WetSuitResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Clothing Other.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/CeilingDecorRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/CeilingDecorRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/CeilingDecorRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/CeilingDecorRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/FencingReqeust.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/FencingReqeust.swift new file mode 100644 index 00000000..42d60544 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/FencingReqeust.swift @@ -0,0 +1,20 @@ +// +// FencingReqeust.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/23. +// + +import Foundation +import Alamofire + +struct FencingReqeust: APIRequest { + typealias Response = [FencingResponseDTO] + let method: HTTPMethod = .get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Fencing.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FloorsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/FloorsRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FloorsRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/FloorsRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/HousewaresRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/HousewaresRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/HousewaresRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/HousewaresRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/MiscellaneousRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/MiscellaneousRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/MiscellaneousRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/MiscellaneousRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/OtherRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/OtherRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/OtherRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/OtherRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/PhotosReqeust.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/PhotosReqeust.swift new file mode 100644 index 00000000..6f45b28d --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/PhotosReqeust.swift @@ -0,0 +1,20 @@ +// +// PhotosReqeust.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/17. +// + +import Foundation +import Alamofire + +struct PhotosReqeust: APIRequest { + typealias Response = [PhotosResponseDTO] + let method: HTTPMethod = HTTPMethod.get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Photos.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/RecipesRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/RecipesRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/RecipesRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/RecipesRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/RugsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/RugsRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/RugsRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/RugsRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/SongsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/SongsRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/SongsRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/SongsRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/WallMountedRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/WallMountedRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/WallMountedRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/WallMountedRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/WallpaperRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/WallpaperRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/WallpaperRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Furniture/WallpaperRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/ArtRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/ArtRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/ArtRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/ArtRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/BugRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/BugRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/BugRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/BugRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FishRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/FishRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FishRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/FishRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FossilsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/FossilsRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FossilsRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/FossilsRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/SeaCreaturesRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/SeaCreaturesRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/SeaCreaturesRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/Museum/SeaCreaturesRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/ReactionsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/ReactionsRequest.swift new file mode 100644 index 00000000..e0b84926 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/ReactionsRequest.swift @@ -0,0 +1,20 @@ +// +// ReactionsRequest.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/23. +// + +import Foundation +import Alamofire + +struct ReactionsRequest: APIRequest { + typealias Response = [ReactionsResponseDTO] + let method: HTTPMethod = .get + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Reactions.json" + var headers: [String : String]? = [:] + var parameters: [String : String] { + return [:] + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/AccessoriesResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/AccessoriesResponseDTO.swift new file mode 100644 index 00000000..98b50ca8 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/AccessoriesResponseDTO.swift @@ -0,0 +1,70 @@ +// +// AccessoriesResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation + +struct AccessoriesResponseDTO: Codable { + let name: String + let diy: Bool + let size: Size + let sourceNotes: [String]? + let versionAdded: String + let catalog: Catalog? + let buy, sell: Int + let translations: Translations + let source: [String] + let themesTranslations: [String: Translations]? + let hhaBasePoints: Int + let villagerEquippable: Bool + let seasonalAvailability: String + let type: String + let unlocked: Bool + let variations: [WardrobeVariat]? + let styles: [Style] + let themes: [Theme] + let recipe: RecipeResponseDTO? + let closetImage, storageImage: String? + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let seasonality: String? + let mannequinSeason: String? + let sortOrder: Int? + let filename: String? + let clothGroupId, internalId: Int? + let uniqueEntryId: String? + let colors: [Color]? +} + +extension AccessoriesResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .accessories, + image: closetImage ?? variations?.first?.closetImage, + diy: diy, + buy: buy, + sell: sell, + size: size, + exchangePrice: exchangePrice ?? variations?.first?.exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: themesTranslations?.values.map { $0.localizedName() }, + styles: styles, + recipe: recipe, + variations: variations?.map { $0.toVariat() } + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/BagsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/BagsResponseDTO.swift new file mode 100644 index 00000000..310d8d4a --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/BagsResponseDTO.swift @@ -0,0 +1,69 @@ +// +// BagsResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation + +struct BagsResponseDTO: Codable { + let name: String + let diy: Bool + let size: Size + let sourceNotes: [String]? + let versionAdded: String + let catalog: Catalog + let buy, sell: Int + let translations: Translations + let source: [String] + let themesTranslations: [String: Translations]? + let hhaBasePoints: Int + let villagerEquippable: Bool + let seasonalAvailability: String + let unlocked: Bool + let variations: [WardrobeVariat]? + let styles: [Style] + let themes: [Theme] + let recipe: RecipeResponseDTO? + let closetImage: String? + let storageImage: String? + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let seasonality: String? + let sortOrder: Int? + let filename: String? + let clothGroupId, internalId: Int? + let uniqueEntryId: String? + let colors: [Color]? +} + +extension BagsResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .bags, + image: closetImage ?? variations?.first?.closetImage ?? variations?.first?.storageImage ?? storageImage, + diy: diy, + buy: buy, + sell: sell, + size: size, + exchangePrice: exchangePrice ?? variations?.first?.exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: themesTranslations?.values.map { $0.localizedName() }, + styles: styles, + recipe: recipe, + variations: variations?.map { $0.toVariat() } + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/BottomsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/BottomsResponseDTO.swift new file mode 100644 index 00000000..2de15f0c --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/BottomsResponseDTO.swift @@ -0,0 +1,70 @@ +// +// BottomsResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/18. +// + +import Foundation + +struct BottomsResponseDTO: Codable { + let name: String + let diy: Bool + let size: Size + let sourceNotes: [String]? + let versionAdded: String + let catalog: Catalog + let buy, sell: Int + let translations: Translations + let source: [String] + let themesTranslations: [String: Translations]? + let hhaBasePoints: Int + let villagerEquippable: Bool + let seasonalAvailability: String + let unlocked: Bool + let variations: [WardrobeVariat]? + let styles: [Style] + let themes: [Theme] + let recipe: RecipeResponseDTO? + let closetImage, storageImage: String? + let variation: String? + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let seasonality: String? + let mannequinSeason: String? + let sortOrder: Int? + let filename: String? + let clothGroupId, internalId: Int? + let uniqueEntryId: String? + let colors: [Color]? +} + +extension BottomsResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .bottoms, + image: closetImage ?? variations?.first?.closetImage, + diy: diy, + buy: buy, + sell: sell, + size: size, + exchangePrice: exchangePrice ?? variations?.first?.exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: themesTranslations?.values.map { $0.localizedName() }, + styles: styles, + recipe: recipe, + variations: variations?.map { $0.toVariat() } + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/DressUpResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/DressUpResponseDTO.swift new file mode 100644 index 00000000..3531bd78 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/DressUpResponseDTO.swift @@ -0,0 +1,72 @@ +// +// DressUpResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/18. +// + +import Foundation + +struct DressUpResponseDTO: Codable { + let name: String + let diy: Bool + let size: Size + let sourceNotes: [String]? + let versionAdded: String + let catalog: Catalog? + let buy: Int + let sell: Int? + let translations: Translations + let source: [String] + let themesTranslations: [String: Translations]? + let hhaBasePoints: Int + let primaryShape: String + let secondaryShape: String + let villagerEquippable: Bool + let seasonalAvailability: String + let unlocked: Bool + let variations: [WardrobeVariat]? + let styles: [Style] + let themes: [Theme] + let recipe: RecipeResponseDTO? + let closetImage, storageImage: String? + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let seasonality: String? + let mannequinSeason: String? + let sortOrder: Int? + let filename: String? + let clothGroupId, internalId: Int? + let uniqueEntryId: String? + let colors: [Color]? +} + +extension DressUpResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .dressUp, + image: closetImage ?? variations?.first?.closetImage, + diy: diy, + buy: buy, + sell: sell ?? -1, + size: size, + exchangePrice: exchangePrice ?? variations?.first?.exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: themesTranslations?.values.map { $0.localizedName() }, + styles: styles, + recipe: recipe, + variations: variations?.map { $0.toVariat() } + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/HeadwearResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/HeadwearResponseDTO.swift new file mode 100644 index 00000000..e4e1456f --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/HeadwearResponseDTO.swift @@ -0,0 +1,70 @@ +// +// HeadwearResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/18. +// + +import Foundation + +struct HeadwearResponseDTO: Codable { + let name: String + let diy: Bool + let size: Size + let sourceNotes: [String]? + let versionAdded: String + let catalog: Catalog? + let buy, sell: Int + let translations: Translations + let source: [String] + let themesTranslations: [String: Translations]? + let hhaBasePoints: Int + let villagerEquippable: Bool + let seasonalAvailability: String + let type: String + let unlocked: Bool + let variations: [WardrobeVariat]? + let styles: [Style] + let themes: [Theme] + let recipe: RecipeResponseDTO? + let closetImage, storageImage: String? + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let seasonality: String? + let mannequinSeason: String? + let sortOrder: Int? + let filename: String? + let clothGroupId, internalId: Int? + let uniqueEntryId: String? + let colors: [Color]? +} + +extension HeadwearResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .headwear, + image: closetImage ?? variations?.first?.closetImage, + diy: diy, + buy: buy, + sell: sell, + size: size, + exchangePrice: exchangePrice ?? variations?.first?.exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: themesTranslations?.values.map { $0.localizedName() }, + styles: styles, + recipe: recipe, + variations: variations?.map { $0.toVariat() } + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/ShoesResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/ShoesResponseDTO.swift new file mode 100644 index 00000000..62c5090b --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/ShoesResponseDTO.swift @@ -0,0 +1,68 @@ +// +// ShoesResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation + +struct ShoesResponseDTO: Codable { + let name: String + let closetImage, storageImage: String? + let diy: Bool + let buy, sell, hhaBasePoints: Int + let size: Size + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let source: [String] + let sourceNotes: [String]? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let seasonalAvailability: String + let seasonality: String? + let mannequinSeason: String? + let sortOrder: Int? + let villagerEquippable: Bool + let catalog: Catalog? + let versionAdded: String + let unlocked: Bool + let filename: String? + let clothGroupId, internalId: Int? + let uniqueEntryId: String? + let themesTranslations: [String: Translations]? + let translations: Translations + let colors: [Color]? + let styles: [Style] + let themes: [Theme] + let recipe: RecipeResponseDTO? + let variations: [WardrobeVariat]? +} + +extension ShoesResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .shoes, + image: closetImage ?? variations?.first?.closetImage, + diy: diy, + buy: buy, + sell: sell, + size: size, + exchangePrice: exchangePrice ?? variations?.first?.exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: themesTranslations?.values.map { $0.localizedName() }, + styles: styles, + recipe: recipe, + variations: variations?.map { $0.toVariat() } + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/SocksResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/SocksResponseDTO.swift new file mode 100644 index 00000000..2a65a722 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/SocksResponseDTO.swift @@ -0,0 +1,67 @@ +// +// SocksResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation + +struct SocksResponseDTO: Codable { + let name: String + let diy: Bool + let size: Size + let sourceNotes: [String]? + let versionAdded: String + let catalog: Catalog? + let buy, sell: Int + let translations: Translations + let source: [String] + let themesTranslations: [String: Translations]? + let hhaBasePoints: Int + let villagerEquippable: Bool + let seasonalAvailability: String + let unlocked: Bool + let variations: [WardrobeVariat]? + let styles: [Style] + let themes: [Theme] + let closetImage, storageImage: String? + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let seasonEvent, seasonEventExclusive: String? + let seasonality: String? + let mannequinSeason: String? + let sortOrder: Int? + let filename: String? + let clothGroupId, internalId: Int? + let uniqueEntryId: String? + let colors: [Color]? +} + +extension SocksResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .socks, + image: closetImage ?? variations?.first?.closetImage, + diy: diy, + buy: buy, + sell: sell, + size: size, + exchangePrice: exchangePrice ?? variations?.first?.exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: themesTranslations?.values.map { $0.localizedName() }, + styles: styles, + recipe: nil, + variations: variations?.map { $0.toVariat() } + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/TopsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/TopsResponseDTO.swift new file mode 100644 index 00000000..25c6e686 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/TopsResponseDTO.swift @@ -0,0 +1,167 @@ +// +// TopsResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/18. +// + +import Foundation + +struct TopsResponseDTO: Codable { + let sourceSheet: String + let name: String + let closetImage, storageImage: String? + let variation: String? + let diy: Bool + let buy: Int + let sell: Int? + let hhaBasePoints: Int + let size: Size + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let source: [String] + let sourceNotes: [String]? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let seasonalAvailability: String + let seasonality: String? + let mannequinSeason: String? + let sortOrder: Int? + let villagerEquippable: Bool + let catalog: Catalog? + let versionAdded: String + let unlocked: Bool + let filename: String? + let clothGroupId, internalId: Int? + let uniqueEntryId: String? + let themesTranslations: [String: Translations]? + let translations: Translations + let colors: [Color]? + let styles: [Style] + let themes: [Theme] + let recipe: RecipeResponseDTO? + let variations: [WardrobeVariat]? +} + +enum Theme: String, Codable { + case everyday, comfy, outdoorsy, formal, vacation, work, party, theatrical, sporty, goth + case fairyTale = "fairy tale" +} + +struct WardrobeVariat: Codable { + let closetImage: String? + let storageImage: String + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let seasonality: String + let mannequinSeason: String? + let sortOrder: Int + let filename: String + let clothGroupId, internalId: Int + let uniqueEntryId: String + let variantTranslations: Translations + let colors: [Color] + + func toVariat() -> Variant { + return .init( + image: closetImage ?? storageImage, + variation: nil, + pattern: nil, + patternTitle: nil, + kitType: nil, + cyrusCustomizePrice: -1, + surface: nil, + exchangePrice: exchangePrice, + exchangeCurrency: exchangeCurrency, + seasonEvent: seasonEvent, + seasonEventExclusive: seasonEventExclusive, + hhaCategory: nil, + filename: filename, + variantId: "1_0_0", + internalId: internalId, + variantTranslations: variantTranslations, + colors: colors, + concepts: [], + patternTranslations: nil + ) + } +} + +extension TopsResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .tops, + image: closetImage ?? variations?.first?.closetImage, + diy: diy, + buy: buy, + sell: sell ?? -1, + size: size, + exchangePrice: exchangePrice ?? variations?.first?.exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: themesTranslations?.values.map { $0.localizedName() }, + styles: styles, + recipe: recipe, + variations: variations?.map { $0.toVariat() } + ) + } +} + +extension Item { + init( + name: String, + category: Category, + image: String?, + diy: Bool, + buy: Int?, + sell: Int, + size: Size, + exchangePrice: Int?, + exchangeCurrency: ExchangeCurrency?, + sources: [String], + sourceNotes: [String]?, + seasonEvent: String?, + hhaBasePoints: Int?, + catalog: Catalog?, + internalId: Int?, + translations: Translations, + colors: [Color]?, + themes: [String]?, + styles: [Style], + recipe: RecipeResponseDTO?, + variations: [Variant]? + ) { + self.name = name + self.category = category + self.image = image + self.diy = diy + self.buy = buy + self.sell = sell + self.size = size + self.exchangePrice = exchangePrice + self.exchangeCurrency = exchangeCurrency + self.sources = sources + self.sourceNotes = sourceNotes + self.seasonEvent = seasonEvent + self.hhaBasePoints = hhaBasePoints + self.catalog = catalog + self.internalId = internalId + self.translations = translations + self.colors = colors ?? [] + self.themes = themes + self.styles = styles + self.recipe = recipe + self.variations = variations + self.genuine = true + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/UmbrellasResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/UmbrellasResponseDTO.swift new file mode 100644 index 00000000..a5d5b324 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/UmbrellasResponseDTO.swift @@ -0,0 +1,60 @@ +// +// UmbrellasResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation + +struct UmbrellasResponseDTO: Codable { + let name: String + let storageImage: String + let diy: Bool + let buy, sell, hhaBasePoints: Int + let size: Size + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let source: [String] + let sourceNotes: [String]? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let villagerEquippable: Bool + let catalog: Catalog + let versionAdded: String + let unlocked: Bool + let filename: String + let internalId: Int + let uniqueEntryId: String + let translations: Translations + let colors: [Color] + let recipe: RecipeResponseDTO? +} + +extension UmbrellasResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .umbrellas, + image: storageImage, + diy: diy, + buy: buy, + sell: sell, + size: size, + exchangePrice: exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: nil, + styles: [], + recipe: recipe, + variations: nil + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/WetSuitResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/WetSuitResponseDTO.swift new file mode 100644 index 00000000..aae3f690 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Clothes/WetSuitResponseDTO.swift @@ -0,0 +1,65 @@ +// +// WetSuitResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/21. +// + +import Foundation + +struct WetSuitResponseDTO: Codable { + let sourceSheet, name: String + let closetImage, storageImage: String? + let diy: Bool + let buy, sell, hhaBasePoints: Int + let size: Size + let exchangePrice: Int? + let exchangeCurrency: ExchangeCurrency? + let source: [String] + let sourceNotes: String? + let seasonEvent, seasonEventExclusive: String? + let seasonalAvailability: String + let seasonality, gender: String? + let sortOrder: Int? + let villagerEquippable: Bool + let primaryShape, secondaryShape, versionAdded: String + let catalog: Catalog + let unlocked: Bool + let filename: String? + let clothGroupId, internalId: Int? + let uniqueEntryId: String? + let themesTranslations: [String: Translations]? + let translations: Translations + let colors: [Color]? + let styles: [Style] + let themes: [Theme] + let variations: [WardrobeVariat]? +} + +extension WetSuitResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .wetSuit, + image: closetImage ?? variations?.first?.closetImage, + diy: diy, + buy: buy, + sell: sell, + size: size, + exchangePrice: exchangePrice ?? variations?.first?.exchangePrice, + exchangeCurrency: exchangeCurrency, + sources: source, + sourceNotes: sourceNotes == nil ? nil : [sourceNotes!], + seasonEvent: seasonEvent, + hhaBasePoints: hhaBasePoints, + catalog: catalog, + internalId: internalId, + translations: translations, + colors: colors, + themes: themesTranslations?.values.map { $0.localizedName() }, + styles: styles, + recipe: nil, + variations: variations?.map { $0.toVariat() } + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/CeilingDecorResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/CeilingDecorResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/CeilingDecorResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/CeilingDecorResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/FencingResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/FencingResponseDTO.swift new file mode 100644 index 00000000..3d1b2930 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/FencingResponseDTO.swift @@ -0,0 +1,106 @@ +// +// FencingResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/23. +// + +import Foundation + +struct FencingResponseDTO: Codable { + let name: String + let image: String? + let bodyTitle: String? + let diy, customize: Bool + let kitCost: Int? + let kitType: String? + let cyrusCustomizePrice: Int? + let stackSize: Int? + let buy: Int + let sell: Int + let source: [String] + let sourceNotes: [String]? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let catalog: Catalog + let versionAdded: String + let unlocked: Bool + let filename: String? + let variantId: String? + let internalId: Int? + let uniqueEntryId: String? + let translations: Translations + let recipe: RecipeResponseDTO + let variations: [Variant]? +} + +extension Item { + init( + name: String, + category: Category, + image: String?, + diy: Bool, + buy: Int, + sell: Int, + exchangePrice: Int?, + exchangeCurrency: ExchangeCurrency?, + sources: [String], + sourceNotes: [String]?, + seasonEvent: String?, + internalId: Int?, + translations: Translations, + colors: [Color] = [], + recipe: RecipeResponseDTO?, + bodyTitle: String?, + catalog: Catalog?, + variations: [Variant]?, + bodyCustomize: Bool + ) { + self.name = name + self.category = category + self.image = image + self.diy = diy + self.buy = buy + self.sell = sell + self.exchangePrice = exchangePrice + self.exchangeCurrency = exchangeCurrency + self.sources = sources + self.sourceNotes = sourceNotes + self.seasonEvent = seasonEvent + self.internalId = internalId + self.translations = translations + self.colors = colors + self.recipe = recipe + self.bodyTitle = bodyTitle + self.catalog = catalog + self.variations = variations + self.genuine = true + self.patternCustomize = false + self.bodyCustomize = bodyCustomize + } +} + +extension FencingResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .fencing, + image: image ?? variations?.first?.image, + diy: diy, + buy: buy, + sell: sell, + exchangePrice: cyrusCustomizePrice ?? variations?.first?.cyrusCustomizePrice ?? recipe.exchangePrice, + exchangeCurrency: .nookMiles, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + internalId: internalId, + translations: translations, + recipe: recipe, + bodyTitle: bodyTitle, + catalog: catalog, + variations: variations, + bodyCustomize: customize + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FloorsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/FloorsResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FloorsResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/FloorsResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/HousewaresResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/HousewaresResponseDTO.swift similarity index 98% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/HousewaresResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/HousewaresResponseDTO.swift index 843be918..f22c245f 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/HousewaresResponseDTO.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/HousewaresResponseDTO.swift @@ -182,12 +182,12 @@ struct Variant: Codable { let variantId: String let internalId: Int let variantTranslations: Translations? - let colors: [Color] - let concepts: [Concept] + let colors: [Color]? + let concepts: [Concept]? let patternTranslations: Translations? func toKeyword() -> [String] { - return colors.map { $0.rawValue } + concepts.map { $0.rawValue } + return (colors?.map { $0.rawValue } ?? []) + (concepts?.map { $0.rawValue } ?? []) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/MiscellaneousResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/MiscellaneousResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/MiscellaneousResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/MiscellaneousResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/OtherResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/OtherResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/OtherResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/OtherResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/PhotosResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/PhotosResponseDTO.swift new file mode 100644 index 00000000..18c0887a --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/PhotosResponseDTO.swift @@ -0,0 +1,79 @@ +// +// PhotosResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/17. +// + +import Foundation + +struct PhotosResponseDTO: Codable { + let sourceSheet: String + let name: String + let diy: Bool + let kitCost: Int + let size: Size + let versionAdded: String + let bodyTitle: String + let buy, sell: Int + let customize: Bool + let translations: Translations + let source: [String] + let hhaBasePoints: Int + let unlocked: Bool + let variations: [Variant] +} + +extension PhotosResponseDTO { + + func toDomain() -> Item { + return Item( + name: name, + category: .photos, + sell: sell, + translations: translations, + colors: variations.first?.colors ?? [], + diy: diy, + size: size, + image: variations.first?.image ?? "", + bodyTitle: bodyTitle, + sources: source, + bodyCustomize: customize, + hhaBasePoints: hhaBasePoints, + variations: variations + ) + } +} + +extension Item { + init( + name: String, + category: Category, + sell: Int, + translations: Translations, + colors: [Color], + diy: Bool, + size: Size, + image: String?, + bodyTitle: String, + sources: [String], + bodyCustomize: Bool, + hhaBasePoints: Int, + variations: [Variant] + ) { + self.name = name + self.category = category + self.sell = sell + self.translations = translations + self.colors = colors + self.diy = diy + self.size = size + self.image = image + self.bodyTitle = bodyTitle + self.sources = sources + self.bodyCustomize = bodyCustomize + self.hhaBasePoints = hhaBasePoints + self.variations = variations + self.genuine = true + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/RecipeResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/RecipeResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/RecipeResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/RecipeResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/RugsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/RugsResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/RugsResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/RugsResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/SongResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/SongResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/SongResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/SongResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/WallMountedResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/WallMountedResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/WallMountedResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/WallMountedResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/WallpaperResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/WallpaperResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/WallpaperResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Furniture/WallpaperResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/ArtResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/ArtResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/ArtResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/ArtResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/BugResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/BugResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/BugResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/BugResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FishResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/FishResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FishResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/FishResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FossilsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/FossilsResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FossilsResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/FossilsResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/SeaCreaturesResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/SeaCreaturesResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/SeaCreaturesResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/Museum/SeaCreaturesResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/ReactionsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/ReactionsResponseDTO.swift new file mode 100644 index 00000000..17518c81 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/ReactionsResponseDTO.swift @@ -0,0 +1,67 @@ +// +// ReactionsResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/11/23. +// + +import Foundation + +struct ReactionsResponseDTO: Codable { + let num: Int + let name: String + let image: String + let source: [String] + let sourceNotes: [String]? + let seasonEvent: String? + let seasonEventExclusive: Bool? + let versionAdded: String + let iconFilename: String + let internalId: Int + let uniqueEntryId: String + let translations: Translations +} + +extension Item { + init( + name: String, + category: Category, + sell: Int, + translations: Translations, + colors: [Color], + image: String, + sources: [String], + sourceNotes: [String]?, + seasonEvent: String?, + internalId: Int + ) { + self.name = name + self.category = category + self.sell = sell + self.translations = translations + self.colors = colors + self.image = image + self.sources = sources + self.sourceNotes = sourceNotes + self.seasonEvent = seasonEvent + self.internalId = internalId + self.genuine = true + } +} + +extension ReactionsResponseDTO { + func toDomain() -> Item { + return Item( + name: name, + category: .reactions, + sell: -1, + translations: translations, + colors: [], + image: image, + sources: source, + sourceNotes: sourceNotes, + seasonEvent: seasonEvent, + internalId: internalId + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Coordinator/CatalogCoordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Coordinator/CatalogCoordinator.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Coordinator/CatalogCoordinator.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Coordinator/CatalogCoordinator.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/CatalogViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewControllers/CatalogViewController.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/CatalogViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewControllers/CatalogViewController.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemDetailViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewControllers/ItemDetailViewController.swift similarity index 82% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemDetailViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewControllers/ItemDetailViewController.swift index ced912b2..a2c2cb0f 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemDetailViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewControllers/ItemDetailViewController.swift @@ -151,7 +151,8 @@ class ItemDetailViewController: UIViewController { let bodyTitle = "\("Variants".localized) (\(canBodyCustomize ? "Reformable".localized : "Not reformed".localized))" let patternTitle = "\("Pattern".localized) (\(canPatternCustomize ? "Reformable".localized : "Not reformed".localized))" - if isNoPattern { + switch item.category { + case .photos, .tops, .bottoms, .dressUp, .headwear, .accessories, .socks, .shoes, .bags, .umbrellas, .wetSuit: itemVariantsColorView.flatMap { view in let variantsView = SectionView( title: bodyTitle, @@ -160,31 +161,42 @@ class ItemDetailViewController: UIViewController { ) sectionsScrollView.addSection(variantsView) } - } else if isNoColor { - itemVariantsPatternView.flatMap { view in - let variantsView = SectionView( - title: patternTitle, - iconName: "camera.macro", - contentView: view - ) - sectionsScrollView.addSection(variantsView) - } - } else { - itemVariantsColorView.flatMap { view in - let variantsView = SectionView( - title: bodyTitle, - iconName: "paintbrush.fill", - contentView: view - ) - sectionsScrollView.addSection(variantsView) - } - itemVariantsPatternView.flatMap { view in - let variantsView = SectionView( - title: patternTitle, - iconName: "camera.macro", - contentView: view - ) - sectionsScrollView.addSection(variantsView) + default: + if isNoPattern { + itemVariantsColorView.flatMap { view in + let variantsView = SectionView( + title: bodyTitle, + iconName: "paintbrush.fill", + contentView: view + ) + sectionsScrollView.addSection(variantsView) + } + } else if isNoColor { + itemVariantsPatternView.flatMap { view in + let variantsView = SectionView( + title: patternTitle, + iconName: "camera.macro", + contentView: view + ) + sectionsScrollView.addSection(variantsView) + } + } else { + itemVariantsColorView.flatMap { view in + let variantsView = SectionView( + title: bodyTitle, + iconName: "paintbrush.fill", + contentView: view + ) + sectionsScrollView.addSection(variantsView) + } + itemVariantsPatternView.flatMap { view in + let variantsView = SectionView( + title: patternTitle, + iconName: "camera.macro", + contentView: view + ) + sectionsScrollView.addSection(variantsView) + } } } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemsViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewControllers/ItemsViewController.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemsViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewControllers/ItemsViewController.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogCellReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewModels/CatalogCellReactor.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogCellReactor.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewModels/CatalogCellReactor.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewModels/CatalogReactor.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogReactor.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewModels/CatalogReactor.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemDetailReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewModels/ItemDetailReactor.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemDetailReactor.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewModels/ItemDetailReactor.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemsReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewModels/ItemsReactor.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemsReactor.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/ViewModels/ItemsReactor.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CalendarView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CalendarView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CalendarView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CalendarView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CatalogCell.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CatalogCell.swift similarity index 90% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CatalogCell.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CatalogCell.swift index 6536b70b..14adc33e 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CatalogCell.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CatalogCell.swift @@ -18,11 +18,12 @@ class CatalogCell: UICollectionViewCell { private lazy var checkButton: UIButton = { let button = UIButton() - let config = UIImage.SymbolConfiguration(font: .preferredFont(forTextStyle: .title3)) + let font = UIFont.preferredFont(forTextStyle: .title2) + let config = UIImage.SymbolConfiguration(font: font) button.setImage(UIImage(systemName: "checkmark.seal", withConfiguration: config), for: .normal) button.tintColor = .acNavigationBarTint button.backgroundColor = .acSecondaryBackground - button.layer.cornerRadius = 12 + button.layer.cornerRadius = font.pointSize / 2 return button }() @@ -77,7 +78,7 @@ class CatalogCell: UICollectionViewCell { .observe(on: MainScheduler.instance) .withUnretained(self) .subscribe(onNext: { owner, isAcquired in - let config = UIImage.SymbolConfiguration(font: .preferredFont(forTextStyle: .title3)) + let config = UIImage.SymbolConfiguration(font: .preferredFont(forTextStyle: .title2)) owner.checkButton.setImage( UIImage( systemName: isAcquired ? "checkmark.seal.fill" : "checkmark.seal", @@ -103,7 +104,9 @@ extension CatalogCell { priceView = ItemBellsView(mode: .sell, price: item.sell) case .art: priceView = ItemBellsView(mode: .buy, price: item.sell) - case .housewares, .miscellaneous, .wallMounted, .wallpaper, .floors, .rugs, .other, .ceilingDecor, .recipes, .songs: + case .housewares, .miscellaneous, .wallMounted, .wallpaper, .fencing, + .floors, .rugs, .other, .ceilingDecor, .recipes, .songs, + .photos, .tops, .bottoms, .dressUp, .headwear, .accessories, .socks, .shoes, .bags, .umbrellas, .wetSuit: if item.canExchangeNookMiles, let price = item.exchangePrice { priceView = ItemBellsView(mode: .miles, price: price) } else if item.canExchangeNookPoints, let price = item.exchangePrice { @@ -113,6 +116,7 @@ extension CatalogCell { } else { priceView = ItemBellsView(mode: .sell, price: item.sell) } + default: return } backgroundStackView.addArrangedSubviews(priceView) } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CatalogCell.xib b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CatalogCell.xib similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CatalogCell.xib rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CatalogCell.xib diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CategoryRow.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CategoryRow.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CategoryRow.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CategoryRow.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CategoryRow.xib b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CategoryRow.xib similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CategoryRow.xib rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/CategoryRow.xib diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemBellsView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemBellsView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemBellsView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemBellsView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemDetailInfoView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemDetailInfoView.swift similarity index 96% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemDetailInfoView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemDetailInfoView.swift index 5c2ea2f4..947417f2 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemDetailInfoView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemDetailInfoView.swift @@ -126,7 +126,10 @@ class ItemDetailInfoView: UIView { let sell = ItemBellsView(mode: .sell, price: item.sell) let cjSell = ItemBellsView(mode: .cj, price: Int(Double(item.sell) * 1.5)) infoStackView.addArrangedSubviews(sell, cjSell) - case .housewares, .miscellaneous, .wallMounted, .wallpaper, .floors, .rugs, .ceilingDecor: + case .housewares, .miscellaneous, .wallMounted, .wallpaper, .floors, .rugs, .ceilingDecor, + .other, .recipes, .songs, .fencing, + .photos, .tops, .bottoms, .dressUp, .headwear, .accessories, + .socks, .shoes, .bags, .umbrellas, .wetSuit: if item.canExchangePoki, let price = item.exchangePrice { let priceLabel = ItemBellsView(mode: .poki, price: price) infoStackView.addArrangedSubviews(priceLabel) @@ -137,6 +140,7 @@ class ItemDetailInfoView: UIView { let price = ItemBellsView(mode: .point, price: price) infoStackView.addArrangedSubviews(price) } + case .reactions: return default: break } if let buy = item.buy, buy > 0, item.isCritters == false { diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemKeywordView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemKeywordView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemKeywordView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemKeywordView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/ItemMaterialsView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemMaterialsView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/ItemMaterialsView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemMaterialsView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemOtherInfoView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemOtherInfoView.swift similarity index 95% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemOtherInfoView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemOtherInfoView.swift index 6862eab2..9b9a8057 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemOtherInfoView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemOtherInfoView.swift @@ -85,7 +85,10 @@ class ItemOtherInfoView: UIView { whereHowLabel.text = "Underwater".localized case .fossils, .art: whereHowLabel.text = item.source?.localized - case .housewares, .miscellaneous, .wallMounted, .ceilingDecor, .wallpaper, .floors, .rugs, .other, .recipes, .songs: + case .housewares, .miscellaneous, .wallMounted, .ceilingDecor, + .wallpaper, .floors, .rugs, .other, .recipes, .songs, .fencing, + .photos, .tops, .bottoms, .dressUp, .headwear, .accessories, + .socks, .shoes, .bags, .umbrellas, .wetSuit, .reactions: whereHowLabel.text = item.sources?.reduce(with: "\n", characters: ["\n"]) } let placeInfo = InfoContentView(title: "Where how".localized, contentView: whereHowLabel) diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemSeasonView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemSeasonView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemSeasonView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemSeasonView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemVariantsView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemVariantsView.swift similarity index 93% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemVariantsView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemVariantsView.swift index abed1fe2..6dedca57 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemVariantsView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/ItemVariantsView.swift @@ -59,7 +59,8 @@ class ItemVariantsView: UIView { Observable.just(variations) .bind(to: collectionView.rx.items(cellIdentifier: VariantCell.className, cellType: VariantCell.self) ) { [weak self] _, item, cell in - let name = self?.mode == .color ? item.variantTranslations?.localizedName() : item.patternTranslations?.localizedName() + let name = (self?.mode == .color ? item.variantTranslations?.localizedName() : item.patternTranslations?.localizedName()) + ?? item.variation?.localized cell.setUp(imageURL: item.image, name: name) }.disposed(by: disposeBag) diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/KeywordCell.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/KeywordCell.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/KeywordCell.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/KeywordCell.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/KeywordCell.xib b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/KeywordCell.xib similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/KeywordCell.xib rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/KeywordCell.xib diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/PlayerView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/PlayerView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/PlayerView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/PlayerView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/VariantCell.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/VariantCell.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/VariantCell.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/VariantCell.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/VariantCell.xib b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/VariantCell.xib similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/VariantCell.xib rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Catalog/Views/VariantCell.xib diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Coordinator/CollectionCoordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/Coordinator/CollectionCoordinator.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Coordinator/CollectionCoordinator.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/Coordinator/CollectionCoordinator.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionProgressViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/ViewControllers/CollectionProgressViewController.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionProgressViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/ViewControllers/CollectionProgressViewController.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/ViewControllers/CollectionViewController.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/ViewControllers/CollectionViewController.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionProgressReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/ViewModels/CollectionProgressReactor.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionProgressReactor.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/ViewModels/CollectionProgressReactor.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/ViewModels/CollectionReactor.swift similarity index 96% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionReactor.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/ViewModels/CollectionReactor.swift index 28432061..da55093c 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionReactor.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/ViewModels/CollectionReactor.swift @@ -55,7 +55,7 @@ final class CollectionReactor: Reactor { var newState = state switch mutation { case .setCategories(let categories): - newState.catagories = categories + newState.catagories = categories.sorted(by: <) case .transition(let route): coordinator.transition(for: route) diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Views/ItemProgressRow.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/Views/ItemProgressRow.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Views/ItemProgressRow.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/Views/ItemProgressRow.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Views/ItemProgressRow.xib b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/Views/ItemProgressRow.xib similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Views/ItemProgressRow.xib rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Collection/Views/ItemProgressRow.xib diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/DashboardViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/DashboardViewController.swift index 6ad0cff8..fb51292e 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/DashboardViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/DashboardViewController.swift @@ -33,9 +33,13 @@ class DashboardViewController: UIViewController { setUpViews() } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + updateDate() + } + private func setUpViews() { view.backgroundColor = .acBackground - navigationItem.title = dateString navigationItem.rightBarButtonItem = moreButton view.addSubviews(sectionsScrollView) @@ -48,6 +52,10 @@ class DashboardViewController: UIViewController { ]) } + private func updateDate() { + navigationItem.title = dateString + } + func setUpViewModels( userInfoVM: UserInfoReactor, tasksVM: TodaysTasksSectionReactor, diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/ViewControllers/PlayerViewController.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/ViewControllers/PlayerViewController.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/ViewModels/PlayerReactor.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerReactor.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/ViewModels/PlayerReactor.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/MaximizePlayerView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/Views/MaximizePlayerView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/MaximizePlayerView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/Views/MaximizePlayerView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/MinimizePlayerView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/Views/MinimizePlayerView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/MinimizePlayerView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/Views/MinimizePlayerView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/SongRow.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/Views/SongRow.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/SongRow.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/Views/SongRow.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/SongRow.xib b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/Views/SongRow.xib similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/SongRow.xib rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/Views/SongRow.xib diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/AboutItem.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/AboutItem.swift index 4708d67a..0d76fd20 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/AboutItem.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/AboutItem.swift @@ -33,7 +33,7 @@ struct AboutItem { AboutItem( icon: "star.fill", title: "Rate the app on the App Store", - url: nil + url: URL(string: "itms-apps://itunes.apple.com/app/itunes-u/id\(1636229399)?ls=1&mt=8&action=write-review") ), AboutItem( icon: "lock", @@ -70,7 +70,7 @@ struct AboutItem { AboutItem( icon: "tag", title: "App version", - description: "1.0.0" + description: "1.2.0" ), AboutItem( icon: "gamecontroller", diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/Items.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/Items.swift index 35189b62..44898d56 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/Items.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/Items.swift @@ -38,6 +38,7 @@ final class Items { fetchVillagers() fetchCritters() fetchFurniture() + fetchClothes() networkGroup.notify(queue: .main) { self.isLoad.accept(false) @@ -325,7 +326,6 @@ final class Items { switch result { case .success(let response): let items = response.map { $0.toDomain() } - .sorted(by: { $0.translations.localizedName() < $1.translations.localizedName() }) itemList[.songs] = items case .failure(let error): os_log( @@ -336,6 +336,212 @@ final class Items { } group.leave() } + group.enter() + network.request(PhotosReqeust()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.photos] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 주민 사진을 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(FencingReqeust()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.fencing] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 울타리을 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.notify(queue: .main) { + self.updateAllItemList(by: itemList) + self.networkGroup.leave() + } + } + + private func fetchClothes() { + self.networkGroup.enter() + let group = DispatchGroup() + var itemList: [Category: [Item]] = [:] + + group.enter() + network.request(TopsRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.tops] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 상의를 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(BottomsRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.bottoms] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 하의를 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(DressUpRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.dressUp] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 원피스를 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(HeadwearRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.headwear] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 모자를 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(AccessoriesRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.accessories] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 악세사리를 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(SocksRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.socks] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 양말을 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(ShoesRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.shoes] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 신발을 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(BagsRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.bags] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 가방을 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(UmbrellasRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.umbrellas] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 우산을 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(WetSuitRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.wetSuit] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 잠수복을 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } + group.enter() + network.request(ReactionsRequest()) { result in + switch result { + case .success(let response): + let items = response.map { $0.toDomain() } + itemList[.reactions] = items + case .failure(let error): + os_log( + .error, + log: .default, + "⛔️ 리액션을 가져오는데 실패했습니다.\n에러내용: \(error.localizedDescription)" + ) + } + group.leave() + } group.notify(queue: .main) { self.updateAllItemList(by: itemList) self.networkGroup.leave() diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/en.lproj/Localizable.strings b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/en.lproj/Localizable.strings index 1035b5ad..ffb62a4f 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/en.lproj/Localizable.strings +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/en.lproj/Localizable.strings @@ -137,6 +137,19 @@ Find the villagers you have visited and tap the home icon on the villager's page "Ceiling Decor" = "Ceiling Decor"; "Recipes" = "Recipes"; "Songs" = "Songs"; +"Photos" = "Photos"; +"Tops" = "Tops"; +"Bottoms" = "Bottoms"; +"Dress-Up" = "Dress-Up"; +"Headwear" = "Headwear"; +"Accessories" = "Accessories"; +"Socks" = "Socks"; +"Shoes" = "Shoes"; +"Bags" = "Bags"; +"Umbrellas" = "Umbrellas"; +"Wet Suit" = "Wet Suit"; +"Reactions" = "Reactions"; +"Fencing" = "Fencing"; // MARK: - ItemsViewController "To catch now" = "To catch now"; @@ -366,6 +379,9 @@ Find the villagers you have visited and tap the home icon on the villager's page "Red" = "Red"; "White" = "White"; "Yellow" = "Yellow"; +"Natural wood" = "Natural wood"; +"Dark wood" = "Dark wood"; + // MARK: - CollectionViewController "There are no collectibles." = "There are no collectibles."; @@ -486,6 +502,17 @@ Find the villagers you have visited and tap the home icon on the villager's page "Basic Cooking Recipes" = "Basic Cooking Recipes"; "Niko" = "Niko"; "K.K. concert" = "K.K. concert"; +"Lottie" = "Lottie"; +"High Friendship" = "High Friendship"; +"Check Toy Day stockings the day after Toy Day" = "Check Toy Day stockings the day after Toy Day"; +"HHP Apparel Shop" = "HHP Apparel Shop"; +"Able Sisters" = "Able Sisters"; +"Kicks\' Co-op" = "Kicks\' Co-op"; +"Kicks" = "Kicks"; +"New Reactions Notebook" = "New Reactions Notebook"; +"DJ KK concert" = "DJ KK concert"; +"Viva Festivale Reaction Set" = "Viva Festivale Reaction Set"; +"Hip Reaction Collection" = "Hip Reaction Collection"; // MARK: - source note "Source Note" = "Source Note"; @@ -572,6 +599,31 @@ Find the villagers you have visited and tap the home icon on the villager's page "Small shadow" = "Small shadow"; "Since 1.6.0, Leif sells pumpkin starts year-round." = "Since 1.6.0, Leif sells pumpkin starts year-round."; "Hidden song" = "Hidden song"; +"Received in mail from DAL after 5 flights" = "Received in mail from DAL after 5 flights"; +"Received in June in the Northern Hemisphere and received in December in the Southern Hemisphere" = "Received in June in the Northern Hemisphere and received in December in the Southern Hemisphere"; +"Available from Able Sisters shop only" = "Available from Able Sisters shop only"; +"Added to Able Sisters stock rotation the day after receiving this item from Label" = "Added to Able Sisters stock rotation the day after receiving this item from Label"; +"Available during DJ KK festival" = "Available during DJ KK festival"; +"Received in December in the Northern Hemisphere and received in June in the Southern Hemisphere" = "Received in December in the Northern Hemisphere and received in June in the Southern Hemisphere"; +"Only available as a work clothes for Paradise Planning" = "Only available as a work clothes for Paradise Planning"; +"Received in mail from DAL after 250 flights" = "Received in mail from DAL after 250 flights"; +"Available from either Mabel\'s temporary shop or Able Sisters shop" = "Available from either Mabel\'s temporary shop or Able Sisters shop"; +"Received in mail from DAL after 100 flights" = "Received in mail from DAL after 100 flights"; +"Sent in the mail after doing group stretches on 3 different days" = "Sent in the mail after doing group stretches on 3 different days"; +"Give Jack candy or a lollipop" = "Give Jack candy or a lollipop"; +"Received in mail from DAL after 130 flights" = "Received in mail from DAL after 130 flights"; +"Received in mail from DAL after 75 flights" = "Received in mail from DAL after 75 flights"; +"Received in mail from DAL after 15 flights" = "Received in mail from DAL after 15 flights"; +"Mailed to players after the 1.3.0 update in a letter from Nintendo" = "Mailed to players after the 1.3.0 update in a letter from Nintendo"; +"Available at Able Sisters only during Fireworks Shows" = "Available at Able Sisters only during Fireworks Shows"; +"Received in mail from DAL after 30 flights" = "Received in mail from DAL after 30 flights"; +"Received in mail from DAL after 200 flights" = "Received in mail from DAL after 200 flights"; +"Received in May in the Northern Hemisphere and received in November in the Southern Hemisphere" = "Received in May in the Northern Hemisphere and received in November in the Southern Hemisphere"; +"Received in mail from DAL after 160 flights" = "Received in mail from DAL after 160 flights"; +"Available in Nook\'s Cranny (upgraded only)" = "Available in Nook\'s Cranny (upgraded only)"; +"Requires a high level of friendship" = "Requires a high level of friendship"; +"Received after doing your 50th group stretch" = "Received after doing your 50th group stretch"; +"50 fences are given by Tom Nook after completing the three house plots during the main storyline" = "50 fences are given by Tom Nook after completing the three house plots during the main storyline"; // MARK: - Housewares - tag "Museum" = "Museum"; diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/ko.lproj/Localizable.strings b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/ko.lproj/Localizable.strings index 1d48bb20..cda4cd19 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/ko.lproj/Localizable.strings +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/ko.lproj/Localizable.strings @@ -139,6 +139,19 @@ "Ceiling Decor" = "천장"; "Recipes" = "레시피"; "Songs" = "음악"; +"Photos" = "사진"; +"Tops" = "상의"; +"Bottoms" = "하의"; +"Dress-Up" = "원피스"; +"Headwear" = "모자"; +"Accessories" = "악세사리"; +"Socks" = "양말"; +"Shoes" = "신발"; +"Bags" = "가방"; +"Umbrellas" = "우산"; +"Wet Suit" = "잠수복"; +"Reactions" = "리액션"; +"Fencing" = "울타리"; // MARK: - ItemsViewController "To catch now" = "아직 늦지 않았어요!"; @@ -368,6 +381,8 @@ "Red" = "레드"; "White" = "화이트"; "Yellow" = "옐로우"; +"Natural wood" = "내추럴우드"; +"Dark wood" = "다크우드"; // MARK: - CollectionViewController "There are no collectibles." = "수집함이 비어있습니다."; @@ -487,6 +502,17 @@ "All villagers (while stung)" = "모든 주민"; "Niko" = "방글"; "K.K. concert" = "K.K. 콘서트"; +"Lottie" = "솜이"; +"High Friendship" = "높은 친밀도인 상태에서 선물 주거나 부탁을 들어주기"; +"Check Toy Day stockings the day after Toy Day" = "크리스마스 이브 날 이후"; +"HHP Apparel Shop" = "해피홈 파라다이스 옷가게"; +"Able Sisters" = "에이블 시스터즈"; +"Kicks\' Co-op" = "패트릭 노점"; +"Kicks" = "패트릭"; +"New Reactions Notebook" = "리액션 아이디어 노트"; +"DJ KK concert" = "DJ KK 콘서트"; +"Viva Festivale Reaction Set" = "비바! 카니발 리액션"; +"Hip Reaction Collection" = "최신 유행! 리액션 도감"; // MARK: - Source note "Source Note" = "메모"; @@ -573,6 +599,31 @@ "Small shadow" = "작은 그림자"; "Since 1.6.0, Leif sells pumpkin starts year-round." = "1.6.0 업데이트 후\n늘봉에게서 구매."; "Hidden song" = "숨겨진 음악\n섬에 방문한 K.K.에게\n직접 신청해야 획득 가능"; +"Received in mail from DAL after 5 flights" = "5회 비행 후 DAL에서 우편으로 획득"; +"Received in June in the Northern Hemisphere and received in December in the Southern Hemisphere" = "북반구 6월, 남반구 12월"; +"Available from Able Sisters shop only" = "에이블 시스터즈 샵에서만 구매 가능"; +"Added to Able Sisters stock rotation the day after receiving this item from Label" = "고숙이한태 이 아이템을 받은 다음 날, 에이블 시스터즈 재고 회전에 추가됨"; +"Available during DJ KK festival" = "DJ K.K. 축제 기간 동안 구매 가능"; +"Received in December in the Northern Hemisphere and received in June in the Southern Hemisphere" = "북반구 12월, 남반구 6월"; +"Only available as a work clothes for Paradise Planning" = "파라다이스 기획 작업복으로만 가능"; +"Received in mail from DAL after 250 flights" = "250회 비행 후 DAL에서 우편으로 획득"; +"Available from either Mabel\'s temporary shop or Able Sisters shop" = "에이블의 임시 상점 또는 에이블 시스터즈 상점에서 구매 가능"; +"Received in mail from DAL after 100 flights" = "100회 비행 후 DAL에서 우편으로 획득"; +"Sent in the mail after doing group stretches on 3 different days" = "3일 연속 단체 스트레칭 후 우편으로 발송"; +"Give Jack candy or a lollipop" = "펌킹에게 사탕이나 막대사탕을 주기"; +"Received in mail from DAL after 130 flights" = "130회 비행 후 DAL에서 우편으로 획득"; +"Received in mail from DAL after 75 flights" = "75회 비행 후 DAL에서 우편으로 획득"; +"Received in mail from DAL after 15 flights" = "15회 비행 후 DAL에서 우편으로 획득"; +"Mailed to players after the 1.3.0 update in a letter from Nintendo" = "1.3.0 업데이트 후\n닌텐도에게서 우편으로 획득"; +"Available at Able Sisters only during Fireworks Shows" = "축제 시즌 때\n에이블시스터즈에서 구입 가능"; +"Received in mail from DAL after 30 flights" = "30회 비행 후 DAL에서 우편으로 획득"; +"Received in mail from DAL after 200 flights" = "200회 비행 후 DAL에서 우편으로 획득"; +"Received in May in the Northern Hemisphere and received in November in the Southern Hemisphere" = "북반구 5월, 남반구 11월"; +"Received in mail from DAL after 160 flights" = "160회 비행 후 DAL에서 우편으로 획득"; +"Available in Nook\'s Cranny (upgraded only)" = "너굴상점에서만 구입 가능 \n(업그레이드 한 너굴상점)"; +"Requires a high level of friendship" = "높은 수준의 우정이 필요"; +"Received after doing your 50th group stretch" = "50번째 그룹 스트레칭 후 획득"; +"50 fences are given by Tom Nook after completing the three house plots during the main storyline" = "스토리 진행 중에 세 개의 집터를 완성한 후 너굴에게서 50개의 울타리를 획득"; // MARK: - Housewares - tag "Museum" = "박물관";