diff --git a/Animal-Crossing-Wiki/.swiftlint.yml b/Animal-Crossing-Wiki/.swiftlint.yml index 82d1f8f8..7adfa434 100644 --- a/Animal-Crossing-Wiki/.swiftlint.yml +++ b/Animal-Crossing-Wiki/.swiftlint.yml @@ -1,8 +1,8 @@ included: - Animal-Crossing-Wiki # 프로젝트 이름 excluded: # 린트 과정에서 무시할 파일 경로. `included`보다 우선순위 높음 - - Animal-Crossing-Wiki/AppDelegate.swift - - Animal-Crossing-Wiki/SceneDelegate.swift + - Animal-Crossing-Wiki/Resources/AppDelegate.swift + - Animal-Crossing-Wiki/Resources/SceneDelegate.swift type_body_length: # 타입 길이 warning: 200 error: 250 diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki.xcodeproj/project.pbxproj b/Animal-Crossing-Wiki/Animal-Crossing-Wiki.xcodeproj/project.pbxproj index 5458e239..00bfce50 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki.xcodeproj/project.pbxproj +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 9A1DB1D2284069DD00689F11 /* UIImageView+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1DB1D1284069DD00689F11 /* UIImageView+extension.swift */; }; 9A1DB1D7284081E400689F11 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 9A1DB1D6284081E400689F11 /* Alamofire */; }; 9A1DB1D92840857300689F11 /* APIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1DB1D82840857300689F11 /* APIError.swift */; }; + 9A2B0FD92897C84F00285C77 /* UserInfoReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A2B0FD82897C84F00285C77 /* UserInfoReactor.swift */; }; 9A3CFB2928805C4400B0FFCB /* MiscellaneousResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3CFB2828805C4400B0FFCB /* MiscellaneousResponseDTO.swift */; }; 9A3CFB2B28805F4000B0FFCB /* MiscellaneousRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3CFB2A28805F4000B0FFCB /* MiscellaneousRequest.swift */; }; 9A3CFB2D2880637100B0FFCB /* WallMountedResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3CFB2C2880637100B0FFCB /* WallMountedResponseDTO.swift */; }; @@ -31,6 +32,8 @@ 9A3DE3CE2887B6F5006EECF7 /* RecipeResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3DE3CD2887B6F5006EECF7 /* RecipeResponseDTO.swift */; }; 9A3DE3D02887B7E6006EECF7 /* RecipesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3DE3CF2887B7E6006EECF7 /* RecipesRequest.swift */; }; 9A3DE3D42887DD71006EECF7 /* ItemMaterialsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3DE3D32887DD71006EECF7 /* ItemMaterialsView.swift */; }; + 9A455C3B28957569009A14A9 /* Reactor+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A455C3A28957569009A14A9 /* Reactor+extension.swift */; }; + 9A455C3D28975F73009A14A9 /* EmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A455C3C28975F73009A14A9 /* EmptyView.swift */; }; 9A4B4C33285033B300CC687C /* Fruit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A4B4C32285033B300CC687C /* Fruit.swift */; }; 9A4B4C35285034BA00CC687C /* Villager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A4B4C34285034BA00CC687C /* Villager.swift */; }; 9A4B4C3728503A0400CC687C /* DailyTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A4B4C3628503A0400CC687C /* DailyTask.swift */; }; @@ -46,8 +49,7 @@ 9A62CFE1287D7C56005D737D /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9A62CFE3287D7C56005D737D /* Localizable.strings */; }; 9A62CFE7287DB9F9005D737D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9A62CFE9287DB9F9005D737D /* InfoPlist.strings */; }; 9A62D74128783A4D0047750F /* UITableView+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A62D74028783A4D0047750F /* UITableView+extension.swift */; }; - 9A680EB32888219900F0E0C7 /* MusicRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A680EB22888219900F0E0C7 /* MusicRequest.swift */; }; - 9A680EB52888222200F0E0C7 /* MusicResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A680EB42888222200F0E0C7 /* MusicResponseDTO.swift */; }; + 9A688E1F288FAFB300FFFB69 /* ReactorKit in Frameworks */ = {isa = PBXBuildFile; productRef = 9A688E1E288FAFB300FFFB69 /* ReactorKit */; }; 9A68919928335ADD0061AAF1 /* DefaultAPIProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A68919828335ADD0061AAF1 /* DefaultAPIProvider.swift */; }; 9A68919B28335AE90061AAF1 /* APIProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A68919A28335AE90061AAF1 /* APIProvider.swift */; }; 9A68919D28335AFF0061AAF1 /* APIRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A68919C28335AFF0061AAF1 /* APIRequest.swift */; }; @@ -66,17 +68,17 @@ 9A6891BF283379B80061AAF1 /* SeaCreaturesResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6891BE283379B80061AAF1 /* SeaCreaturesResponseDTO.swift */; }; 9A6891C1283380CD0061AAF1 /* ArtRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6891C0283380CD0061AAF1 /* ArtRequest.swift */; }; 9A6891C3283380D50061AAF1 /* ArtResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6891C2283380D50061AAF1 /* ArtResponseDTO.swift */; }; - 9A6A2ED7287BE71A007D2EEA /* CollectionProgressSectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6A2ED6287BE71A007D2EEA /* CollectionProgressSectionViewModel.swift */; }; - 9A6A2ED9287BEB76007D2EEA /* DashboardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6A2ED8287BEB76007D2EEA /* DashboardViewModel.swift */; }; + 9A6A2ED7287BE71A007D2EEA /* CollectionProgressSectionReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6A2ED6287BE71A007D2EEA /* CollectionProgressSectionReactor.swift */; }; + 9A6A2ED9287BEB76007D2EEA /* DashboardReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6A2ED8287BEB76007D2EEA /* DashboardReactor.swift */; }; 9A6CB3F1286EB57A00B368D4 /* UIMenu+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6CB3F0286EB57A00B368D4 /* UIMenu+extension.swift */; }; 9A6CB3F328728B3100B368D4 /* String+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6CB3F228728B3100B368D4 /* String+extension.swift */; }; - 9A6DC205287C6199004EEC41 /* AboutViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DC204287C6199004EEC41 /* AboutViewModel.swift */; }; + 9A6DC205287C6199004EEC41 /* AboutReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DC204287C6199004EEC41 /* AboutReactor.swift */; }; 9A6DC209287C7B42004EEC41 /* AppSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DC208287C7B42004EEC41 /* AppSettingView.swift */; }; - 9A6DC20B287D0AC5004EEC41 /* AppSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DC20A287D0AC5004EEC41 /* AppSettingsViewModel.swift */; }; + 9A6DC20B287D0AC5004EEC41 /* AppSettingReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DC20A287D0AC5004EEC41 /* AppSettingReactor.swift */; }; 9A6DE3532888E2E300EB2F3F /* PlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DE3522888E2E300EB2F3F /* PlayerViewController.swift */; }; 9A6DE3592889271200EB2F3F /* MinimizePlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DE3582889271200EB2F3F /* MinimizePlayerView.swift */; }; 9A6DE35B2889327A00EB2F3F /* MaximizePlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DE35A2889327A00EB2F3F /* MaximizePlayerView.swift */; }; - 9A6DE35D2889AF1000EB2F3F /* PlayerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DE35C2889AF1000EB2F3F /* PlayerViewModel.swift */; }; + 9A6DE35D2889AF1000EB2F3F /* PlayerReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DE35C2889AF1000EB2F3F /* PlayerReactor.swift */; }; 9A6DE3612889B18800EB2F3F /* MusicPlayerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DE3602889B18800EB2F3F /* MusicPlayerManager.swift */; }; 9A6DE363288A9BFB00EB2F3F /* PlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DE362288A9BFB00EB2F3F /* PlayerView.swift */; }; 9A6DE366288ADAC300EB2F3F /* SongRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A6DE364288ADAC300EB2F3F /* SongRow.swift */; }; @@ -85,9 +87,9 @@ 9A7ACED9287EC16E001D47CB /* VillagersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACED7287EC16E001D47CB /* VillagersViewController.swift */; }; 9A7ACEDA287EC16E001D47CB /* VillagerDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACED8287EC16E001D47CB /* VillagerDetailViewController.swift */; }; 9A7ACEDC287EC180001D47CB /* VillagersCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEDB287EC180001D47CB /* VillagersCoordinator.swift */; }; - 9A7ACEE0287EC188001D47CB /* VillagersCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEDD287EC188001D47CB /* VillagersCellViewModel.swift */; }; - 9A7ACEE1287EC188001D47CB /* VillagersViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEDE287EC188001D47CB /* VillagersViewModel.swift */; }; - 9A7ACEE2287EC188001D47CB /* VillagerDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEDF287EC188001D47CB /* VillagerDetailViewModel.swift */; }; + 9A7ACEE0287EC188001D47CB /* VillagersCellReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEDD287EC188001D47CB /* VillagersCellReactor.swift */; }; + 9A7ACEE1287EC188001D47CB /* VillagersReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEDE287EC188001D47CB /* VillagersReactor.swift */; }; + 9A7ACEE2287EC188001D47CB /* VillagerDetailReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEDF287EC188001D47CB /* VillagerDetailReactor.swift */; }; 9A7ACEE7287EC194001D47CB /* VillagerDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEE3287EC194001D47CB /* VillagerDetailView.swift */; }; 9A7ACEE8287EC194001D47CB /* VillagersCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEE4287EC194001D47CB /* VillagersCell.swift */; }; 9A7ACEE9287EC194001D47CB /* VillagerHouseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEE5287EC194001D47CB /* VillagerHouseView.swift */; }; @@ -95,10 +97,10 @@ 9A7ACEEE287EC20B001D47CB /* ItemDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEEB287EC20B001D47CB /* ItemDetailViewController.swift */; }; 9A7ACEEF287EC20B001D47CB /* CatalogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEEC287EC20B001D47CB /* CatalogViewController.swift */; }; 9A7ACEF0287EC20B001D47CB /* ItemsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEED287EC20B001D47CB /* ItemsViewController.swift */; }; - 9A7ACEF5287EC239001D47CB /* CatalogViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEF1287EC239001D47CB /* CatalogViewModel.swift */; }; - 9A7ACEF6287EC239001D47CB /* ItemDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEF2287EC239001D47CB /* ItemDetailViewModel.swift */; }; - 9A7ACEF7287EC239001D47CB /* CatalogCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEF3287EC239001D47CB /* CatalogCellViewModel.swift */; }; - 9A7ACEF8287EC239001D47CB /* ItemsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEF4287EC239001D47CB /* ItemsViewModel.swift */; }; + 9A7ACEF5287EC239001D47CB /* CatalogReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEF1287EC239001D47CB /* CatalogReactor.swift */; }; + 9A7ACEF6287EC239001D47CB /* ItemDetailReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEF2287EC239001D47CB /* ItemDetailReactor.swift */; }; + 9A7ACEF7287EC239001D47CB /* CatalogCellReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEF3287EC239001D47CB /* CatalogCellReactor.swift */; }; + 9A7ACEF8287EC239001D47CB /* ItemsReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEF4287EC239001D47CB /* ItemsReactor.swift */; }; 9A7ACEFA287EC25B001D47CB /* CatalogCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEF9287EC25B001D47CB /* CatalogCoordinator.swift */; }; 9A7ACF04287EC26F001D47CB /* ItemDetailInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACEFB287EC26F001D47CB /* ItemDetailInfoView.swift */; }; 9A7ACF05287EC26F001D47CB /* CatalogCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A7ACEFC287EC26F001D47CB /* CatalogCell.xib */; }; @@ -112,8 +114,8 @@ 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 /* CollectionProgressViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF13287EC2E9001D47CB /* CollectionProgressViewModel.swift */; }; - 9A7ACF16287EC2E9001D47CB /* CollectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF14287EC2E9001D47CB /* CollectionViewModel.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 */; }; 9A7ACF1A287EC2F3001D47CB /* ItemProgressRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF18287EC2F3001D47CB /* ItemProgressRow.swift */; }; 9A7ACF22287EC459001D47CB /* HapticManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF20287EC459001D47CB /* HapticManager.swift */; }; @@ -126,6 +128,8 @@ 9A7ACF30288000D7001D47CB /* KeywordCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF2E288000D7001D47CB /* KeywordCell.swift */; }; 9A7ACF31288000D7001D47CB /* KeywordCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A7ACF2F288000D7001D47CB /* KeywordCell.xib */; }; 9A7ACF3328800318001D47CB /* ItemKeywordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7ACF3228800318001D47CB /* ItemKeywordView.swift */; }; + 9A836EF328AE0CAF00B5A74A /* SongsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A836EF228AE0CAF00B5A74A /* SongsRequest.swift */; }; + 9A836EF528AE0CC200B5A74A /* SongResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A836EF428AE0CC200B5A74A /* SongResponseDTO.swift */; }; 9A99AA062858247700629C4A /* Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA052858247700629C4A /* Coordinator.swift */; }; 9A99AA082858248600629C4A /* AppCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA072858248600629C4A /* AppCoordinator.swift */; }; 9A99AA0A285824DF00629C4A /* AppAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA09285824DF00629C4A /* AppAppearance.swift */; }; @@ -156,21 +160,20 @@ 9A99AA6228603CB800629C4A /* IconCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A99AA6028603CB800629C4A /* IconCell.xib */; }; 9A99AA642860401400629C4A /* UICollectionView+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA632860401400629C4A /* UICollectionView+extension.swift */; }; 9A99AA662860431A00629C4A /* IconChooserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA652860431A00629C4A /* IconChooserViewController.swift */; }; - 9A99AA6A28618C8200629C4A /* UserInfoSectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA6928618C8200629C4A /* UserInfoSectionViewModel.swift */; }; - 9A99AA6D2861945B00629C4A /* PreferencesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA6C2861945B00629C4A /* PreferencesViewModel.swift */; }; + 9A99AA6D2861945B00629C4A /* PreferencesReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA6C2861945B00629C4A /* PreferencesReactor.swift */; }; 9A99AA6F28643CA700629C4A /* UIImage+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA6E28643CA700629C4A /* UIImage+extension.swift */; }; 9A99AA712864433900629C4A /* UserCollectionEntity+Mapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA702864433900629C4A /* UserCollectionEntity+Mapping.swift */; }; - 9A99AA7428656D1600629C4A /* VillagersSectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA7328656D1600629C4A /* VillagersSectionViewModel.swift */; }; - 9A99AA7628657A9900629C4A /* TodaysTasksSectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA7528657A9900629C4A /* TodaysTasksSectionViewModel.swift */; }; - 9A99AA782865B82A00629C4A /* TasksEditViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA772865B82A00629C4A /* TasksEditViewModel.swift */; }; - 9A99AA7A2865CA9300629C4A /* CustomTaskViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA792865CA9300629C4A /* CustomTaskViewModel.swift */; }; + 9A99AA7428656D1600629C4A /* VillagersSectionReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA7328656D1600629C4A /* VillagersSectionReactor.swift */; }; + 9A99AA7628657A9900629C4A /* TodaysTasksSectionReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA7528657A9900629C4A /* TodaysTasksSectionReactor.swift */; }; + 9A99AA782865B82A00629C4A /* TasksEditReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA772865B82A00629C4A /* TasksEditReactor.swift */; }; + 9A99AA7A2865CA9300629C4A /* CustomTaskReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA792865CA9300629C4A /* CustomTaskReactor.swift */; }; 9A99AA7E286AC4F900629C4A /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA7D286AC4F900629C4A /* AboutViewController.swift */; }; 9A99AA81286ACBBC00629C4A /* Differentiator in Frameworks */ = {isa = PBXBuildFile; productRef = 9A99AA80286ACBBC00629C4A /* Differentiator */; }; 9A99AA83286ACBBC00629C4A /* RxDataSources in Frameworks */ = {isa = PBXBuildFile; productRef = 9A99AA82286ACBBC00629C4A /* RxDataSources */; }; 9A99AA85286AE22200629C4A /* AboutItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99AA84286AE22200629C4A /* AboutItem.swift */; }; 9AD343EC28746593008A3D6D /* Int+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD343EB28746593008A3D6D /* Int+extension.swift */; }; 9AD343F128766429008A3D6D /* UILabel+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD343F028766429008A3D6D /* UILabel+extension.swift */; }; - 9AD343F728767649008A3D6D /* ProgressViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD343F628767649008A3D6D /* ProgressViewModel.swift */; }; + 9AD343F728767649008A3D6D /* ProgressReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD343F628767649008A3D6D /* ProgressReactor.swift */; }; 9AF0418828503B9400C51449 /* CoreDataStorage.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 9AF0418528503B9400C51449 /* CoreDataStorage.xcdatamodeld */; }; 9AF0418A28503F7900C51449 /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AF0418928503F7900C51449 /* Item.swift */; }; 9AF0418C2850451100C51449 /* Category.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AF0418B2850451100C51449 /* Category.swift */; }; @@ -208,6 +211,7 @@ /* Begin PBXFileReference section */ 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 = ""; }; 9A3CFB2828805C4400B0FFCB /* MiscellaneousResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MiscellaneousResponseDTO.swift; sourceTree = ""; }; 9A3CFB2A28805F4000B0FFCB /* MiscellaneousRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MiscellaneousRequest.swift; sourceTree = ""; }; 9A3CFB2C2880637100B0FFCB /* WallMountedResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallMountedResponseDTO.swift; sourceTree = ""; }; @@ -228,6 +232,8 @@ 9A3DE3CD2887B6F5006EECF7 /* RecipeResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeResponseDTO.swift; sourceTree = ""; }; 9A3DE3CF2887B7E6006EECF7 /* RecipesRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipesRequest.swift; sourceTree = ""; }; 9A3DE3D32887DD71006EECF7 /* ItemMaterialsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemMaterialsView.swift; sourceTree = ""; }; + 9A455C3A28957569009A14A9 /* Reactor+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Reactor+extension.swift"; sourceTree = ""; }; + 9A455C3C28975F73009A14A9 /* EmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyView.swift; sourceTree = ""; }; 9A4B4C32285033B300CC687C /* Fruit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fruit.swift; sourceTree = ""; }; 9A4B4C34285034BA00CC687C /* Villager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Villager.swift; sourceTree = ""; }; 9A4B4C3628503A0400CC687C /* DailyTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyTask.swift; sourceTree = ""; }; @@ -245,8 +251,6 @@ 9A62CFEA287DB9FB005D737D /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; }; 9A62D73B2877E13C0047750F /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/LaunchScreen.strings; sourceTree = ""; }; 9A62D74028783A4D0047750F /* UITableView+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+extension.swift"; sourceTree = ""; }; - 9A680EB22888219900F0E0C7 /* MusicRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicRequest.swift; sourceTree = ""; }; - 9A680EB42888222200F0E0C7 /* MusicResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicResponseDTO.swift; sourceTree = ""; }; 9A68919828335ADD0061AAF1 /* DefaultAPIProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultAPIProvider.swift; sourceTree = ""; }; 9A68919A28335AE90061AAF1 /* APIProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIProvider.swift; sourceTree = ""; }; 9A68919C28335AFF0061AAF1 /* APIRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIRequest.swift; sourceTree = ""; }; @@ -265,17 +269,17 @@ 9A6891BE283379B80061AAF1 /* SeaCreaturesResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeaCreaturesResponseDTO.swift; sourceTree = ""; }; 9A6891C0283380CD0061AAF1 /* ArtRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArtRequest.swift; sourceTree = ""; }; 9A6891C2283380D50061AAF1 /* ArtResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArtResponseDTO.swift; sourceTree = ""; }; - 9A6A2ED6287BE71A007D2EEA /* CollectionProgressSectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionProgressSectionViewModel.swift; sourceTree = ""; }; - 9A6A2ED8287BEB76007D2EEA /* DashboardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardViewModel.swift; sourceTree = ""; }; + 9A6A2ED6287BE71A007D2EEA /* CollectionProgressSectionReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionProgressSectionReactor.swift; sourceTree = ""; }; + 9A6A2ED8287BEB76007D2EEA /* DashboardReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardReactor.swift; sourceTree = ""; }; 9A6CB3F0286EB57A00B368D4 /* UIMenu+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIMenu+extension.swift"; sourceTree = ""; }; 9A6CB3F228728B3100B368D4 /* String+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+extension.swift"; sourceTree = ""; }; - 9A6DC204287C6199004EEC41 /* AboutViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewModel.swift; sourceTree = ""; }; + 9A6DC204287C6199004EEC41 /* AboutReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutReactor.swift; sourceTree = ""; }; 9A6DC208287C7B42004EEC41 /* AppSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingView.swift; sourceTree = ""; }; - 9A6DC20A287D0AC5004EEC41 /* AppSettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsViewModel.swift; sourceTree = ""; }; + 9A6DC20A287D0AC5004EEC41 /* AppSettingReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingReactor.swift; sourceTree = ""; }; 9A6DE3522888E2E300EB2F3F /* PlayerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerViewController.swift; sourceTree = ""; }; 9A6DE3582889271200EB2F3F /* MinimizePlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MinimizePlayerView.swift; sourceTree = ""; }; 9A6DE35A2889327A00EB2F3F /* MaximizePlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaximizePlayerView.swift; sourceTree = ""; }; - 9A6DE35C2889AF1000EB2F3F /* PlayerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerViewModel.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 = ""; }; 9A6DE364288ADAC300EB2F3F /* SongRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongRow.swift; sourceTree = ""; }; @@ -284,9 +288,9 @@ 9A7ACED7287EC16E001D47CB /* VillagersViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagersViewController.swift; path = ViewControllers/VillagersViewController.swift; sourceTree = ""; }; 9A7ACED8287EC16E001D47CB /* VillagerDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagerDetailViewController.swift; path = ViewControllers/VillagerDetailViewController.swift; sourceTree = ""; }; 9A7ACEDB287EC180001D47CB /* VillagersCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagersCoordinator.swift; path = Coordinator/VillagersCoordinator.swift; sourceTree = ""; }; - 9A7ACEDD287EC188001D47CB /* VillagersCellViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagersCellViewModel.swift; path = ViewModels/VillagersCellViewModel.swift; sourceTree = ""; }; - 9A7ACEDE287EC188001D47CB /* VillagersViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagersViewModel.swift; path = ViewModels/VillagersViewModel.swift; sourceTree = ""; }; - 9A7ACEDF287EC188001D47CB /* VillagerDetailViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagerDetailViewModel.swift; path = ViewModels/VillagerDetailViewModel.swift; sourceTree = ""; }; + 9A7ACEDD287EC188001D47CB /* VillagersCellReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagersCellReactor.swift; path = ViewModels/VillagersCellReactor.swift; sourceTree = ""; }; + 9A7ACEDE287EC188001D47CB /* VillagersReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagersReactor.swift; path = ViewModels/VillagersReactor.swift; sourceTree = ""; }; + 9A7ACEDF287EC188001D47CB /* VillagerDetailReactor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagerDetailReactor.swift; path = ViewModels/VillagerDetailReactor.swift; sourceTree = ""; }; 9A7ACEE3287EC194001D47CB /* VillagerDetailView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VillagerDetailView.swift; path = Views/VillagerDetailView.swift; sourceTree = ""; }; 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 = ""; }; @@ -294,10 +298,10 @@ 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 /* CatalogViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogViewModel.swift; path = Catalog/ViewModels/CatalogViewModel.swift; sourceTree = ""; }; - 9A7ACEF2287EC239001D47CB /* ItemDetailViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemDetailViewModel.swift; path = Catalog/ViewModels/ItemDetailViewModel.swift; sourceTree = ""; }; - 9A7ACEF3287EC239001D47CB /* CatalogCellViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CatalogCellViewModel.swift; path = Catalog/ViewModels/CatalogCellViewModel.swift; sourceTree = ""; }; - 9A7ACEF4287EC239001D47CB /* ItemsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ItemsViewModel.swift; path = Catalog/ViewModels/ItemsViewModel.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 = ""; }; @@ -311,8 +315,8 @@ 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 /* CollectionProgressViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CollectionProgressViewModel.swift; path = Collection/ViewModels/CollectionProgressViewModel.swift; sourceTree = ""; }; - 9A7ACF14287EC2E9001D47CB /* CollectionViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CollectionViewModel.swift; path = Collection/ViewModels/CollectionViewModel.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 = ""; }; 9A7ACF20287EC459001D47CB /* HapticManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HapticManager.swift; sourceTree = ""; }; @@ -325,6 +329,8 @@ 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 = ""; }; + 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 = ""; }; 9A99AA072858248600629C4A /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = ""; }; 9A99AA09285824DF00629C4A /* AppAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAppearance.swift; sourceTree = ""; }; @@ -355,19 +361,18 @@ 9A99AA6028603CB800629C4A /* IconCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IconCell.xib; sourceTree = ""; }; 9A99AA632860401400629C4A /* UICollectionView+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UICollectionView+extension.swift"; sourceTree = ""; }; 9A99AA652860431A00629C4A /* IconChooserViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconChooserViewController.swift; sourceTree = ""; }; - 9A99AA6928618C8200629C4A /* UserInfoSectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoSectionViewModel.swift; sourceTree = ""; }; - 9A99AA6C2861945B00629C4A /* PreferencesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesViewModel.swift; sourceTree = ""; }; + 9A99AA6C2861945B00629C4A /* PreferencesReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesReactor.swift; sourceTree = ""; }; 9A99AA6E28643CA700629C4A /* UIImage+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+extension.swift"; sourceTree = ""; }; 9A99AA702864433900629C4A /* UserCollectionEntity+Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserCollectionEntity+Mapping.swift"; sourceTree = ""; }; - 9A99AA7328656D1600629C4A /* VillagersSectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VillagersSectionViewModel.swift; sourceTree = ""; }; - 9A99AA7528657A9900629C4A /* TodaysTasksSectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodaysTasksSectionViewModel.swift; sourceTree = ""; }; - 9A99AA772865B82A00629C4A /* TasksEditViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TasksEditViewModel.swift; sourceTree = ""; }; - 9A99AA792865CA9300629C4A /* CustomTaskViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTaskViewModel.swift; sourceTree = ""; }; + 9A99AA7328656D1600629C4A /* VillagersSectionReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VillagersSectionReactor.swift; sourceTree = ""; }; + 9A99AA7528657A9900629C4A /* TodaysTasksSectionReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodaysTasksSectionReactor.swift; sourceTree = ""; }; + 9A99AA772865B82A00629C4A /* TasksEditReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TasksEditReactor.swift; sourceTree = ""; }; + 9A99AA792865CA9300629C4A /* CustomTaskReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTaskReactor.swift; sourceTree = ""; }; 9A99AA7D286AC4F900629C4A /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = ""; }; 9A99AA84286AE22200629C4A /* AboutItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutItem.swift; sourceTree = ""; }; 9AD343EB28746593008A3D6D /* Int+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int+extension.swift"; sourceTree = ""; }; 9AD343F028766429008A3D6D /* UILabel+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+extension.swift"; sourceTree = ""; }; - 9AD343F628767649008A3D6D /* ProgressViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressViewModel.swift; sourceTree = ""; }; + 9AD343F628767649008A3D6D /* ProgressReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressReactor.swift; sourceTree = ""; }; 9AF0418628503B9400C51449 /* UserCollectionEntity.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = UserCollectionEntity.xcdatamodel; sourceTree = ""; }; 9AF0418928503F7900C51449 /* Item.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Item.swift; sourceTree = ""; }; 9AF0418B2850451100C51449 /* Category.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Category.swift; sourceTree = ""; }; @@ -400,6 +405,7 @@ files = ( 9A1DB1D7284081E400689F11 /* Alamofire in Frameworks */, 9A1DB1CE2840504B00689F11 /* Kingfisher in Frameworks */, + 9A688E1F288FAFB300FFFB69 /* ReactorKit in Frameworks */, 9A541B8528225F8E001B57FD /* RxSwift in Frameworks */, 9A541B8328225F8E001B57FD /* RxRelay in Frameworks */, 9A99AA83286ACBBC00629C4A /* RxDataSources in Frameworks */, @@ -452,24 +458,9 @@ 9A541B6728220A72001B57FD /* Animal-Crossing-Wiki */ = { isa = PBXGroup; children = ( - 9AF041A42851ADFF00C51449 /* Extension */, - 9A6DE35F2889AFB400EB2F3F /* MusicPlayer */, - 9A99AA052858247700629C4A /* Coordinator.swift */, - 9A99AA072858248600629C4A /* AppCoordinator.swift */, - 9A99AA09285824DF00629C4A /* AppAppearance.swift */, - 9A541B6828220A72001B57FD /* AppDelegate.swift */, - 9A541B6A28220A72001B57FD /* SceneDelegate.swift */, - 9A541B7328220A73001B57FD /* LaunchScreen.storyboard */, + 9A836EF828AE48E000B5A74A /* Resources */, + 9A836EFA28AE491500B5A74A /* Sources */, 9A541B7628220A73001B57FD /* Info.plist */, - 9A541B7128220A73001B57FD /* Assets.xcassets */, - 9A7ACF1B287EC3F0001D47CB /* Utility */, - 9A99AA29285890D500629C4A /* Dashboard */, - 9A99AA88286C17B100629C4A /* Villagers */, - 9A7ACED6287EC04B001D47CB /* Catalog */, - 9A6A2EC4287A7A5F007D2EEA /* Colletion */, - 9AF041CD2851DDE700C51449 /* CoreDataStorage */, - 9A4B4C3828503A6100CC687C /* Models */, - 9A6891A128335B2D0061AAF1 /* Networking */, 9A62CFE3287D7C56005D737D /* Localizable.strings */, 9A62CFE9287DB9F9005D737D /* InfoPlist.strings */, ); @@ -516,7 +507,7 @@ 9A3CFB3E288082AF00B0FFCB /* OtherRequest.swift */, 9A3CFB48288295CA00B0FFCB /* CeilingDecorRequest.swift */, 9A3DE3CF2887B7E6006EECF7 /* RecipesRequest.swift */, - 9A680EB22888219900F0E0C7 /* MusicRequest.swift */, + 9A836EF228AE0CAF00B5A74A /* SongsRequest.swift */, ); path = Request; sourceTree = ""; @@ -540,7 +531,7 @@ 9A3CFB3C2880809100B0FFCB /* OtherResponseDTO.swift */, 9A3CFB46288291C300B0FFCB /* CeilingDecorResponseDTO.swift */, 9A3DE3CD2887B6F5006EECF7 /* RecipeResponseDTO.swift */, - 9A680EB42888222200F0E0C7 /* MusicResponseDTO.swift */, + 9A836EF428AE0CC200B5A74A /* SongResponseDTO.swift */, ); path = Response; sourceTree = ""; @@ -564,13 +555,14 @@ 9A6A2ED3287AA21A007D2EEA /* Views */, ); name = Colletion; + path = ../..; sourceTree = ""; }; 9A6A2ECB287A7EF8007D2EEA /* ViewModel */ = { isa = PBXGroup; children = ( - 9A7ACF14287EC2E9001D47CB /* CollectionViewModel.swift */, - 9A7ACF13287EC2E9001D47CB /* CollectionProgressViewModel.swift */, + 9A7ACF14287EC2E9001D47CB /* CollectionReactor.swift */, + 9A7ACF13287EC2E9001D47CB /* CollectionProgressReactor.swift */, ); name = ViewModel; sourceTree = ""; @@ -603,10 +595,10 @@ 9A6CB3FC2872A57100B368D4 /* ViewModels */ = { isa = PBXGroup; children = ( - 9A7ACEF1287EC239001D47CB /* CatalogViewModel.swift */, - 9A7ACEF3287EC239001D47CB /* CatalogCellViewModel.swift */, - 9A7ACEF4287EC239001D47CB /* ItemsViewModel.swift */, - 9A7ACEF2287EC239001D47CB /* ItemDetailViewModel.swift */, + 9A7ACEF1287EC239001D47CB /* CatalogReactor.swift */, + 9A7ACEF3287EC239001D47CB /* CatalogCellReactor.swift */, + 9A7ACEF4287EC239001D47CB /* ItemsReactor.swift */, + 9A7ACEF2287EC239001D47CB /* ItemDetailReactor.swift */, ); name = ViewModels; sourceTree = ""; @@ -615,7 +607,7 @@ isa = PBXGroup; children = ( 9A6DE3522888E2E300EB2F3F /* PlayerViewController.swift */, - 9A6DE35C2889AF1000EB2F3F /* PlayerViewModel.swift */, + 9A6DE35C2889AF1000EB2F3F /* PlayerReactor.swift */, 9A6DE3582889271200EB2F3F /* MinimizePlayerView.swift */, 9A6DE35A2889327A00EB2F3F /* MaximizePlayerView.swift */, 9A6DE364288ADAC300EB2F3F /* SongRow.swift */, @@ -634,6 +626,7 @@ 9AD343E22874282A008A3D6D /* Views */, ); name = Catalog; + path = ../..; sourceTree = ""; }; 9A7ACF1B287EC3F0001D47CB /* Utility */ = { @@ -647,6 +640,45 @@ path = Utility; sourceTree = ""; }; + 9A836EF828AE48E000B5A74A /* Resources */ = { + isa = PBXGroup; + children = ( + 9A541B6828220A72001B57FD /* AppDelegate.swift */, + 9A541B6A28220A72001B57FD /* SceneDelegate.swift */, + 9A541B7328220A73001B57FD /* LaunchScreen.storyboard */, + 9A541B7128220A73001B57FD /* Assets.xcassets */, + ); + path = Resources; + sourceTree = ""; + }; + 9A836EFA28AE491500B5A74A /* Sources */ = { + isa = PBXGroup; + children = ( + 9AF041A42851ADFF00C51449 /* Extension */, + 9A836EFB28AE498300B5A74A /* Presentation */, + 9A7ACF1B287EC3F0001D47CB /* Utility */, + 9AF041CD2851DDE700C51449 /* CoreDataStorage */, + 9A4B4C3828503A6100CC687C /* Models */, + 9A6891A128335B2D0061AAF1 /* Networking */, + ); + path = Sources; + sourceTree = ""; + }; + 9A836EFB28AE498300B5A74A /* Presentation */ = { + isa = PBXGroup; + children = ( + 9A6DE35F2889AFB400EB2F3F /* MusicPlayer */, + 9A99AA29285890D500629C4A /* Dashboard */, + 9A99AA88286C17B100629C4A /* Villagers */, + 9A7ACED6287EC04B001D47CB /* Catalog */, + 9A6A2EC4287A7A5F007D2EEA /* Colletion */, + 9A99AA052858247700629C4A /* Coordinator.swift */, + 9A99AA072858248600629C4A /* AppCoordinator.swift */, + 9A99AA09285824DF00629C4A /* AppAppearance.swift */, + ); + path = Presentation; + sourceTree = ""; + }; 9A99AA29285890D500629C4A /* Dashboard */ = { isa = PBXGroup; children = ( @@ -670,6 +702,7 @@ 9A99AA3B285AE2FC00629C4A /* ProgressBar.swift */, 9A99AA5F28603CB800629C4A /* IconCell.swift */, 9A99AA6028603CB800629C4A /* IconCell.xib */, + 9A455C3C28975F73009A14A9 /* EmptyView.swift */, ); path = shared; sourceTree = ""; @@ -700,17 +733,17 @@ 9A99AA6B28618C8500629C4A /* ViewModels */ = { isa = PBXGroup; children = ( - 9A6A2ED8287BEB76007D2EEA /* DashboardViewModel.swift */, - 9A6DC204287C6199004EEC41 /* AboutViewModel.swift */, - 9A99AA6C2861945B00629C4A /* PreferencesViewModel.swift */, - 9A99AA6928618C8200629C4A /* UserInfoSectionViewModel.swift */, - 9A99AA7328656D1600629C4A /* VillagersSectionViewModel.swift */, - 9AD343F628767649008A3D6D /* ProgressViewModel.swift */, - 9A99AA7528657A9900629C4A /* TodaysTasksSectionViewModel.swift */, - 9A99AA772865B82A00629C4A /* TasksEditViewModel.swift */, - 9A99AA792865CA9300629C4A /* CustomTaskViewModel.swift */, - 9A6A2ED6287BE71A007D2EEA /* CollectionProgressSectionViewModel.swift */, - 9A6DC20A287D0AC5004EEC41 /* AppSettingsViewModel.swift */, + 9A6A2ED8287BEB76007D2EEA /* DashboardReactor.swift */, + 9A6DC204287C6199004EEC41 /* AboutReactor.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 */, + 9A2B0FD82897C84F00285C77 /* UserInfoReactor.swift */, ); path = ViewModels; sourceTree = ""; @@ -756,9 +789,9 @@ 9A99AA96286C1F7000629C4A /* ViewModels */ = { isa = PBXGroup; children = ( - 9A7ACEDE287EC188001D47CB /* VillagersViewModel.swift */, - 9A7ACEDD287EC188001D47CB /* VillagersCellViewModel.swift */, - 9A7ACEDF287EC188001D47CB /* VillagerDetailViewModel.swift */, + 9A7ACEDE287EC188001D47CB /* VillagersReactor.swift */, + 9A7ACEDD287EC188001D47CB /* VillagersCellReactor.swift */, + 9A7ACEDF287EC188001D47CB /* VillagerDetailReactor.swift */, ); name = ViewModels; sourceTree = ""; @@ -858,6 +891,7 @@ 9A5D829F2873D87000EC8CE3 /* Collection+extension.swift */, 9AD343EB28746593008A3D6D /* Int+extension.swift */, 9A3CFB44288128CD00B0FFCB /* Array+extension.swift */, + 9A455C3A28957569009A14A9 /* Reactor+extension.swift */, ); path = Extension; sourceTree = ""; @@ -991,6 +1025,7 @@ 9A1DB1D6284081E400689F11 /* Alamofire */, 9A99AA80286ACBBC00629C4A /* Differentiator */, 9A99AA82286ACBBC00629C4A /* RxDataSources */, + 9A688E1E288FAFB300FFFB69 /* ReactorKit */, ); productName = "Animal-Crossing-Wiki"; productReference = 9A541B6528220A72001B57FD /* Animal-Crossing-Wiki.app */; @@ -1049,6 +1084,7 @@ 9A1DB1D5284081E400689F11 /* XCRemoteSwiftPackageReference "Alamofire" */, 9A4B4C2B284EEA2D00CC687C /* XCRemoteSwiftPackageReference "AnyCodable" */, 9A99AA7F286ACBBC00629C4A /* XCRemoteSwiftPackageReference "RxDataSources" */, + 9A688E1D288FAFB300FFFB69 /* XCRemoteSwiftPackageReference "ReactorKit" */, ); productRefGroup = 9A541B6628220A72001B57FD /* Products */; projectDirPath = ""; @@ -1117,14 +1153,14 @@ files = ( 9A7ACF10287EC2D3001D47CB /* CollectionViewController.swift in Sources */, 9AF042212853131400C51449 /* DailyTaskEntity+Mapping.swift in Sources */, + 9A836EF328AE0CAF00B5A74A /* SongsRequest.swift in Sources */, 9A6891BB2833787D0061AAF1 /* FossilsResponseDTO.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 /* CatalogCellViewModel.swift in Sources */, - 9A680EB32888219900F0E0C7 /* MusicRequest.swift in Sources */, + 9A7ACEF7287EC239001D47CB /* CatalogCellReactor.swift in Sources */, 9A99AA362859C8BD00629C4A /* VillagersView.swift in Sources */, 9A7ACF30288000D7001D47CB /* KeywordCell.swift in Sources */, 9A7ACF04287EC26F001D47CB /* ItemDetailInfoView.swift in Sources */, @@ -1135,9 +1171,9 @@ 9A6DE369288AE25400EB2F3F /* PlayerMode.swift in Sources */, 9AF041AC2851B20D00C51449 /* CoreDataStorage.swift in Sources */, 9A99AA6F28643CA700629C4A /* UIImage+extension.swift in Sources */, - 9A99AA7A2865CA9300629C4A /* CustomTaskViewModel.swift in Sources */, + 9A99AA7A2865CA9300629C4A /* CustomTaskReactor.swift in Sources */, 9A541B6D28220A72001B57FD /* DashboardViewController.swift in Sources */, - 9A6A2ED9287BEB76007D2EEA /* DashboardViewModel.swift in Sources */, + 9A6A2ED9287BEB76007D2EEA /* DashboardReactor.swift in Sources */, 9A4B4C3728503A0400CC687C /* DailyTask.swift in Sources */, 9A6DE363288A9BFB00EB2F3F /* PlayerView.swift in Sources */, 9A6891A4283361F20061AAF1 /* VillagersRequest.swift in Sources */, @@ -1146,7 +1182,7 @@ 9A6891C3283380D50061AAF1 /* ArtResponseDTO.swift in Sources */, 9A99AA5A28602F4A00629C4A /* CustomTaskView.swift in Sources */, 9A7ACEDC287EC180001D47CB /* VillagersCoordinator.swift in Sources */, - 9A7ACEF8287EC239001D47CB /* ItemsViewModel.swift in Sources */, + 9A7ACEF8287EC239001D47CB /* ItemsReactor.swift in Sources */, 9A6DE3592889271200EB2F3F /* MinimizePlayerView.swift in Sources */, 9A6891AD283368EE0061AAF1 /* TurnipRequest.swift in Sources */, 9A62D74128783A4D0047750F /* UITableView+extension.swift in Sources */, @@ -1154,12 +1190,13 @@ 9A6891B3283371E20061AAF1 /* FishResponseDTO.swift in Sources */, 9A3CFB3328806EDB00B0FFCB /* FloorsResponseDTO.swift in Sources */, 9A541B6B28220A72001B57FD /* SceneDelegate.swift in Sources */, - 9A7ACEE1287EC188001D47CB /* VillagersViewModel.swift in Sources */, + 9A7ACEE1287EC188001D47CB /* VillagersReactor.swift in Sources */, 9A6CB3F1286EB57A00B368D4 /* UIMenu+extension.swift in Sources */, + 9A836EF528AE0CC200B5A74A /* SongResponseDTO.swift in Sources */, 9A99AA3A2859F9A300629C4A /* CollectionProgressView.swift in Sources */, 9AF0418C2850451100C51449 /* Category.swift in Sources */, 9A6891A7283362C90061AAF1 /* VillagersResponseDTO.swift in Sources */, - 9A6DC20B287D0AC5004EEC41 /* AppSettingsViewModel.swift in Sources */, + 9A6DC20B287D0AC5004EEC41 /* AppSettingReactor.swift in Sources */, 9A7ACEE7287EC194001D47CB /* VillagerDetailView.swift in Sources */, 9A99AA062858247700629C4A /* Coordinator.swift in Sources */, 9A99AA2C28597B7500629C4A /* TodaysTasksView.swift in Sources */, @@ -1167,26 +1204,28 @@ 9A4B4C33285033B300CC687C /* Fruit.swift in Sources */, 9A6891AF2833690A0061AAF1 /* TurnipResponseDTO.swift in Sources */, 9A3CFB49288295CA00B0FFCB /* CeilingDecorRequest.swift in Sources */, - 9A7ACEE2287EC188001D47CB /* VillagerDetailViewModel.swift in Sources */, + 9A7ACEE2287EC188001D47CB /* VillagerDetailReactor.swift in Sources */, 9A99AA082858248600629C4A /* AppCoordinator.swift in Sources */, 9A6DE3532888E2E300EB2F3F /* PlayerViewController.swift in Sources */, 9AF0421D28530DD200C51449 /* VillagersLikeStorage.swift in Sources */, 9A99AA54285C341E00629C4A /* InfoContentView.swift in Sources */, - 9A99AA6D2861945B00629C4A /* PreferencesViewModel.swift in Sources */, + 9A99AA6D2861945B00629C4A /* PreferencesReactor.swift in Sources */, 9AF042402856F4C000C51449 /* Hemisphere.swift in Sources */, 9A3CFB47288291C300B0FFCB /* CeilingDecorResponseDTO.swift in Sources */, - 9A7ACEF5287EC239001D47CB /* CatalogViewModel.swift in Sources */, + 9A7ACEF5287EC239001D47CB /* CatalogReactor.swift in Sources */, 9A7ACF07287EC26F001D47CB /* CategoryRow.swift in Sources */, 9A99AA4A285B04D900629C4A /* DashboardCoordinator.swift in Sources */, 9A7ACEEE287EC20B001D47CB /* ItemDetailViewController.swift in Sources */, 9A99AA52285C32C300629C4A /* PreferencesView.swift in Sources */, 9AF04227285313ED00C51449 /* UserInfo.swift in Sources */, 9A99AA7E286AC4F900629C4A /* AboutViewController.swift in Sources */, + 9A2B0FD92897C84F00285C77 /* UserInfoReactor.swift in Sources */, 9AF0421528530CFE00C51449 /* VillagersHouseStorage.swift in Sources */, - 9A7ACEE0287EC188001D47CB /* VillagersCellViewModel.swift in Sources */, + 9A7ACEE0287EC188001D47CB /* VillagersCellReactor.swift in Sources */, 9A99AA642860401400629C4A /* UICollectionView+extension.swift in Sources */, 9AF0420828530C2D00C51449 /* CoreDataVillagersHouseStorage.swift in Sources */, 9A99AA5C2860319100629C4A /* CustomTaskViewController.swift in Sources */, + 9A455C3B28957569009A14A9 /* Reactor+extension.swift in Sources */, 9A3CFB392880787100B0FFCB /* RugsResponseDTO.swift in Sources */, 9A3CFB3D2880809100B0FFCB /* OtherResponseDTO.swift in Sources */, 9A99AA44285AF03D00629C4A /* PreferencesViewController.swift in Sources */, @@ -1199,14 +1238,14 @@ 9AD343EC28746593008A3D6D /* Int+extension.swift in Sources */, 9A99AA1E2858743F00629C4A /* SectionView.swift in Sources */, 9AF0421928530D8D00C51449 /* ItemsStorage.swift in Sources */, - 9A99AA7628657A9900629C4A /* TodaysTasksSectionViewModel.swift in Sources */, + 9A99AA7628657A9900629C4A /* TodaysTasksSectionReactor.swift in Sources */, 9A1DB1D2284069DD00689F11 /* UIImageView+extension.swift in Sources */, - 9A99AA6A28618C8200629C4A /* UserInfoSectionViewModel.swift in Sources */, 9AF042252853133200C51449 /* DailyTaskStorage.swift in Sources */, 9A6891A9283366220061AAF1 /* EnvironmentsVariable.swift in Sources */, 9A3DE3CE2887B6F5006EECF7 /* RecipeResponseDTO.swift in Sources */, 9A7ACF29287FD984001D47CB /* ItemVariantsView.swift in Sources */, 9A4B4C35285034BA00CC687C /* Villager.swift in Sources */, + 9A455C3D28975F73009A14A9 /* EmptyView.swift in Sources */, 9AF0420C28530C5F00C51449 /* VillagersLikeEntity+Mapping.swift in Sources */, 9A7ACF3328800318001D47CB /* ItemKeywordView.swift in Sources */, 9A7ACEDA287EC16E001D47CB /* VillagerDetailViewController.swift in Sources */, @@ -1220,13 +1259,12 @@ 9AF0418828503B9400C51449 /* CoreDataStorage.xcdatamodeld in Sources */, 9A99AA3E285AEA1700629C4A /* Date+extension.swift in Sources */, 9A99AA222858802B00629C4A /* UIView+extension.swift in Sources */, - 9A6A2ED7287BE71A007D2EEA /* CollectionProgressSectionViewModel.swift in Sources */, + 9A6A2ED7287BE71A007D2EEA /* CollectionProgressSectionReactor.swift in Sources */, 9A99AA6128603CB800629C4A /* IconCell.swift in Sources */, 9A7ACF25287F9C87001D47CB /* HousewaresResponseDTO.swift in Sources */, - 9A680EB52888222200F0E0C7 /* MusicResponseDTO.swift in Sources */, 9A3CFB2D2880637100B0FFCB /* WallMountedResponseDTO.swift in Sources */, 9A5D82A02873D87000EC8CE3 /* Collection+extension.swift in Sources */, - 9A7ACF15287EC2E9001D47CB /* CollectionProgressViewModel.swift in Sources */, + 9A7ACF15287EC2E9001D47CB /* CollectionProgressReactor.swift in Sources */, 9A7ACF0A287EC26F001D47CB /* CalendarView.swift in Sources */, 9A3CFB35288073AE00B0FFCB /* WallpaperRequest.swift in Sources */, 9A7ACF09287EC26F001D47CB /* ItemOtherInfoView.swift in Sources */, @@ -1236,25 +1274,25 @@ 9A6891BF283379B80061AAF1 /* SeaCreaturesResponseDTO.swift in Sources */, 9A6CB3F328728B3100B368D4 /* String+extension.swift in Sources */, 9A99AA382859F74900629C4A /* ProgressView.swift in Sources */, - 9A6DE35D2889AF1000EB2F3F /* PlayerViewModel.swift in Sources */, + 9A6DE35D2889AF1000EB2F3F /* PlayerReactor.swift in Sources */, 9A6891B7283377010061AAF1 /* BugResponseDTO.swift in Sources */, - 9A7ACF16287EC2E9001D47CB /* CollectionViewModel.swift in Sources */, + 9A7ACF16287EC2E9001D47CB /* CollectionReactor.swift in Sources */, 9A99AA262858827900629C4A /* UserInfoView.swift in Sources */, - 9A7ACEF6287EC239001D47CB /* ItemDetailViewModel.swift in Sources */, + 9A7ACEF6287EC239001D47CB /* ItemDetailReactor.swift in Sources */, 9A7ACF0B287EC26F001D47CB /* ItemSeasonView.swift in Sources */, 9A7ACF22287EC459001D47CB /* HapticManager.swift in Sources */, 9A7ACED9287EC16E001D47CB /* VillagersViewController.swift in Sources */, 9A7ACEEF287EC20B001D47CB /* CatalogViewController.swift in Sources */, - 9A99AA782865B82A00629C4A /* TasksEditViewModel.swift in Sources */, + 9A99AA782865B82A00629C4A /* TasksEditReactor.swift in Sources */, 9A6891BD283379830061AAF1 /* SeaCreaturesRequest.swift in Sources */, 9A99AA58285C6FF900629C4A /* TaskEditViewController.swift in Sources */, 9A3CFB37288076B900B0FFCB /* FloorsRequest.swift in Sources */, 9A99AA1428584C9B00629C4A /* UIFont+extension.swift in Sources */, 9A3CFB3128806A8200B0FFCB /* WallpaperResponseDTO.swift in Sources */, 9A7ACF1A287EC2F3001D47CB /* ItemProgressRow.swift in Sources */, - 9AD343F728767649008A3D6D /* ProgressViewModel.swift in Sources */, + 9AD343F728767649008A3D6D /* ProgressReactor.swift in Sources */, 9A68919928335ADD0061AAF1 /* DefaultAPIProvider.swift in Sources */, - 9A99AA7428656D1600629C4A /* VillagersSectionViewModel.swift in Sources */, + 9A99AA7428656D1600629C4A /* VillagersSectionReactor.swift in Sources */, 9AF0420E28530C8600C51449 /* VillagersHouseEntity+Mapping.swift in Sources */, 9AF0420628530C1E00C51449 /* CoreDataVillagersLikeStorage.swift in Sources */, 9A7ACF2C287FDA07001D47CB /* VariantCell.swift in Sources */, @@ -1268,7 +1306,7 @@ 9A99AA85286AE22200629C4A /* AboutItem.swift in Sources */, 9A68919B28335AE90061AAF1 /* APIProvider.swift in Sources */, 9A3CFB3F288082AF00B0FFCB /* OtherRequest.swift in Sources */, - 9A6DC205287C6199004EEC41 /* AboutViewModel.swift in Sources */, + 9A6DC205287C6199004EEC41 /* AboutReactor.swift in Sources */, 9A1DB1D92840857300689F11 /* APIError.swift in Sources */, 9AF0420A28530C3800C51449 /* CoreDataItemsStorage.swift in Sources */, 9A6891B1283371A60061AAF1 /* FishRequest.swift in Sources */, @@ -1606,6 +1644,14 @@ kind = branch; }; }; + 9A688E1D288FAFB300FFFB69 /* XCRemoteSwiftPackageReference "ReactorKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ReactorKit/ReactorKit.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; + }; + }; 9A99AA7F286ACBBC00629C4A /* XCRemoteSwiftPackageReference "RxDataSources" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/RxSwiftCommunity/RxDataSources"; @@ -1642,6 +1688,11 @@ package = 9A541B7F28225F8E001B57FD /* XCRemoteSwiftPackageReference "RxSwift" */; productName = RxSwift; }; + 9A688E1E288FAFB300FFFB69 /* ReactorKit */ = { + isa = XCSwiftPackageProductDependency; + package = 9A688E1D288FAFB300FFFB69 /* XCRemoteSwiftPackageReference "ReactorKit" */; + productName = ReactorKit; + }; 9A99AA80286ACBBC00629C4A /* Differentiator */ = { isa = XCSwiftPackageProductDependency; package = 9A99AA7F286ACBBC00629C4A /* XCRemoteSwiftPackageReference "RxDataSources" */; diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Coordinator/CatalogCoordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Coordinator/CatalogCoordinator.swift index 920138ed..6e52edf9 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Coordinator/CatalogCoordinator.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Coordinator/CatalogCoordinator.swift @@ -26,7 +26,7 @@ final class CatalogCoordinator: Coordinator { func start() { let catalogVC = CatalogViewController() - catalogVC.bind(to: CatalogViewModel(coordinator: self)) + catalogVC.bind(to: CatalogReactor(coordinator: self)) rootViewController.addChild(catalogVC) } @@ -34,15 +34,15 @@ final class CatalogCoordinator: Coordinator { switch route { case .items(let category): let viewController = ItemsViewController() - viewController.bind(to: ItemsViewModel(category: category, coordinator: self)) + viewController.bind(to: ItemsReactor(category: category, coordinator: self)) rootViewController.pushViewController(viewController, animated: true) case .itemDetail(let item): let viewController = ItemDetailViewController() - viewController.bind(to: ItemDetailViewModel(item: item, coordinator: self)) + viewController.bind(to: ItemDetailReactor(item: item, coordinator: self)) rootViewController.pushViewController(viewController, animated: true) case .keyword(let title, let keyword): let viewController = ItemsViewController() - viewController.bind(to: ItemsViewModel(coordinator: self, mode: .keyword(title: title, category: keyword))) + viewController.bind(to: ItemsReactor(coordinator: self, mode: .keyword(title: title, category: keyword))) rootViewController.pushViewController(viewController, animated: true) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/CatalogViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/CatalogViewController.swift index f264f0c5..84c66dae 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/CatalogViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/CatalogViewController.swift @@ -54,13 +54,23 @@ class CatalogViewController: UIViewController { ]) } - func bind(to viewModel: CatalogViewModel) { - let input = CatalogViewModel.Input( - selectedCategory: tableView.rx.modelSelected((title: Category, count: Int).self).asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + func bind(to reactor: CatalogReactor) { + self.rx.viewDidLoad + .map { CatalogReactor.Action.fetch } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + tableView.rx.modelSelected((title: Category, count: Int).self) + .map { CatalogReactor.Action.selectedCategory(title: $0.0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + reactor.state.map { $0.isLoading } + .bind(to: activityIndicator.rx.isAnimating) + .disposed(by: disposeBag) - output.catagories + reactor.state.map { $0.categories } .bind(to: tableView.rx.items(cellIdentifier: CategoryRow.className, cellType: CategoryRow.self)) { _, item, cell in cell.setUp( iconName: item.title.iconName, @@ -68,15 +78,5 @@ class CatalogViewController: UIViewController { itemCount: item.count ) }.disposed(by: disposeBag) - - tableView.rx.itemSelected - .withUnretained(self) - .subscribe(onNext: { owner, indexPath in - owner.tableView.deselectRow(at: indexPath, animated: true) - }).disposed(by: disposeBag) - - output.isLoading - .bind(to: self.activityIndicator.rx.isAnimating) - .disposed(by: disposeBag) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemDetailViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemDetailViewController.swift index 0d7d70ea..ced912b2 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemDetailViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemDetailViewController.swift @@ -60,20 +60,36 @@ class ItemDetailViewController: UIViewController { navigationItem.enableMultilineTitle() } - func bind(to viewModel: ItemDetailViewModel) { - keywordView = ItemKeywordView(item: viewModel.item) + func bind(to reactor: ItemDetailReactor) { + keywordView = ItemKeywordView(item: reactor.currentState.item) playerView = ItemPlayerView() - navigationItem.title = viewModel.item.translations.localizedName() - setUpSection(in: viewModel.item) + navigationItem.title = reactor.currentState.item.translations.localizedName() + setUpSection(in: reactor.currentState.item) - let input = ItemDetailViewModel.Input( - didTapCheck: checkButton.rx.tap.asObservable(), - didTapKeyword: keywordView?.didTapKeyword, - didTapPlay: playerView?.playButton.rx.tap.asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + self.rx.viewDidLoad + .map { ItemDetailReactor.Action.fetch } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) - output.isAcquired + checkButton.rx.tap + .map { ItemDetailReactor.Action.check } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + keywordView?.didTapKeyword + .compactMap { $0 } + .map { ItemDetailReactor.Action.didTapKeyword($0) } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + playerView?.playButton.rx.tap + .map { ItemDetailReactor.Action.play } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + reactor.state.map { $0.isAcquired } .observe(on: MainScheduler.instance) .withUnretained(self) .subscribe(onNext: { owner, isAcquired in @@ -106,6 +122,7 @@ class ItemDetailViewController: UIViewController { setUpSaeson(item) setUpKeyword(item) setUpMaterials(item) + setUpPlayer(item) } private func setUpDetail(_ item: Item) { diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemsViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemsViewController.swift index 82061a49..ccc718c3 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemsViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewControllers/ItemsViewController.swift @@ -10,10 +10,11 @@ import RxSwift import RxRelay class ItemsViewController: UIViewController { + enum Mode: Equatable { case user case all - case keyword(title: String) + case keyword(title: String, keyword: Keyword) } enum Menu: Int { @@ -21,6 +22,8 @@ class ItemsViewController: UIViewController { case month case name case sell + case allSelect + case reset var title: String { switch self { @@ -28,6 +31,8 @@ class ItemsViewController: UIViewController { case .month: return "Month".localized case .name: return "Name".localized case .sell: return "Sell".localized + case .allSelect: return "All Select".localized + case .reset: return "Reset".localized } } @@ -42,15 +47,17 @@ class ItemsViewController: UIViewController { case "Month".localized: return .month case "Name".localized: return .name case "Sell".localized: return .sell + case "All Select".localized: return .allSelect + case "Reset".localized: return .reset default: return .all } } } - enum SearchScope: String { + enum SearchScope: String, CaseIterable { case all = "All" - case collected = "Collected" case notCollected = "Not collected" + case collected = "Collected" static func transform(_ localizedString: String) -> String? { switch localizedString { @@ -61,13 +68,13 @@ class ItemsViewController: UIViewController { } } } - + private var reactor: ItemsReactor! private var category: Category? private var mode: Mode = .all - private let disposeBag = DisposeBag() private var currentSelected: [Menu: String] = [.all: Menu.all.title] private var selectedKeyword = BehaviorRelay<[Menu: String]>(value: [:]) - + private let disposeBag = DisposeBag() + private lazy var collectionView: UICollectionView = { let flowLayout = UICollectionViewFlowLayout() flowLayout.itemSize = CGSize(width: 105, height: 175) @@ -90,14 +97,9 @@ class ItemsViewController: UIViewController { private lazy var searchController: UISearchController = { let searchController = UISearchController(searchResultsController: nil) - searchController.hidesNavigationBarDuringPresentation = false searchController.searchBar.placeholder = "Search...".localized if mode != .user { - searchController.searchBar.scopeButtonTitles = [ - SearchScope.all.rawValue.localized, - SearchScope.notCollected.rawValue.localized, - SearchScope.collected.rawValue.localized - ] + searchController.searchBar.scopeButtonTitles = SearchScope.allCases.map { $0.rawValue.localized } searchController.searchBar.showsScopeBar = true } navigationItem.searchController = searchController @@ -105,6 +107,11 @@ class ItemsViewController: UIViewController { return searchController }() + private lazy var emptyView: EmptyView = EmptyView( + title: "There are no villagers.".localized, + description: "They appear here when you press the villager's heart button or home button.".localized + ) + override func viewDidLoad() { super.viewDidLoad() setUpViews() @@ -115,43 +122,72 @@ class ItemsViewController: UIViewController { navigationController?.navigationBar.sizeToFit() } - func bind(to viewModel: ItemsViewModel, keyword: [Menu: String] = [:]) { - self.category = viewModel.category - switch viewModel.mode { + func bind(to reactor: ItemsReactor, keyword: [Menu: String] = [:]) { + self.reactor = reactor + + category = reactor.category + switch reactor.mode { case .user: mode = .user - case .keyword(let title, _): mode = .keyword(title: title) + case .keyword(let title, let keyword): mode = .keyword(title: title, keyword: keyword) case .all: mode = .all } setUpFilterKeyword(keyword) - let input = ItemsViewModel.Input( - searchBarText: searchController.searchBar.rx.text.asObservable(), - didSelectedMenuKeyword: selectedKeyword.asObservable(), - itemSelected: collectionView.rx.itemSelected.asObservable(), - seletedScopeButton: - searchController.searchBar.rx.selectedScopeButtonIndex - .compactMap { [weak self] in - return self?.searchController.searchBar.scopeButtonTitles?[$0] - } - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) - if [Mode.all, Mode.user].contains(mode), navigationItem.title == nil { - output.category - .map { $0.rawValue.localized } - .bind(to: navigationItem.rx.title) - .disposed(by: disposeBag) - } + self.rx.viewDidLoad + .map { ItemsReactor.Action.fetch } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + searchController.searchBar.rx.cancelButtonClicked + .map { ItemsReactor.Action.search(text: "") } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + searchController.searchBar.rx.text + .compactMap { $0 } + .map { ItemsReactor.Action.search(text: $0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) - output.isLoading + selectedKeyword + .map { ItemsReactor.Action.selectedMenu(keywords: $0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + searchController.searchBar.rx.selectedScopeButtonIndex + .compactMap { [weak self] in self?.searchController.searchBar.scopeButtonTitles?[$0]} + .map { ItemsReactor.Action.selectedScope($0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + collectionView.rx.itemSelected + .map { ItemsReactor.Action.selectedItem(indexPath: $0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + reactor.state.map { $0.isLoading } .observe(on: MainScheduler.asyncInstance) - .bind(to: self.activityIndicator.rx.isAnimating) + .bind(to: activityIndicator.rx.isAnimating) .disposed(by: disposeBag) - - output.items + + reactor.state.map { $0.items } .bind(to: collectionView.rx.items(cellIdentifier: CatalogCell.className, cellType: CatalogCell.self)) { _, item, cell in cell.setUp(item) }.disposed(by: disposeBag) + reactor.state.map { $0.items } + .map { !$0.isEmpty } + .bind(to: emptyView.rx.isHidden) + .disposed(by: disposeBag) + + if [Mode.all, Mode.user].contains(mode), navigationItem.title == nil { + reactor.state.map { $0.category } + .map { $0.rawValue.localized } + .bind(to: navigationItem.rx.title) + .disposed(by: disposeBag) + } + selectedKeyword .filter { $0.isEmpty == false } .map { !$0.keys.contains(.all) } @@ -159,14 +195,44 @@ class ItemsViewController: UIViewController { .observe(on: MainScheduler.instance) .subscribe(onNext: { owner, isFiltering in owner.navigationItem.rightBarButtonItem?.image = UIImage( - systemName: isFiltering ? "arrow.up.arrow.down.circle.fill" : "arrow.up.arrow.down.circle" + systemName: isFiltering ? "arrow.up.arrow.down.circle.fill" : "ellipsis.circle" ) - }).disposed(by: disposeBag) + }).disposed(by: disposeBag) + + searchController.searchBar.rx.text + .map { $0 != "" } + .withUnretained(self) + .subscribe(onNext: { owner, isSearching in + if isSearching { + owner.emptyView.editLabel( + title: "Item is empty.".localized, + description: "There are no results for your search.".localized + ) + } + }).disposed(by: disposeBag) searchController.searchBar.rx.selectedScopeButtonIndex + .compactMap { SearchScope.allCases[safe: $0] } .observe(on: MainScheduler.asyncInstance) .withUnretained(self) - .subscribe(onNext: { owner, _ in + .subscribe(onNext: { owner, currentScope in + switch currentScope { + case .all: + owner.emptyView.editLabel( + title: "Item is empty.".localized, + description: "Please check the network status.".localized + ) + case .notCollected: + owner.emptyView.editLabel( + title: "Item is empty.".localized, + description: "There are no more items to collect.".localized + ) + case .collected: + owner.emptyView.editLabel( + title: "There are no collectibles.".localized, + description: "when you check some items, they'll be displayed here.".localized + ) + } owner.searchController.searchBar.endEditing(true) owner.selectedKeyword.accept(owner.currentSelected) }).disposed(by: disposeBag) @@ -188,39 +254,47 @@ class ItemsViewController: UIViewController { private func setUpViews() { view.backgroundColor = .acBackground - view.addSubviews(collectionView, activityIndicator) + view.addSubviews(collectionView, activityIndicator, emptyView) NSLayoutConstraint.activate([ - collectionView.heightAnchor.constraint(equalTo: view.heightAnchor), + collectionView.topAnchor.constraint(equalTo: view.topAnchor), collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor), collectionView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), collectionView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor), activityIndicator.widthAnchor.constraint(equalTo: view.widthAnchor), - activityIndicator.heightAnchor.constraint(equalTo: view.heightAnchor) + activityIndicator.heightAnchor.constraint(equalTo: view.heightAnchor), + emptyView.centerXAnchor.constraint(equalTo: view.centerXAnchor), + emptyView.centerYAnchor.constraint(equalTo: view.centerYAnchor), + emptyView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor, constant: -40) ]) setUpNavigationItem() } private func setUpNavigationItem() { switch mode { - case .keyword(let title): navigationItem.title = title.localized + case .keyword(let title, _): navigationItem.title = title.localized default: break } - let filterButton = UIBarButtonItem( - image: UIImage(systemName: "arrow.up.arrow.down.circle"), + let moreButton = UIBarButtonItem( + image: UIImage(systemName: "ellipsis.circle"), style: .plain, target: self, action: nil ) - filterButton.tintColor = .acNavigationBarTint - self.navigationItem.rightBarButtonItem = filterButton - filterButton.menu = createFilterAndSortMenu() + moreButton.tintColor = .acNavigationBarTint + navigationItem.rightBarButtonItem = moreButton + moreButton.menu = createMoreMenu() } - private func createFilterAndSortMenu() -> UIMenu { - let menu = UIMenu(title: "", options: .displayInline, children: createFilteringMenuChildren()) +} + +// MARK: - Menus +extension ItemsViewController { + + private func createMoreMenu() -> UIMenu { + let menu = UIMenu(title: "", options: .displayInline, children: createMoreMenuChildren()) menu.children.forEach { action in let currentMenu = Menu.transform(localized: action.title) - if self.currentSelected.keys.contains(currentMenu) { + if currentSelected.keys.contains(currentMenu) { let action = action as? UIAction action?.state = .on action?.attributes = .disabled @@ -229,16 +303,16 @@ class ItemsViewController: UIViewController { return menu } - private func createFilteringMenuChildren() -> [UIMenuElement] { + private func createMoreMenuChildren() -> [UIMenuElement] { let allAction = UIAction(title: Menu.all.title, handler: { [weak self] _ in self?.currentSelected = [Menu.all: Menu.all.title] - self?.navigationItem.rightBarButtonItem?.menu = self?.createFilterAndSortMenu() + self?.navigationItem.rightBarButtonItem?.menu = self?.createMoreMenu() }) if currentSelected[.all] != nil { allAction.state = .on allAction.attributes = .disabled } - let menuItems: [UIMenuElement] = [allAction] + [createSortMenu()] + createFilterMenu() + let menuItems: [UIMenuElement] = [allAction] + [createSortMenu()] + createFilterMenu() + [createCheckMenu()] selectedKeyword.accept(currentSelected) return menuItems } @@ -260,7 +334,7 @@ class ItemsViewController: UIViewController { } else { self?.currentSelected[.name] = nil } - self?.navigationItem.rightBarButtonItem?.menu = self?.createFilterAndSortMenu() + self?.navigationItem.rightBarButtonItem?.menu = self?.createMoreMenu() } let name = UIAction(title: Menu.name.title, handler: handler) let sell = UIAction(title: Menu.sell.title, handler: handler) @@ -290,7 +364,7 @@ class ItemsViewController: UIViewController { let menu = Menu.month self?.currentSelected[menu] = action.title self?.currentSelected[Menu.all] = nil - self?.navigationItem.rightBarButtonItem?.menu = self?.createFilterAndSortMenu() + self?.navigationItem.rightBarButtonItem?.menu = self?.createMoreMenu() } let monthActions = Array(1...12) .map { $0.description } @@ -310,4 +384,41 @@ class ItemsViewController: UIViewController { } return filterMenuList } + + private func createCheckMenu() -> UIMenu { + let allSelectAction = UIAction( + title: Menu.allSelect.title, + image: UIImage(systemName: "text.badge.checkmark") + ) { [weak self] action in + guard let self = self else { + return + } + self.showAlert(title: "Notice".localized, message: "Are you sure you want to check them all?".localized) + .filter { $0 == true } + .withUnretained(self) + .subscribe(onNext: { owner, _ in + owner.reactor.action.onNext(.selectedMenu(keywords: [.allSelect: ""])) + owner.selectedKeyword.accept(owner.selectedKeyword.value) + }).disposed(by: self.disposeBag) + self.navigationItem.rightBarButtonItem?.menu = self.createMoreMenu() + } + let resetAction = UIAction( + title: Menu.reset.title, + image: UIImage(systemName: "arrow.counterclockwise") + ) { [weak self] action in + guard let self = self else { + return + } + self.showAlert(title: "Notice".localized, message: "Are you sure you want to uncheck them all?".localized) + .filter { $0 == true } + .withUnretained(self) + .subscribe(onNext: { owner, _ in + owner.reactor.action.onNext(.selectedMenu(keywords: [.reset: ""])) + owner.selectedKeyword.accept(owner.selectedKeyword.value) + }).disposed(by: self.disposeBag) + self.navigationItem.rightBarButtonItem?.menu = self.createMoreMenu() + } + return UIMenu(title: "", options: .displayInline, children: [allSelectAction, resetAction]) + } + } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogCellReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogCellReactor.swift new file mode 100644 index 00000000..a03054e5 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogCellReactor.swift @@ -0,0 +1,73 @@ +// +// CatalogRowViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/05. +// + +import Foundation +import ReactorKit + +final class CatalogCellReactor: Reactor { + + enum Action { + case fetch + case check + } + + enum Mutation { + case setAcquired(_ isAcquired: Bool) + } + + struct State { + let item: Item + let category: Category + var isAcquired: Bool? + } + + let initialState: State + private let item: Item + private let category: Category + private let storage: ItemsStorage + + init( + item: Item, + category: Category, + state: State, + storage: ItemsStorage = CoreDataItemsStorage() + + ) { + self.item = item + self.category = category + self.initialState = state + self.storage = storage + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let collectedState = Items.shared.itemList + .take(1) + .withUnretained(self) + .compactMap { owner, items in + items[owner.currentState.category]?.contains(owner.item) + }.map { Mutation.setAcquired($0) } + return collectedState + + case .check: + HapticManager.shared.impact(style: .medium) + Items.shared.updateItem(item) + storage.update(item) + return .just(.setAcquired(currentState.isAcquired == true ? false : true)) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setAcquired(let isAcquired): + newState.isAcquired = isAcquired + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogCellViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogCellViewModel.swift deleted file mode 100644 index 266fae21..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogCellViewModel.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// CatalogRowViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/05. -// - -import Foundation -import RxSwift -import RxRelay - -final class CatalogCellViewModel { - - private let item: Item - private let category: Category - private let storage: ItemsStorage - - init( - item: Item, - category: Category, - storage: ItemsStorage = CoreDataItemsStorage() - - ) { - self.item = item - self.category = category - self.storage = storage - } - - struct Input { - let didTapCheck: Observable - } - - struct Output { - let isAcquired: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let isAcquired = BehaviorRelay(value: false) - - input.didTapCheck - .withUnretained(self) - .subscribe(onNext: { owner, _ in - HapticManager.shared.impact(style: .medium) - Items.shared.updateItem(owner.item) - owner.storage.update(owner.item) - }).disposed(by: disposeBag) - - Items.shared.itemList - .compactMap { $0[self.category] } - .subscribe(onNext: { items in - isAcquired.accept(items.contains(self.item)) - }).disposed(by: disposeBag) - - return Output( - isAcquired: isAcquired.asObservable() - ) - } - -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogReactor.swift new file mode 100644 index 00000000..0a037281 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogReactor.swift @@ -0,0 +1,69 @@ +// +// CatalogViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/04. +// + +import Foundation +import ReactorKit + +final class CatalogReactor: Reactor { + + enum Action { + case fetch + case selectedCategory(title: Category) + } + + enum Mutation { + case transition(CatalogCoordinator.Route) + case setCategories(_ categories: [(title: Category, count: Int)]) + case setLoadingState(_ isLoading: Bool) + } + + struct State { + var categories: [(title: Category, count: Int)] = [] + var isLoading: Bool = true + } + + let initialState: State + var coordinator: CatalogCoordinator + + init(coordinator: CatalogCoordinator, state: State = State()) { + self.coordinator = coordinator + self.initialState = state + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let categories = Items.shared.itemsCount + .map { itemsCount in Category.items().map { ($0, itemsCount[$0] ?? 0)} } + .map { Mutation.setCategories($0) } + let loadingState = Items.shared.isLoading + .map { Mutation.setLoadingState($0) } + + return .merge([ + categories, loadingState + ]) + + case .selectedCategory(let category): + return .just(.transition(.items(for: category))) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .transition(let route): + coordinator.transition(for: route) + + case .setCategories(let categories): + newState.categories = categories + + case .setLoadingState(let isLoading): + newState.isLoading = isLoading + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogViewModel.swift deleted file mode 100644 index ea34decf..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/CatalogViewModel.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// CatalogViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/04. -// - -import Foundation -import RxSwift -import RxRelay - -final class CatalogViewModel { - var coordinator: CatalogCoordinator? - - init(coordinator: CatalogCoordinator) { - self.coordinator = coordinator - } - - struct Input { - let selectedCategory: Observable<(title: Category, count: Int)> - } - - struct Output { - let catagories: Observable<[(title: Category, count: Int)]> - let isLoading: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let catagories = BehaviorRelay<[(title: Category, count: Int)]>(value: []) - let isLoading = BehaviorRelay(value: true) - - Items.shared.itemsCount - .subscribe(onNext: { itemsCount in - let newCategories = Category.items().map { ($0, itemsCount[$0] ?? 0)} - catagories.accept(newCategories) - }).disposed(by: disposeBag) - - Items.shared.isLoading - .subscribe(onNext: { value in - isLoading.accept(value) - }).disposed(by: disposeBag) - - input.selectedCategory - .map { $0.title } - .observe(on: MainScheduler.asyncInstance) - .subscribe(onNext: { category in - self.coordinator?.transition(for: .items(for: category)) - }).disposed(by: disposeBag) - - return Output( - catagories: catagories.asObservable(), - isLoading: isLoading.asObservable() - ) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemDetailReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemDetailReactor.swift new file mode 100644 index 00000000..e0fd14a2 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemDetailReactor.swift @@ -0,0 +1,109 @@ +// +// ItemDetailViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/07. +// + +import Foundation +import ReactorKit + +final class ItemDetailReactor: Reactor { + + enum Action { + case fetch + case check + case didTapKeyword(_ keyword: String) + case play + } + + enum Mutation { + case setAcquired(_ isAcquired: Bool) + case updateAcquired + case showKeywordList(title: String, keyword: Keyword) + case showMusicPlayer + } + + struct State { + let item: Item + var isAcquired: Bool = false + } + + let initialState: State + private let storage: ItemsStorage + private(set) var coordinator: Coordinator? + + init(item: Item, coordinator: Coordinator?, storage: ItemsStorage = CoreDataItemsStorage()) { + self.storage = storage + self.coordinator = coordinator + self.initialState = State(item: item) + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let collectedState = Items.shared.itemList + .take(1) + .withUnretained(self) + .compactMap { owner, items in + items[owner.currentState.item.category] + }.withUnretained(self).map { owner, items -> Mutation in Mutation.setAcquired(items.contains(owner.currentState.item)) + } + return collectedState + + case .check: + HapticManager.shared.impact(style: .medium) + Items.shared.updateItem(currentState.item) + storage.update(currentState.item) + return .just(.updateAcquired) + + case .didTapKeyword(let value): + var keyword: Keyword = .tag + if Color.allCases.map({ $0.rawValue }).contains(value) { + keyword = .color + } else if Concept.allCases.map({ $0.rawValue }).contains(value) { + keyword = .concept + } else { + keyword = .tag + } + return .just(.showKeywordList(title: value, keyword: keyword)) + + case .play: + return .just(.showMusicPlayer) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setAcquired(let isAcquired): + newState.isAcquired = isAcquired + + case .updateAcquired: + newState.isAcquired = newState.isAcquired == true ? false : true + + case .showKeywordList(let title, let keyword): + if let coordinator = coordinator as? CatalogCoordinator { + coordinator.transition(for: .keyword(title: title, keyword: keyword)) + } else if let coordinator = coordinator as? DashboardCoordinator { + coordinator.transition(for: .keyword(title: title, keyword: keyword)) + } else if let coordinator = coordinator as? CollectionCoordinator { + coordinator.transition(for: .keyword(title: title, keyword: keyword)) + } + + case .showMusicPlayer: + if let coordinator = coordinator as? CatalogCoordinator { + let coordinator = coordinator.parentCoordinator as? AppCoordinator + coordinator?.showMusicPlayer() + } else if let coordinator = coordinator as? DashboardCoordinator { + let coordinator = coordinator.parentCoordinator as? AppCoordinator + coordinator?.showMusicPlayer() + } else if let coordinator = coordinator as? CollectionCoordinator { + let coordinator = coordinator.parentCoordinator as? AppCoordinator + coordinator?.showMusicPlayer() + } + MusicPlayerManager.shared.choice(currentState.item) + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemDetailViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemDetailViewModel.swift deleted file mode 100644 index aeec0142..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemDetailViewModel.swift +++ /dev/null @@ -1,92 +0,0 @@ -// -// ItemDetailViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/07. -// - -import Foundation -import RxSwift -import RxRelay - -final class ItemDetailViewModel { - - let item: Item - private let storage: ItemsStorage - private(set) var coordinator: Coordinator? - - init(item: Item, coordinator: Coordinator?, storage: ItemsStorage = CoreDataItemsStorage()) { - self.item = item - self.storage = storage - self.coordinator = coordinator - } - - struct Input { - let didTapCheck: Observable - let didTapKeyword: Observable? - let didTapPlay: Observable? - } - - struct Output { - let isAcquired: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let isAcquired = BehaviorRelay(value: false) - - input.didTapCheck - .withUnretained(self) - .subscribe(onNext: { owner, _ in - HapticManager.shared.impact(style: .medium) - Items.shared.updateItem(owner.item) - owner.storage.update(owner.item) - }).disposed(by: disposeBag) - - input.didTapKeyword? - .subscribe(onNext: { value in - var keyword: Keyword? - if Color.allCases.map({ $0.rawValue }).contains(value) { - keyword = .color - } else if Concept.allCases.map({ $0.rawValue }).contains(value) { - keyword = .concept - } else { - keyword = .tag - } - keyword.flatMap { keyword in - if let coordinator = self.coordinator as? CatalogCoordinator { - coordinator.transition(for: .keyword(title: value, keyword: keyword)) - } else if let coordinator = self.coordinator as? DashboardCoordinator { - coordinator.transition(for: .keyword(title: value, keyword: keyword)) - } else if let coordinator = self.coordinator as? CollectionCoordinator { - coordinator.transition(for: .keyword(title: value, keyword: keyword)) - } - } - }).disposed(by: disposeBag) - - input.didTapPlay? - .subscribe(onNext: { _ in - if let coordinator = self.coordinator as? CatalogCoordinator { - let coordinator = coordinator.parentCoordinator as? AppCoordinator - coordinator?.showMusicPlayer() - } else if let coordinator = self.coordinator as? DashboardCoordinator { - let coordinator = coordinator.parentCoordinator as? AppCoordinator - coordinator?.showMusicPlayer() - } else if let coordinator = self.coordinator as? CollectionCoordinator { - let coordinator = coordinator.parentCoordinator as? AppCoordinator - coordinator?.showMusicPlayer() - } - MusicPlayerManager.shared.choice(self.item) - }).disposed(by: disposeBag) - - Items.shared.itemList - .compactMap { $0[self.item.category] } - .subscribe(onNext: { items in - isAcquired.accept(items.contains(self.item)) - }).disposed(by: disposeBag) - - return Output( - isAcquired: isAcquired.asObservable() - ) - } - -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemsReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemsReactor.swift new file mode 100644 index 00000000..2a01cf63 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemsReactor.swift @@ -0,0 +1,308 @@ +// +// ItemsViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/05. +// + +import Foundation +import ReactorKit + +final class ItemsReactor: Reactor { + + enum Mode: Equatable { + case user + case all + case keyword(title: String, category: Keyword) + } + + enum Action { + case fetch + case search(text: String) + case selectedScope(_ title: String) + case selectedMenu(keywords: [ItemsViewController.Menu: String]) + case selectedItem(indexPath: IndexPath) + } + + enum Mutation { + case setHemisphere(_ hemisphere: Hemisphere) + case setAllItems(_ items: [Item]) + case setItems(_ items: [Item]) + case setLoadingState(_ isLoading: Bool) + case setUserItems(collected: [Item], notCollected: [Item]) + case setScope(_ scope: ItemsViewController.SearchScope) + case showDetail(_ item: Item) + } + + struct State { + let category: Category + var items: [Item] = [] + var isLoading: Bool = true + } + + let category: Category + let mode: Mode + let initialState: State + private let coordinator: Coordinator? + private let storage: ItemsStorage + + private var currentKeywords: [ItemsViewController.Menu: String] = [:] + private var lastSearchKeyword: String = "" + private var currentScope: ItemsViewController.SearchScope = .all + private var currentHemisphere: Hemisphere = .north + private var allItems: [Item] = [] + private var collectedItem: [Item] = [] + private var notCollectedItem: [Item] = [] + + init(category: Category, coordinator: Coordinator?, mode: Mode = .all, storage: ItemsStorage = CoreDataItemsStorage()) { + self.category = category + self.initialState = State(category: category) + self.coordinator = coordinator + self.mode = mode + self.storage = storage + } + + convenience init (coordinator: Coordinator?, mode: Mode) { + self.init( + category: .housewares, + coordinator: coordinator, mode: mode + ) + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let newAllItems = setUpItems().map { Mutation.setAllItems($0) } + let collectedItems = setUpUserItem() + let notCollectedIems = setUpUserItem() + .withUnretained(self) + .map { owner, items in owner.setUpNotCollected(items) } + let userItems = Observable.combineLatest(collectedItems, notCollectedIems) + .map { Mutation.setUserItems(collected: $0.0, notCollected: $0.1) } + let loadingState = Items.shared.isLoading.map { Mutation.setLoadingState($0) } + let hemisphere = Items.shared.userInfo.compactMap { $0?.hemisphere } + .map { Mutation.setHemisphere($0)} + + return .merge([ + loadingState, hemisphere, newAllItems, userItems + ]) + + case .search(let text): + lastSearchKeyword = text.lowercased() + guard text != "" else { + return currentItems() + .withUnretained(self) + .map { owner, items in owner.filtered(items: items, keywords: owner.currentKeywords) } + .map { .setItems($0) } + } + return currentItems() + .withUnretained(self) + .map { owner, items -> [Item] in + owner.filtered( + items: owner.search(items: items, text: text.lowercased()), + keywords: owner.currentKeywords + ) + }.map { .setItems($0)} + + case .selectedScope(let title): + guard let currentScope = ItemsViewController.SearchScope.transform(title) + .flatMap({ ItemsViewController.SearchScope(rawValue: $0) }) else { + return .empty() + } + return .just(.setScope(currentScope)) + + case .selectedMenu(let keywords): + currentKeywords = keywords + return currentItems() + .withUnretained(self) + .map { owner, items -> [Item] in + owner.filtered( + items: owner.search(items: items, text: owner.lastSearchKeyword), + keywords: keywords + ) + }.map { .setItems($0)} + + case .selectedItem(let indexPath): + guard let item = currentState.items[safe: indexPath.item] else { + return .empty() + } + return .just(.showDetail(item)) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setItems(let items): + newState.items = items + + case .setHemisphere(let hemisphere): + currentHemisphere = hemisphere + + case .setAllItems(let items): + if currentScope == .all { + newState.items = items + } + allItems = items + if mode == .user && allItems.isEmpty { + let coordinator = coordinator as? CollectionCoordinator + coordinator?.transition(for: .pop) + break + } + + case .setUserItems(let collectedItems, let notCollectedItems): + if currentScope == .collected { + newState.items = filtered( + items: search(items: collectedItems, text: lastSearchKeyword), + keywords: currentKeywords + ) + } + if currentScope == .notCollected { + newState.items = filtered( + items: search(items: notCollectedItems, text: lastSearchKeyword), + keywords: currentKeywords + ) + } + collectedItem = collectedItems + notCollectedItem = notCollectedItems + + case .setScope(let scope): + currentScope = scope + + case .showDetail(let item): + if let coordinator = coordinator as? CatalogCoordinator { + coordinator.transition(for: .itemDetail(item)) + } else if let coordinator = coordinator as? CollectionCoordinator { + coordinator.transition(for: .itemDetail(item: item)) + } else if let coordinator = coordinator as? DashboardCoordinator { + coordinator.transition(for: .itemDetail(item: item)) + } + case .setLoadingState(let isLoading): + newState.isLoading = isLoading + + } + return newState + } + + private func currentItems() -> Observable<[Item]> { + guard allItems.isEmpty == false else { + return Observable.empty() + } + switch currentScope { + case .all: return .just(allItems) + case .collected: return .just(collectedItem) + case .notCollected: return .just(notCollectedItem) + } + } + + private func filtered( + items: [Item], + keywords: [ItemsViewController.Menu: String] + ) -> [Item] { + guard currentKeywords.isEmpty == false else { + return items + } + currentKeywords = keywords + var filteredItems = items + let keywords = keywords.sorted { $0.key.rawValue < $1.key.rawValue } + for (key, value) in keywords { + switch key { + case .all: + continue + case .month: + let month = Int(value) ?? 1 + filteredItems = items.filter { + currentHemisphere == .north ? + ($0.hemispheres?.north.monthsArray ?? []).contains(month) : + ($0.hemispheres?.south.monthsArray ?? []).contains(month) + } + case .name: + filteredItems = (filteredItems.isEmpty ? items : filteredItems).sorted { + value == ItemsViewController.Menu.ascending ? + $0.translations.localizedName() < $1.translations.localizedName() : + $0.translations.localizedName() > $1.translations.localizedName() + } + case .sell: + filteredItems = (filteredItems.isEmpty ? items : filteredItems).sorted { + value == ItemsViewController.Menu.ascending ? + $0.sell < $1.sell : $0.sell > $1.sell + } + case .allSelect: + Items.shared.allCheckItem(category: self.category) + storage.updates(self.notCollectedItem.isEmpty ? currentState.items : self.notCollectedItem) + case .reset: + Items.shared.resetCheckItem(category: self.category) + storage.reset(category: self.category) + } + } + return filteredItems + } + + private func search(items: [Item], text: String) -> [Item] { + guard lastSearchKeyword != "" else { + return items + } + return items + .filter { + let villagerName = $0.translations.localizedName().lowercased() + let isChosungCheck = text.isChosung + if isChosungCheck { + return (villagerName.contains(text) || villagerName.chosung.contains(text)) + } else { + return villagerName.contains(text) + } + } + } + + private func setUpItems() -> Observable<[Item]> { + switch mode { + case .all: + return Items.shared.categoryList + .withUnretained(self) + .compactMap { owner, items in + items[owner.currentState.category] + } + + case .user: + return Items.shared.itemList + .withUnretained(self) + .map { owenr, items in + items[owenr.currentState.category] ?? [] + } + + case .keyword(let title, let category): + let filteredData = Items.shared.itemFilter(keyword: title, category: category) + return .just(filteredData) + } + } + + private func setUpUserItem() -> Observable<[Item]> { + switch mode { + case .all: + return Items.shared.itemList + .withUnretained(self) + .map { owenr, items in + items[owenr.currentState.category] ?? [] + } + + case .keyword(let title, _): + return Items.shared.itemList + .map { $0.values.flatMap { $0.filter { $0.keyword.contains(title) } } } + + default: + return .empty() + } + } + + private func setUpNotCollected(_ items: [Item]) -> [Item] { + var notCollectedItems = [Item]() + if items.isEmpty { + notCollectedItems = allItems + } else { + notCollectedItems = Array( + Set(allItems).symmetricDifference(Set(items)) + ).sorted(by: { $0.name < $1.name }) + } + return notCollectedItems + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemsViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemsViewModel.swift deleted file mode 100644 index c4e147bf..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/ViewModels/ItemsViewModel.swift +++ /dev/null @@ -1,255 +0,0 @@ -// -// ItemsViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/05. -// - -import Foundation -import RxSwift -import RxRelay - -final class ItemsViewModel { - enum Mode: Equatable { - case user - case all - case keyword(title: String, category: Keyword) - } - - let category: Category - let mode: Mode - private let coordinator: Coordinator? - - init(category: Category, coordinator: Coordinator?, mode: Mode = .all) { - self.category = category - self.coordinator = coordinator - self.mode = mode - } - - convenience init (coordinator: Coordinator?, mode: Mode) { - self.init(category: .housewares, coordinator: coordinator, mode: mode) - } - - struct Input { - let searchBarText: Observable - let didSelectedMenuKeyword: Observable<[ItemsViewController.Menu: String]> - let itemSelected: Observable - let seletedScopeButton: Observable - } - struct Output { - let category: Observable - let items: Observable<[Item]> - let isLoading: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let items = BehaviorRelay<[Item]>(value: []) - var allItems = [Item]() - var collectedItems = [Item]() - var notCollectedItems = [Item]() - var currentHemisphere = Hemisphere.north - let currentTap = BehaviorRelay(value: .all) - let currentFilter = BehaviorRelay<[ItemsViewController.Menu: String]>(value: [:]) - let currentSearchBarText = BehaviorRelay(value: "") - let isLoading = BehaviorRelay(value: true) - - Items.shared.userInfo - .compactMap { $0 } - .subscribe(onNext: { userInfo in - currentHemisphere = userInfo.hemisphere - }).disposed(by: disposeBag) - - input.seletedScopeButton - .compactMap { ItemsViewController.SearchScope.transform($0) } - .compactMap { ItemsViewController.SearchScope(rawValue: $0) } - .subscribe(onNext: { seletedScope in - currentTap.accept(seletedScope) - }).disposed(by: disposeBag) - - input.searchBarText - .compactMap { $0 } - .subscribe(onNext: { text in - currentSearchBarText.accept(text) - }).disposed(by: disposeBag) - - currentSearchBarText - .subscribe(onNext: { text in - guard text != "" else { - switch currentTap.value { - case .all: items.accept(allItems) - case .notCollected: items.accept(notCollectedItems) - case .collected: items.accept(collectedItems) - } - return - } - isLoading.accept(true) - var filteredItems = [Item]() - switch currentTap.value { - case .all: filteredItems = allItems - case .notCollected: filteredItems = notCollectedItems - case .collected: filteredItems = collectedItems - } - let text = text.lowercased() - filteredItems = filteredItems - .filter { - let itemName = $0.translations.localizedName().lowercased() - let isChosungCheck = text.isChosung - if isChosungCheck { - return (itemName.contains(text) || itemName.chosung.contains(text)) - } else { - return itemName.contains(text) - } - } - items.accept(filteredItems) - isLoading.accept(false) - }).disposed(by: disposeBag) - - input.didSelectedMenuKeyword - .subscribe(onNext: { keywords in - currentFilter.accept(keywords) - }).disposed(by: disposeBag) - - currentFilter - .subscribe(onNext: { keywords in - isLoading.accept(true) - var currentItems = [Item]() - switch currentTap.value { - case .all: currentItems = allItems - case .notCollected: currentItems = notCollectedItems - case .collected: currentItems = collectedItems - } - var sortedItems = currentItems - let keywords = keywords.sorted { $0.key.rawValue < $1.key.rawValue } - for (key, value) in keywords { - switch key { - case .all: - continue - case .month: - let month = Int(value) ?? 1 - let filteredData = sortedItems.filter { - currentHemisphere == .north ? - ($0.hemispheres?.north.monthsArray ?? []).contains(month) : - ($0.hemispheres?.south.monthsArray ?? []).contains(month) - } - sortedItems = filteredData - case .name: - let filteredData = sortedItems.sorted { - value == ItemsViewController.Menu.ascending ? - $0.translations.localizedName() < $1.translations.localizedName() : - $0.translations.localizedName() > $1.translations.localizedName() - } - sortedItems = filteredData - case .sell: - let filteredData = sortedItems.sorted { - value == ItemsViewController.Menu.ascending ? - $0.sell < $1.sell : $0.sell > $1.sell - } - sortedItems = filteredData - } - } - if currentSearchBarText.value != "" { - let text = currentSearchBarText.value.lowercased() - sortedItems = sortedItems.filter { - let itemName = $0.translations.localizedName().lowercased() - let isChosungCheck = text.isChosung - if isChosungCheck { - return (itemName.contains(text) || itemName.chosung.contains(text)) - } else { - return itemName.contains(text) - } - } - } - items.accept(sortedItems) - isLoading.accept(false) - }).disposed(by: disposeBag) - - input.itemSelected - .compactMap { items.value[safe: $0.item] } - .subscribe(onNext: { item in - if let coordinator = self.coordinator as? CatalogCoordinator { - coordinator.transition(for: .itemDetail(item)) - } else if let coordinator = self.coordinator as? CollectionCoordinator { - coordinator.transition(for: .itemDetail(item: item)) - } else if let coordinator = self.coordinator as? DashboardCoordinator { - coordinator.transition(for: .itemDetail(item: item)) - } - }).disposed(by: disposeBag) - - setUpItems(disposeBag) - .subscribe(onNext: { newItems in - guard newItems.isEmpty == false else { - let coordinator = self.coordinator as? CollectionCoordinator - coordinator?.transition(for: .pop) - return - } - isLoading.accept(true) - items.accept(newItems) - allItems = newItems - isLoading.accept(false) - }).disposed(by: disposeBag) - - setUpUserItems(disposeBag)? - .subscribe(onNext: { userItems in - collectedItems = userItems - if userItems.isEmpty { - notCollectedItems = allItems - } else { - let notCollected = Array( - Set(allItems).symmetricDifference(Set(collectedItems)) - ).sorted(by: { $0.name < $1.name }) - notCollectedItems = notCollected - } - currentSearchBarText.accept(currentSearchBarText.value) - currentFilter.accept(currentFilter.value) - }).disposed(by: disposeBag) - - return Output( - category: Observable.just(category), - items: items.asObservable(), - isLoading: isLoading.asObservable() - ) - } - - private func setUpItems(_ disposeBag: DisposeBag) -> Observable<[Item]> { - let items = BehaviorRelay<[Item]>(value: []) - switch mode { - case .all: - Items.shared.categoryList - .compactMap { $0[self.category] } - .subscribe(onNext: { newItems in - items.accept(newItems) - }).disposed(by: disposeBag) - case .user: - Items.shared.itemList - .compactMap { $0[self.category] } - .subscribe(onNext: { newItems in - items.accept(newItems) - }).disposed(by: disposeBag) - case .keyword(let title, let category): - let filteredData = Items.shared.itemFilter(keyword: title, category: category) - items.accept(filteredData) - } - return items.asObservable() - } - - private func setUpUserItems(_ disposeBag: DisposeBag) -> Observable<[Item]>? { - let items = BehaviorRelay<[Item]>(value: []) - switch mode { - case .all: - Items.shared.itemList - .compactMap { $0[self.category] } - .subscribe(onNext: { userItems in - items.accept(userItems) - }).disposed(by: disposeBag) - case .keyword(let title, _): - Items.shared.itemList - .compactMap { $0.values.flatMap { $0.filter { $0.keyword.contains(title) } } } - .subscribe(onNext: { userItems in - items.accept(userItems) - }).disposed(by: disposeBag) - default: return nil - } - return items.asObservable() - } - -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CatalogCell.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CatalogCell.swift index 3c09c472..6536b70b 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CatalogCell.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/CatalogCell.swift @@ -10,7 +10,6 @@ import RxSwift class CatalogCell: UICollectionViewCell { - private var viewModel: CatalogCellViewModel! private var disposeBag = DisposeBag() @IBOutlet private weak var backgroundStackView: UIStackView! @@ -62,20 +61,30 @@ class CatalogCell: UICollectionViewCell { } } - private func bind() { - let input = CatalogCellViewModel.Input(didTapCheck: checkButton.rx.tap.asObservable()) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + private func bind(reactor: CatalogCellReactor) { + Observable.just(CatalogCellReactor.Action.fetch) + .bind(to: reactor.action) + .disposed(by: disposeBag) - output.isAcquired + checkButton.rx.tap + .map { CatalogCellReactor.Action.check } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + reactor.state.map { $0.isAcquired } + .compactMap { $0 } .observe(on: MainScheduler.instance) .withUnretained(self) .subscribe(onNext: { owner, isAcquired in let config = UIImage.SymbolConfiguration(font: .preferredFont(forTextStyle: .title3)) - if isAcquired { - owner.checkButton.setImage(UIImage(systemName: "checkmark.seal.fill", withConfiguration: config), for: .normal) - } else { - owner.checkButton.setImage(UIImage(systemName: "checkmark.seal", withConfiguration: config), for: .normal) - } + owner.checkButton.setImage( + UIImage( + systemName: isAcquired ? "checkmark.seal.fill" : "checkmark.seal", + withConfiguration: config + ), + for: .normal + ) }).disposed(by: disposeBag) } } @@ -83,10 +92,9 @@ class CatalogCell: UICollectionViewCell { extension CatalogCell { func setUp(_ item: Item) { - viewModel = CatalogCellViewModel(item: item, category: item.category) setUpIconImage(item) nameLabel.text = item.translations.localizedName() - bind() + bind(reactor: CatalogCellReactor(item: item, category: item.category, state: .init(item: item, category: item.category))) var priceView: ItemBellsView switch item.category { case .bugs, .fishes, .seaCreatures: diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemKeywordView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemKeywordView.swift index bb686459..c7724808 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemKeywordView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemKeywordView.swift @@ -38,7 +38,7 @@ class ItemKeywordView: UIView { private func configure(in item: Item) { addSubviews(collectionView) - let heightConstraint = self.collectionView.heightAnchor.constraint(equalToConstant: 50) + let heightConstraint = collectionView.heightAnchor.constraint(equalToConstant: 50) heightConstraint.priority = .defaultHigh NSLayoutConstraint.activate([ diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemVariantsView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemVariantsView.swift index 5d7e77ee..abed1fe2 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemVariantsView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Catalog/Views/ItemVariantsView.swift @@ -42,7 +42,7 @@ class ItemVariantsView: UIView { private func configure() { addSubviews(collectionView) - let heightConstraint = self.collectionView.heightAnchor.constraint(equalToConstant: 110) + let heightConstraint = collectionView.heightAnchor.constraint(equalToConstant: 110) heightConstraint.priority = .defaultHigh NSLayoutConstraint.activate([ @@ -57,8 +57,9 @@ class ItemVariantsView: UIView { private func setUpItems(by variations: [Variant]) { Observable.just(variations) - .bind(to: collectionView.rx.items(cellIdentifier: VariantCell.className, cellType: VariantCell.self)) { _, item, cell in - let name = self.mode == .color ? item.variantTranslations?.localizedName() : item.patternTranslations?.localizedName() + .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() cell.setUp(imageURL: item.image, name: name) }.disposed(by: disposeBag) diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Coordinator/CollectionCoordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Coordinator/CollectionCoordinator.swift index 08b68a01..9a92275c 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Coordinator/CollectionCoordinator.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/Coordinator/CollectionCoordinator.swift @@ -9,7 +9,7 @@ import UIKit final class CollectionCoordinator: Coordinator { enum Route { - case items(category: Category, mode: ItemsViewModel.Mode) + case items(category: Category, mode: ItemsReactor.Mode) case itemDetail(item: Item) case keyword(title: String, keyword: Keyword) case pop @@ -27,7 +27,7 @@ final class CollectionCoordinator: Coordinator { func start() { let collectionVC = CollectionViewController() - collectionVC.bind(to: CollectionViewModel(coordinator: self)) + collectionVC.bind(to: CollectionReactor(coordinator: self)) rootViewController.addChild(collectionVC) } @@ -35,17 +35,17 @@ final class CollectionCoordinator: Coordinator { switch route { case .items(let category, let mode): let viewController = ItemsViewController() - viewController.bind(to: ItemsViewModel(category: category, coordinator: self, mode: mode)) + viewController.bind(to: ItemsReactor(category: category, coordinator: self, mode: mode)) let navigationController = rootViewController.visibleViewController?.navigationController as? UINavigationController navigationController?.pushViewController(viewController, animated: true) case .itemDetail(let item): let viewController = ItemDetailViewController() - viewController.bind(to: ItemDetailViewModel(item: item, coordinator: self)) + viewController.bind(to: ItemDetailReactor(item: item, coordinator: self)) let navigationController = rootViewController.visibleViewController?.navigationController as? UINavigationController navigationController?.pushViewController(viewController, animated: true) case .keyword(let title, let keyword): let viewController = ItemsViewController() - viewController.bind(to: ItemsViewModel(coordinator: self, mode: .keyword(title: title, category: keyword))) + viewController.bind(to: ItemsReactor(coordinator: self, mode: .keyword(title: title, category: keyword))) rootViewController.pushViewController(viewController, animated: true) case .pop: let navigationController = rootViewController.visibleViewController?.navigationController as? UINavigationController diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionProgressViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionProgressViewController.swift index 29ac0af0..07233a80 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionProgressViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionProgressViewController.swift @@ -40,13 +40,14 @@ class CollectionProgressViewController: UIViewController { navigationItem.title = "Collection Progress".localized } - func bind(to viewModel: CollectionProgressViewModel) { - let input = CollectionProgressViewModel.Input( - selectedCategory: tableView.rx.modelSelected(Category.self).asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + func bind(to reactor: CollectionProgressReactor) { + tableView.rx.modelSelected(Category.self) + .map { CollectionProgressReactor.Action.selectedCategory($0) } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) - output.items + reactor.state.map { $0.items } .bind(to: tableView.rx.items(cellIdentifier: ItemProgressRow.className, cellType: ItemProgressRow.self)) { _, category, cell in cell.setUp(for: category) }.disposed(by: disposeBag) diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionViewController.swift index 07286449..6f8e6ba3 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewControllers/CollectionViewController.swift @@ -19,21 +19,10 @@ class CollectionViewController: UIViewController { return tableView }() - private lazy var emptyView: UIStackView = { - let stackView = UIStackView(axis: .vertical, alignment: .center, distribution: .fill, spacing: 8) - let titleLabel = UILabel( - text: "There are no collectibles.".localized, - font: .preferredFont(for: .body, weight: .semibold), - color: .acText.withAlphaComponent(0.7) - ) - let subTitleLabel = UILabel( - text: "when you check some items, they'll be displayed here.".localized, - font: .preferredFont(forTextStyle: .footnote), - color: .acText.withAlphaComponent(0.7) - ) - stackView.addArrangedSubviews(titleLabel, subTitleLabel) - return stackView - }() + private lazy var emptyView: EmptyView = EmptyView( + title: "There are no collectibles.".localized, + description: "when you check some items, they'll be displayed here.".localized + ) override func viewDidLoad() { super.viewDidLoad() @@ -57,14 +46,21 @@ class CollectionViewController: UIViewController { navigationItem.title = "Collection".localized } - func bind(to viewModel: CollectionViewModel) { + func bind(to reactor: CollectionReactor) { setUpNavigationItem() - let input = CollectionViewModel.Input( - selectedCategory: tableView.rx.modelSelected((title: Category, count: Int).self).asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) - output.catagories + self.rx.viewDidLoad + .map { CollectionReactor.Action.fetch } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + tableView.rx.modelSelected((title: Category, count: Int).self) + .map { CollectionReactor.Action.selectedCategory(title: $0.title) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + reactor.state.map { $0.catagories } .bind(to: tableView.rx.items(cellIdentifier: CategoryRow.className, cellType: CategoryRow.self)) { _, item, cell in cell.setUp( iconName: item.title.iconName, @@ -72,15 +68,16 @@ class CollectionViewController: UIViewController { itemCount: item.count ) }.disposed(by: disposeBag) - - output.catagories + + reactor.state.map { $0.catagories } .map { !$0.isEmpty } .bind(to: emptyView.rx.isHidden) .disposed(by: disposeBag) tableView.rx.itemSelected - .subscribe(onNext: { indexPath in - self.tableView.deselectRow(at: indexPath, animated: true) + .withUnretained(self) + .subscribe(onNext: { owner, indexPath in + owner.tableView.deselectRow(at: indexPath, animated: true) }).disposed(by: disposeBag) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionProgressReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionProgressReactor.swift new file mode 100644 index 00000000..46f742de --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionProgressReactor.swift @@ -0,0 +1,47 @@ +// +// CollectionProgressViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/10. +// + +import Foundation +import ReactorKit + +final class CollectionProgressReactor: Reactor { + + enum Action { + case selectedCategory(_ category: Category) + } + + enum Mutation { + case transition(DashboardCoordinator.Route) + } + + struct State { + let items: [Category] = Category.items() + } + + let initialState: State + let coordinator: DashboardCoordinator + + init(coordinator: DashboardCoordinator, state: State = State()) { + self.coordinator = coordinator + self.initialState = state + } + + func mutate(action: Action) -> Observable { + switch action { + case .selectedCategory(let category): + return .just(.transition(.item(category: category))) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + switch mutation { + case .transition(let route): + coordinator.transition(for: route) + } + return state + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionProgressViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionProgressViewModel.swift deleted file mode 100644 index c984ad7f..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionProgressViewModel.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// CollectionProgressViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/10. -// - -import Foundation -import RxSwift -import RxRelay - -final class CollectionProgressViewModel { - let coordinator: DashboardCoordinator - - init(coordinator: DashboardCoordinator) { - self.coordinator = coordinator - } - - struct Input { - let selectedCategory: Observable - } - - struct Output { - let items: Observable<[Category]> - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - input.selectedCategory - .observe(on: MainScheduler.instance) - .subscribe(onNext: { category in - self.coordinator.transition(for: .item(category: category)) - }).disposed(by: disposeBag) - - return Output(items: Observable.just(Category.items())) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionReactor.swift new file mode 100644 index 00000000..28432061 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionReactor.swift @@ -0,0 +1,65 @@ +// +// CollectionViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/10. +// + +import Foundation +import ReactorKit + +final class CollectionReactor: Reactor { + + enum Action { + case fetch + case selectedCategory(title: Category) + } + + enum Mutation { + case setCategories(_ categories: [(title: Category, count: Int)]) + case transition(CollectionCoordinator.Route) + } + + struct State { + var catagories: [(title: Category, count: Int)] = [] + } + + let initialState: State + let coordinator: CollectionCoordinator + + init(coordinator: CollectionCoordinator, state: State = State()) { + self.coordinator = coordinator + self.initialState = state + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let categories = Items.shared.itemList + .map { items -> Mutation in + let categoryList = items.keys.sorted { $0.rawValue < $1.rawValue } + var newCategories = [(title: Category, count: Int)]() + for category in categoryList where items[category]?.count != .zero { + newCategories.append((category, items[category]?.count ?? 0)) + } + return Mutation.setCategories(newCategories) + } + return categories + + case .selectedCategory(let category): + return .just(Mutation.transition(.items(category: category, mode: .user))) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setCategories(let categories): + newState.catagories = categories + + case .transition(let route): + coordinator.transition(for: route) + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionViewModel.swift deleted file mode 100644 index c30da06f..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Collection/ViewModels/CollectionViewModel.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// CollectionViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/10. -// - -import Foundation -import RxSwift -import RxRelay - -final class CollectionViewModel { - var coordinator: CollectionCoordinator? - - init(coordinator: CollectionCoordinator) { - self.coordinator = coordinator - } - - struct Input { - let selectedCategory: Observable<(title: Category, count: Int)> - } - - struct Output { - let catagories: Observable<[(title: Category, count: Int)]> - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let categories = BehaviorRelay<[(title: Category, count: Int)]>(value: []) - - Items.shared.itemList - .subscribe(onNext: { items in - let categoryList = items.keys.sorted { $0.rawValue < $1.rawValue } - var newCategories = [(title: Category, count: Int)]() - for category in categoryList where items[category]?.count != .zero { - newCategories.append((category, items[category]?.count ?? 0)) - } - categories.accept(newCategories) - }).disposed(by: disposeBag) - - input.selectedCategory - .map { $0.title } - .observe(on: MainScheduler.asyncInstance) - .subscribe(onNext: { category in - self.coordinator?.transition(for: .items(category: category, mode: .user)) - }).disposed(by: disposeBag) - - return Output(catagories: categories.asObservable()) - } - -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/UserInfoStorage/UserInfoStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/UserInfoStorage/UserInfoStorage.swift deleted file mode 100644 index dea7af76..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/UserInfoStorage/UserInfoStorage.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// UserInfoStorage.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/10. -// - -import Foundation - -protocol UserInfoStorage { - func fetchUserInfo(completion: @escaping (Result) -> Void) - func updateUserInfo(_ userInfo: UserInfo, completion: @escaping (Result) -> Void) - func resetUserInfo() -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/PreferencesViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/PreferencesViewController.swift deleted file mode 100644 index 151b82b8..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/PreferencesViewController.swift +++ /dev/null @@ -1,107 +0,0 @@ -// -// PreferencesViewController.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/16. -// - -import UIKit -import RxSwift - -class PreferencesViewController: UIViewController { - - private let currentHemisphere = BehaviorSubject(value: nil) - private let currentFruit = BehaviorSubject(value: nil) - private let disposeBag = DisposeBag() - - private lazy var settingSection = PreferencesView() - private lazy var sectionsScrollView: SectionsScrollView = SectionsScrollView( - SectionView(title: "Island".localized, iconName: "leaf.fill", contentView: settingSection) - ) - - private lazy var cancelButton: UIBarButtonItem = { - return .init( - image: UIImage(systemName: "xmark.app.fill"), - style: .plain, - target: self, - action: nil - ) - }() - - override func viewDidLoad() { - super.viewDidLoad() - setUpViews() - } - - private func setUpViews() { - view.backgroundColor = .acBackground - self.navigationItem.title = "Preferences".localized - navigationItem.largeTitleDisplayMode = .never - navigationItem.leftBarButtonItem = cancelButton - - view.addSubviews(sectionsScrollView) - - NSLayoutConstraint.activate([ - sectionsScrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), - sectionsScrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), - sectionsScrollView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), - sectionsScrollView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor) - ]) - } - - func bind(to viewModel: PreferencesViewModel) { - let input = PreferencesViewModel.Input( - islandNameText: settingSection.islandNameObservable, - userNameText: settingSection.userNameObservable, - hemisphereButtonTitle: currentHemisphere.asObservable(), - startingFruitButtonTitle: currentFruit.asObservable(), - didTapCancel: cancelButton.rx.tap.asObservable(), - didTapHemisphere: settingSection.hemisphereButtonObservable, - didTapFruit: settingSection.startingFruitButtonObservable - ) - - let output = viewModel.transform(input: input, disposeBag: disposeBag) - - output.userInfo - .compactMap { $0 } - .withUnretained(self) - .observe(on: MainScheduler.instance) - .subscribe(onNext: { owner, userInfo in - owner.settingSection.setUpViews(userInfo) - }, onError: { error in - print(error.localizedDescription) - }).disposed(by: disposeBag) - - output.errorMessage - .filter { $0 != "" } - .subscribe(onNext: { errorMessage in - print(errorMessage) - }).disposed(by: disposeBag) - - output.didChangeHemisphere - .compactMap { $0 } - .compactMap { Hemisphere(rawValue: $0) } - .withUnretained(self) - .subscribe(onNext: { owner, hemisphere in - owner.settingSection.updateHemisphere(hemisphere) - owner.currentHemisphere.onNext(hemisphere) - }).disposed(by: disposeBag) - - output.didChangeFruit - .compactMap { $0 } - .compactMap { Fruit(rawValue: $0) } - .withUnretained(self) - .subscribe(onNext: { owner, fruit in - owner.settingSection.updateFruit(fruit) - owner.currentFruit.onNext(fruit) - }).disposed(by: disposeBag) - - setUpAppSettings(to: AppSettingViewModel()) - } - - private func setUpAppSettings(to viewModel: AppSettingViewModel) { - sectionsScrollView.addSection( - SectionView(title: "App Settings".localized, iconName: "square.and.pencil", contentView: AppSettingView(viewModel: viewModel)) - ) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/AboutViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/AboutViewModel.swift deleted file mode 100644 index 27cadb32..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/AboutViewModel.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// AboutViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/11. -// - -import Foundation -import RxSwift - -final class AboutViewModel { - var coordinator: DashboardCoordinator? - - init(coordinator: DashboardCoordinator) { - self.coordinator = coordinator - } - - struct Input { - let didTapCancel: Observable - } - - struct Output { - let items: Observable<[(title: String, items: [AboutItem])]> - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let items: Observable<[(title: String, items: [AboutItem])]> = Observable.just([ - ("Version".localized, AboutItem.versions), - ("The app".localized, AboutItem.theApp), - ("Credit / Thanks".localized, AboutItem.acknowledgement) - ]) - - input.didTapCancel - .subscribe(onNext: { _ in - self.coordinator?.transition(for: .dismiss) - }).disposed(by: disposeBag) - - return Output(items: items) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/AppSettingsViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/AppSettingsViewModel.swift deleted file mode 100644 index 4b7a81f0..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/AppSettingsViewModel.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// AppSettingsViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/12. -// - -import Foundation -import RxSwift -import RxRelay - -final class AppSettingViewModel { - struct Input { - let didTapSwitch: Observable - } - - struct Output { - let currentHapticState: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let state = PublishRelay() - input.didTapSwitch - .subscribe(onNext: { _ in - state.accept(HapticManager.shared.mode == .on ? false : true) - HapticManager.shared.toggle() - }).disposed(by: disposeBag) - return Output(currentHapticState: state.asObservable()) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/CollectionProgressSectionViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/CollectionProgressSectionViewModel.swift deleted file mode 100644 index ac421dc1..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/CollectionProgressSectionViewModel.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// CollectionProgressSectionViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/11. -// - -import UIKit -import RxSwift - -final class CollectionProgressSectionViewModel { - var coordinator: DashboardCoordinator? - - init(coordinator: DashboardCoordinator?) { - self.coordinator = coordinator - } - - struct Input { - let didTapSection: Observable - } - - struct Output { - let isLoading: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - input.didTapSection - .subscribe(onNext: { _ in - self.coordinator?.transition(for: .progress) - }).disposed(by: disposeBag) - - return Output(isLoading: Items.shared.isLoading) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/CustomTaskViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/CustomTaskViewModel.swift deleted file mode 100644 index d98e0316..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/CustomTaskViewModel.swift +++ /dev/null @@ -1,110 +0,0 @@ -// -// CustomTaskViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/24. -// - -import Foundation -import RxSwift -import RxRelay - -final class CustomTaskViewModel { - - private let task: DailyTask? - private let storage: CoreDataDailyTaskStorage = CoreDataDailyTaskStorage() - private let coordinator: DashboardCoordinator - - init(coordinator: DashboardCoordinator, task: DailyTask?) { - self.coordinator = coordinator - self.task = task - } - - deinit { - coordinator.delegate = nil - } - - struct Input { - let didTapCheck: Observable - let didTapIcon: Observable - let didTapAmount: Observable - let taskNameText: Observable - let iconNameText: Observable - let amountText: Observable - } - - struct Output { - let task: Observable - let didChangeAmount: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - - let title = BehaviorRelay(value: nil) - let icon = BehaviorRelay(value: nil) - let amount = BehaviorRelay(value: nil) - let currentAmount = BehaviorRelay(value: task?.amount.description ?? "1") - - input.didTapCheck - .subscribe(onNext: { _ in - var newTask: DailyTask - if let task = self.task { - let amount = amount.value != nil ? Int(amount.value ?? "1") ?? 1 : task.amount - newTask = DailyTask( - id: task.id, - name: title.value ?? task.name, - icon: icon.value ?? task.icon, - progressList: Array(repeating: false, count: amount), - amount: amount, - createdDate: task.createdDate - ) - } else { - newTask = DailyTask( - name: title.value ?? "", - icon: icon.value ?? "Inv7", - isCompleted: false, - amount: Int(amount.value ?? "1") ?? 1, - createdDate: Date() - ) - } - self.storage.updateTask(newTask) - Items.shared.updateTasks(newTask) - self.coordinator.transition(for: .pop) - }).disposed(by: disposeBag) - - input.didTapIcon - .subscribe(onNext: { _ in - self.coordinator.transition(for: .iconChooser) - }).disposed(by: disposeBag) - - input.didTapAmount - .subscribe(onNext: { _ in - self.coordinator.rootViewController.visibleViewController? - .showSelectedItemAlert( - Array(1...20).map { $0.description }, - currentItem: currentAmount.value - ).subscribe(onNext: { title in - currentAmount.accept(title) - }).disposed(by: disposeBag) - }).disposed(by: disposeBag) - - input.taskNameText - .filter { $0 != "" } - .compactMap { $0 } - .subscribe(onNext: { text in - title.accept(text) - }).disposed(by: disposeBag) - - input.iconNameText - .subscribe(onNext: { text in - icon.accept(text) - }).disposed(by: disposeBag) - - input.amountText - .subscribe(onNext: { text in - amount.accept(text) - }).disposed(by: disposeBag) - - return Output(task: Observable.just(task), didChangeAmount: currentAmount.asObservable()) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/DashboardViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/DashboardViewModel.swift deleted file mode 100644 index bba60fc9..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/DashboardViewModel.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// DashboardViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/11. -// - -import Foundation -import RxSwift - -final class DashboardViewModel { - var coordinator: DashboardCoordinator? - - init(coordinator: DashboardCoordinator) { - self.coordinator = coordinator - } - - struct Input { - let didTapMore: Observable - } - - func bind(input: Input, disposeBag: DisposeBag) { - input.didTapMore - .observe(on: MainScheduler.instance) - .subscribe(onNext: { _ in - self.coordinator?.rootViewController.visibleViewController? - .showSelectedItemAlert( - ["About".localized, "Setting".localized], - currentItem: nil, - barButtonItem: self.coordinator?.rootViewController.visibleViewController?.navigationItem.rightBarButtonItem - ).subscribe(onNext: { selected in - if selected == "Setting".localized { - self.coordinator?.transition(for: .setting) - } else if selected == "About".localized { - self.coordinator?.transition(for: .about) - } - }).disposed(by: disposeBag) - }).disposed(by: disposeBag) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/PreferencesViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/PreferencesViewModel.swift deleted file mode 100644 index 2e39e3c4..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/PreferencesViewModel.swift +++ /dev/null @@ -1,126 +0,0 @@ -// -// PreferencesSectionViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/21. -// - -import Foundation -import RxSwift -import RxRelay - -final class PreferencesViewModel { - - private let storage: CoreDataUserInfoStorage - private var coordinator: DashboardCoordinator? - - init(storage: CoreDataUserInfoStorage = CoreDataUserInfoStorage(), coordinator: DashboardCoordinator) { - self.storage = storage - self.coordinator = coordinator - } - - struct Input { - let islandNameText: Observable - let userNameText: Observable - let hemisphereButtonTitle: Observable - let startingFruitButtonTitle: Observable - let didTapCancel: Observable - let didTapHemisphere: Observable - let didTapFruit: Observable - } - - struct Output { - let userInfo: Observable - let errorMessage: Observable - let didChangeHemisphere: Observable - let didChangeFruit: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let currentUserInfo = BehaviorRelay(value: nil) - let errorMessage = BehaviorRelay(value: "") - let currentHemisphere = BehaviorRelay(value: currentUserInfo.value?.hemisphere.rawValue) - let currentFruit = BehaviorRelay(value: currentUserInfo.value?.islandFruit.imageName) - - storage.fetchUserInfo().subscribe(onSuccess: { userInfo in - currentUserInfo.accept(userInfo) - currentUserInfo - .compactMap { $0 } - .withUnretained(self) - .subscribe(onNext: { owner, newUserInfo in - owner.storage.updateUserInfo(newUserInfo) - Items.shared.updateUserInfo(newUserInfo) - }).disposed(by: disposeBag) - }, onFailure: { error in - errorMessage.accept(error.localizedDescription) - }).disposed(by: disposeBag) - - input.islandNameText - .compactMap { $0 } - .subscribe(onNext: { islandName in - var userInfo = currentUserInfo.value - userInfo?.updateIslandName(islandName) - currentUserInfo.accept(userInfo) - }).disposed(by: disposeBag) - - input.userNameText - .compactMap { $0 } - .subscribe(onNext: { userName in - var userInfo = currentUserInfo.value - userInfo?.updateName(userName) - currentUserInfo.accept(userInfo) - }).disposed(by: disposeBag) - - input.hemisphereButtonTitle - .compactMap { $0 } - .subscribe(onNext: { hemisphere in - var userInfo = currentUserInfo.value - userInfo?.updateHemisphere(hemisphere) - currentUserInfo.accept(userInfo) - }).disposed(by: disposeBag) - - input.startingFruitButtonTitle - .compactMap { $0 } - .subscribe(onNext: { fruit in - var userInfo = currentUserInfo.value - userInfo?.updateFruit(fruit) - currentUserInfo.accept(userInfo) - }).disposed(by: disposeBag) - - input.didTapCancel - .subscribe(onNext: { _ in - self.coordinator?.transition(for: .dismiss) - }).disposed(by: disposeBag) - - input.didTapHemisphere - .subscribe(onNext: { _ in - self.coordinator?.rootViewController.visibleViewController? - .showSelectedItemAlert( - Hemisphere.allCases.map { $0.rawValue.localized }, - currentItem: currentUserInfo.value?.hemisphere.rawValue.localized ?? "" - ).compactMap { Hemisphere.title($0) } - .subscribe(onNext: { title in - currentHemisphere.accept(title) - }).disposed(by: disposeBag) - }).disposed(by: disposeBag) - - input.didTapFruit - .subscribe(onNext: { _ in - self.coordinator?.rootViewController.visibleViewController? - .showSelectedItemAlert( - Fruit.allCases.map { $0.imageName.localized }, - currentItem: currentUserInfo.value?.islandFruit.imageName.localized ?? "" - ).compactMap { Fruit.title($0) } - .subscribe(onNext: { title in - currentFruit.accept(title) - }).disposed(by: disposeBag) - }).disposed(by: disposeBag) - - return Output( - userInfo: currentUserInfo.asObservable(), - errorMessage: errorMessage.asObservable(), - didChangeHemisphere: currentHemisphere.asObservable(), - didChangeFruit: currentFruit.asObservable() - ) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/ProgressViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/ProgressViewModel.swift deleted file mode 100644 index 148db22a..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/ProgressViewModel.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// ProgressViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/07. -// - -import Foundation -import RxSwift -import RxRelay - -final class ProgressViewModel { - let category: Category - - init(category: Category) { - self.category = category - } - - struct Output { - let items: Observable<(itemCount: Int, maxCount: Int)> - } - - func transform(disposeBag: DisposeBag) -> Output { - let items = BehaviorRelay<(itemCount: Int, maxCount: Int)>(value: (0, 0)) - - Observable.combineLatest(Items.shared.itemList, Items.shared.itemsCount) - .map { ($0.0[self.category]?.count ?? 0, $0.1[self.category] ?? 0) } - .filter { $0.1 != 0 } - .subscribe(onNext: { userItemCount, maxCount in - items.accept((userItemCount, maxCount)) - }).disposed(by: disposeBag) - - return Output( - items: items.asObservable() - ) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/TasksEditViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/TasksEditViewModel.swift deleted file mode 100644 index d8cbba3f..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/TasksEditViewModel.swift +++ /dev/null @@ -1,81 +0,0 @@ -// -// TasksEditViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/24. -// - -import Foundation -import RxSwift -import RxRelay - -final class TasksEditViewModel { - - private let storage: DailyTaskStorage - private let coordinator: DashboardCoordinator - - init(coordinator: DashboardCoordinator, storage: DailyTaskStorage = CoreDataDailyTaskStorage()) { - self.coordinator = coordinator - self.storage = storage - } - - private var tasks = [DailyTask]() - - struct Input { - let didSelectedTask: Observable - let didTapCancel: Observable - let didDeleted: Observable - } - - struct Output { - let tasks: Observable<[DailyTask]> - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let currentTasks = BehaviorRelay<[DailyTask]>(value: []) - - Items.shared.dailyTasks - .withUnretained(self) - .subscribe(onNext: { owner, tasks in - var tasks = tasks - tasks.append( - DailyTask( - name: "Add a custom task", - icon: "plus", - isCompleted: false, - amount: 1, - createdDate: Date() - ) - ) - currentTasks.accept(tasks) - owner.tasks = tasks - }).disposed(by: disposeBag) - - input.didSelectedTask - .observe(on: MainScheduler.instance) - .subscribe(onNext: { task in - self.coordinator.transition(for: .customTask(task: task)) - }).disposed(by: disposeBag) - - input.didTapCancel - .observe(on: MainScheduler.instance) - .subscribe(onNext: { _ in - self.coordinator.transition(for: .dismiss) - }).disposed(by: disposeBag) - - input.didDeleted - .observe(on: MainScheduler.instance) - .withUnretained(self) - .subscribe(onNext: { owner, indexPath in - owner.storage.deleteTaskDelete(owner.tasks.remove(at: indexPath.row)) - .subscribe(onSuccess: { task in - Items.shared.deleteTask(task) - }, onFailure: { error in - debugPrint(error) - }).disposed(by: disposeBag) - currentTasks.accept(owner.tasks) - }).disposed(by: disposeBag) - - return Output(tasks: currentTasks.asObservable()) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/TodaysTasksSectionViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/TodaysTasksSectionViewModel.swift deleted file mode 100644 index 75a6c1b0..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/TodaysTasksSectionViewModel.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// TodaysTasksSectionViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/24. -// - -import Foundation -import RxSwift -import RxRelay - -final class TodaysTasksSectionViewModel { - - var coordinator: DashboardCoordinator? - - init(coordinator: DashboardCoordinator?) { - self.coordinator = coordinator - } - - private let storage: CoreDataDailyTaskStorage = CoreDataDailyTaskStorage() - - private var tasks: [(progressIndex: Int, task: DailyTask)] = [] - - struct Input { - let didSelectItem: Observable - let didTapReset: Observable - let didTapEdit: Observable - } - - struct Output { - let tasks: Observable<[(progressIndex: Int, task: DailyTask)]> - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let currentTasks = BehaviorRelay<[(progressIndex: Int, task: DailyTask)]>(value: []) - - Items.shared.dailyTasks - .subscribe(onNext: { tasks in - var tasksList = [(progressIndex: Int, task: DailyTask)]() - tasks.forEach { task in - (0.. - } - - func transform(disposeBag: DisposeBag) -> Output { - let newUserInfo = BehaviorRelay(value: nil) - - Items.shared.userInfo - .subscribe(onNext: { userInfo in - newUserInfo.accept(userInfo) - }).disposed(by: disposeBag) - - return Output( - userInfo: newUserInfo.asObservable() - ) - } - -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/VillagersSectionViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/VillagersSectionViewModel.swift deleted file mode 100644 index 2cf05f73..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewModels/VillagersSectionViewModel.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// VillagersSectionViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/24. -// - -import Foundation -import RxSwift -import RxRelay - -final class VillagersSectionViewModel { - - private var villagers: [Villager] = [] - private var coordinator: DashboardCoordinator? - - init(coordinator: DashboardCoordinator?) { - self.coordinator = coordinator - } - - struct Input { - let didSelectItem: Observable - let didTapVillagerLongPress: Observable - } - - struct Output { - let villagers: Observable<[Villager]> - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let villagerList = BehaviorRelay<[Villager]>(value: []) - - input.didTapVillagerLongPress - .compactMap { $0 } - .compactMap { self.villagers[safe: $0.row] } - .subscribe(onNext: { villager in - self.coordinator?.transition(for: .villagerDetail(villager: villager)) - }).disposed(by: disposeBag) - - Items.shared.villagerHouseList - .subscribe(onNext: { villagers in - let sortedVillagers = villagers - .sorted(by: { $0.translations.localizedName() < $1.translations.localizedName() }) - self.villagers = sortedVillagers - villagerList.accept(sortedVillagers) - }).disposed(by: disposeBag) - - return Output(villagers: villagerList.asObservable()) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Info.plist b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Info.plist index 531a448e..f8d24013 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Info.plist +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Info.plist @@ -20,6 +20,8 @@ UIBackgroundModes - + + audio + diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/PlayerViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/PlayerViewModel.swift deleted file mode 100644 index 8e94e54e..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/PlayerViewModel.swift +++ /dev/null @@ -1,123 +0,0 @@ -// -// PlayerViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/22. -// - -import Foundation -import RxSwift -import RxRelay - -final class PlayerViewModel { - - private let coordinator: AppCoordinator - - init(coordinator: AppCoordinator) { - self.coordinator = coordinator - } - - struct Input { - let didTapMiniPlayer: Observable - let didTapFoldingButton: Observable - let dragGesture: Observable - let didTapCancel: Observable - let didTapPlayButton: [Observable] - let didTapNextButton: [Observable] - let didTapPrevButton: Observable - let didTapPlayList: Observable - let seletedSong: Observable - let didTapShuffle: Observable - let didTapRepeat: Observable - } - - struct Output { - let playerMode: Observable - let songs: Observable<[Item]> - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let playerMode = BehaviorRelay(value: nil) - let songs = BehaviorRelay<[Item]>(value: []) - - input.didTapMiniPlayer - .subscribe(onNext: { _ in - self.coordinator.maximize() - playerMode.accept(.large) - }).disposed(by: disposeBag) - - input.didTapFoldingButton - .subscribe(onNext: { _ in - self.coordinator.minimize() - playerMode.accept(.small) - }).disposed(by: disposeBag) - - input.dragGesture - .compactMap { $0 } - .subscribe(onNext: { isSwipeUp in - if isSwipeUp { - self.coordinator.maximize() - playerMode.accept(.large) - } else { - self.coordinator.minimize() - playerMode.accept(.small) - } - }).disposed(by: disposeBag) - - input.didTapCancel - .subscribe(onNext: { _ in - self.coordinator.removePlayerViewController() - }).disposed(by: disposeBag) - - input.didTapPlayButton.forEach { observable in - observable.subscribe(onNext: { _ in - MusicPlayerManager.shared.togglePlaying() - }).disposed(by: disposeBag) - } - - input.didTapNextButton.forEach { observable in - observable.subscribe(onNext: { _ in - MusicPlayerManager.shared.next() - }).disposed(by: disposeBag) - } - - input.didTapPrevButton - .subscribe(onNext: { _ in - MusicPlayerManager.shared.prev() - }).disposed(by: disposeBag) - - input.didTapPlayList - .subscribe(onNext: { _ in - playerMode.accept(.list) - }).disposed(by: disposeBag) - - input.seletedSong - .subscribe(onNext: { item in - MusicPlayerManager.shared.choice(item) - }).disposed(by: disposeBag) - - MusicPlayerManager.shared.songList - .subscribe(onNext: { items in - songs.accept(items) - }).disposed(by: disposeBag) - - input.didTapShuffle - .subscribe(onNext: { _ in - MusicPlayerManager.shared.updatePlayerMode(to: .shuffle) - }).disposed(by: disposeBag) - input.didTapRepeat - .subscribe(onNext: { _ in - MusicPlayerManager.shared.updatePlayerMode(to: .fullRepeat) - }).disposed(by: disposeBag) - - coordinator.rootViewController.rx.didSelect - .subscribe(onNext: { _ in - if playerMode.value == .large || playerMode.value == .list { - playerMode.accept(.small) - self.coordinator.minimize() - } - }).disposed(by: disposeBag) - - return Output(playerMode: playerMode.asObservable(), songs: songs.asObservable()) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/MusicResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/MusicResponseDTO.swift deleted file mode 100644 index 09074bff..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/MusicResponseDTO.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// MusicResponseDTO.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/20. -// - -import Foundation - -struct MusicResponseDTO: Codable { - let id: Int - let fileName: String - let name: MusicTranslations - let buyPrice: Int? - let sellPrice: Int - let isOrderable: Bool - let musicURL: String - let imageURL: String - - enum CodingKeys: String, CodingKey { - case id, name, isOrderable - case fileName = "file-name" - case buyPrice = "buy-price" - case sellPrice = "sell-price" - case musicURL = "music_uri" - case imageURL = "image_uri" - } -} - -struct MusicTranslations: Codable { - let uSen, eUen, eUde, eUes: String - let uSes, eUfr, uSfr, eUit: String - let eUnl, cNzh, tWzh, jPja: String - let kRko, eUru: String - - enum CodingKeys: String, CodingKey { - case uSen = "name-USen" - case eUen = "name-EUen" - case eUde = "name-EUde" - case eUes = "name-EUes" - case uSes = "name-USes" - case eUfr = "name-EUfr" - case uSfr = "name-USfr" - case eUit = "name-EUit" - case eUnl = "name-EUnl" - case cNzh = "name-CNzh" - case tWzh = "name-TWzh" - case jPja = "name-JPja" - case kRko = "name-KRko" - case eUru = "name-EUru" - } - func toDomain() -> Translations { - return Translations( - eUde: self.eUde, - eUen: self.eUen, - eUit: self.eUit, - eUnl: self.eUnl, - eUru: self.eUru, - eUfr: self.eUfr, - eUes: self.eUes, - uSen: self.uSen, - uSfr: self.uSfr, - uSes: self.uSes, - jPja: self.jPja, - kRko: self.kRko, - tWzh: self.tWzh, - cNzh: self.cNzh - ) - } -} - -extension MusicResponseDTO { - func toDomain() -> Item { - var sources = ["K.K. concert"] - var sourceNotes: [String]? - if isOrderable { - sources.append("Nook Shopping Daily Selection") - } else { - sourceNotes = ["Hidden song"] - } - return Item( - name: name.uSen, - category: .songs, - sell: sellPrice, - translations: name.toDomain(), - image: imageURL, - buy: buyPrice, - sources: sources, - sourceNotes: sourceNotes, - musicURL: musicURL - ) - } -} - -extension Item { - init( - name: String, - category: Category, - sell: Int, - translations: Translations, - image: String?, - buy: Int?, - sources: [String], - sourceNotes: [String]?, - musicURL: String - ) { - self.name = name - self.category = category - self.sell = sell - self.translations = translations - self.image = image - self.buy = buy - self.sources = sources - self.sourceNotes = sourceNotes - self.colors = [] - self.genuine = true - self.musicURL = musicURL - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/AppDelegate.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/AppDelegate.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/AppDelegate.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/AppDelegate.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/100.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/100.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/100.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/100.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/1024.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/1024.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/1024.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/1024.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/114.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/114.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/114.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/114.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/120.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/120.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/120.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/120.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/128.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/128.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/128.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/128.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/144.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/144.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/144.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/144.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/152.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/152.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/152.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/152.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/16.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/16.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/16.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/16.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/167.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/167.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/167.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/167.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/172.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/172.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/172.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/172.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/180.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/180.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/180.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/180.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/196.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/196.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/196.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/196.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/20.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/20.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/20.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/20.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/216.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/216.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/216.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/216.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/256.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/256.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/256.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/256.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/29.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/29.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/29.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/29.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/32.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/32.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/32.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/32.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/40.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/40.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/40.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/40.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/48.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/48.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/48.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/48.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/50.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/50.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/50.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/50.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/512.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/512.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/512.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/512.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/55.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/55.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/55.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/55.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/57.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/57.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/57.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/57.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/58.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/58.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/58.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/58.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/60.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/60.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/60.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/60.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/64.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/64.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/64.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/64.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/72.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/72.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/72.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/72.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/76.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/76.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/76.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/76.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/80.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/80.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/80.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/80.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/87.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/87.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/87.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/87.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/88.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/88.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/88.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/88.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Background/ACBackground.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Background/ACBackground.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Background/ACBackground.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Background/ACBackground.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Background/ACSecondaryBackground.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Background/ACSecondaryBackground.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Background/ACSecondaryBackground.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Background/ACSecondaryBackground.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Background/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Background/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Background/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Background/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Navigation Bar/ACNavigationBarTint.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Navigation Bar/ACNavigationBarTint.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Navigation Bar/ACNavigationBarTint.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Navigation Bar/ACNavigationBarTint.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Navigation Bar/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Navigation Bar/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Navigation Bar/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Navigation Bar/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Section Header/ACHeaderBackground.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Section Header/ACHeaderBackground.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Section Header/ACHeaderBackground.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Section Header/ACHeaderBackground.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Section Header/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Section Header/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Section Header/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Section Header/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Text/ACSecondaryText.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Text/ACSecondaryText.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Text/ACSecondaryText.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Text/ACSecondaryText.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Text/ACText.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Text/ACText.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Text/ACText.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Text/ACText.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Text/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Text/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/Text/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/Text/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/catalog-background.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/catalog-background.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/catalog-background.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/catalog-background.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/catalog-bar.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/catalog-bar.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/catalog-bar.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/catalog-bar.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/catalog-selected.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/catalog-selected.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/catalog-selected.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/catalog-selected.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/catalog-text.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/catalog-text.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/catalog-text.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/catalog-text.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/launchBackground.colorset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/launchBackground.colorset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/colors/launchBackground.colorset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/colors/launchBackground.colorset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Apple.imageset/Apple.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Apple.imageset/Apple.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Apple.imageset/Apple.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Apple.imageset/Apple.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Apple.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Apple.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Apple.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Apple.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Cherry.imageset/Cherry.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Cherry.imageset/Cherry.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Cherry.imageset/Cherry.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Cherry.imageset/Cherry.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Cherry.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Cherry.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Cherry.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Cherry.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Coconut.imageset/Coconut.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Coconut.imageset/Coconut.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Coconut.imageset/Coconut.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Coconut.imageset/Coconut.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Coconut.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Coconut.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Coconut.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Coconut.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Orange.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Orange.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Orange.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Orange.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Orange.imageset/Orange.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Orange.imageset/Orange.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Orange.imageset/Orange.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Orange.imageset/Orange.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Peach.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Peach.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Peach.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Peach.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Peach.imageset/Peach.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Peach.imageset/Peach.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Peach.imageset/Peach.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Peach.imageset/Peach.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Pear.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Pear.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Pear.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Pear.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Pear.imageset/Pear.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Pear.imageset/Pear.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/fruits/Pear.imageset/Pear.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/fruits/Pear.imageset/Pear.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/App-Icon.imageset/App-Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/App-Icon.imageset/App-Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/App-Icon.imageset/App-Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/App-Icon.imageset/App-Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/App-Icon.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/App-Icon.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/App-Icon.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/App-Icon.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-dive-icon.imageset/BookBtnInvDiveFish^z.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-dive-icon.imageset/BookBtnInvDiveFish^z.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-dive-icon.imageset/BookBtnInvDiveFish^z.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-dive-icon.imageset/BookBtnInvDiveFish^z.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-dive-icon.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-dive-icon.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-dive-icon.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-dive-icon.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-fish-icon.imageset/BookBtnInvFish^z_0.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-fish-icon.imageset/BookBtnInvFish^z_0.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-fish-icon.imageset/BookBtnInvFish^z_0.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-fish-icon.imageset/BookBtnInvFish^z_0.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-fish-icon.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-fish-icon.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-fish-icon.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-fish-icon.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-insect-icon.imageset/BookBtnInvInsect^z_0.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-insect-icon.imageset/BookBtnInvInsect^z_0.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-insect-icon.imageset/BookBtnInvInsect^z_0.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-insect-icon.imageset/BookBtnInvInsect^z_0.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-insect-icon.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-insect-icon.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/book-insect-icon.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/book-insect-icon.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins0.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins0.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins0.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins0.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins0.imageset/Ins0.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins0.imageset/Ins0.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins0.imageset/Ins0.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins0.imageset/Ins0.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins1.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins1.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins1.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins1.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins1.imageset/Ins1.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins1.imageset/Ins1.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins1.imageset/Ins1.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins1.imageset/Ins1.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins10.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins10.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins10.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins10.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins10.imageset/Ins10.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins10.imageset/Ins10.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins10.imageset/Ins10.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins10.imageset/Ins10.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins11.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins11.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins11.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins11.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins11.imageset/Ins11.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins11.imageset/Ins11.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins11.imageset/Ins11.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins11.imageset/Ins11.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins12.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins12.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins12.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins12.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins12.imageset/Ins12.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins12.imageset/Ins12.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins12.imageset/Ins12.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins12.imageset/Ins12.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins13.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins13.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins13.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins13.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins13.imageset/Ins13.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins13.imageset/Ins13.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins13.imageset/Ins13.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins13.imageset/Ins13.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins14.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins14.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins14.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins14.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins14.imageset/Ins14.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins14.imageset/Ins14.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins14.imageset/Ins14.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins14.imageset/Ins14.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins15.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins15.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins15.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins15.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins15.imageset/Ins15.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins15.imageset/Ins15.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins15.imageset/Ins15.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins15.imageset/Ins15.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins16.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins16.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins16.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins16.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins16.imageset/Ins16.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins16.imageset/Ins16.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins16.imageset/Ins16.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins16.imageset/Ins16.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins17.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins17.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins17.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins17.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins17.imageset/Ins17.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins17.imageset/Ins17.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins17.imageset/Ins17.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins17.imageset/Ins17.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins18.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins18.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins18.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins18.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins18.imageset/Ins18.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins18.imageset/Ins18.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins18.imageset/Ins18.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins18.imageset/Ins18.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins19.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins19.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins19.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins19.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins19.imageset/Ins19.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins19.imageset/Ins19.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins19.imageset/Ins19.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins19.imageset/Ins19.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins2.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins2.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins2.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins2.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins2.imageset/Ins2.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins2.imageset/Ins2.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins2.imageset/Ins2.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins2.imageset/Ins2.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins20.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins20.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins20.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins20.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins20.imageset/Ins20.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins20.imageset/Ins20.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins20.imageset/Ins20.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins20.imageset/Ins20.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins21.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins21.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins21.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins21.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins21.imageset/Ins48.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins21.imageset/Ins48.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins21.imageset/Ins48.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins21.imageset/Ins48.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins22.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins22.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins22.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins22.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins22.imageset/Ins22.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins22.imageset/Ins22.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins22.imageset/Ins22.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins22.imageset/Ins22.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins23.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins23.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins23.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins23.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins23.imageset/Ins23.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins23.imageset/Ins23.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins23.imageset/Ins23.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins23.imageset/Ins23.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins24.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins24.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins24.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins24.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins24.imageset/Ins24.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins24.imageset/Ins24.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins24.imageset/Ins24.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins24.imageset/Ins24.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins25.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins25.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins25.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins25.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins25.imageset/Ins47.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins25.imageset/Ins47.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins25.imageset/Ins47.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins25.imageset/Ins47.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins26.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins26.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins26.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins26.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins26.imageset/Ins26.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins26.imageset/Ins26.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins26.imageset/Ins26.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins26.imageset/Ins26.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins27.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins27.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins27.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins27.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins27.imageset/Ins27.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins27.imageset/Ins27.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins27.imageset/Ins27.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins27.imageset/Ins27.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins28.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins28.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins28.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins28.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins28.imageset/Ins28.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins28.imageset/Ins28.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins28.imageset/Ins28.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins28.imageset/Ins28.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins29.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins29.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins29.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins29.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins29.imageset/Ins29.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins29.imageset/Ins29.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins29.imageset/Ins29.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins29.imageset/Ins29.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins3.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins3.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins3.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins3.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins3.imageset/Ins3.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins3.imageset/Ins3.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins3.imageset/Ins3.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins3.imageset/Ins3.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins30.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins30.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins30.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins30.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins30.imageset/Ins30.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins30.imageset/Ins30.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins30.imageset/Ins30.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins30.imageset/Ins30.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins31.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins31.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins31.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins31.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins31.imageset/Ins31.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins31.imageset/Ins31.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins31.imageset/Ins31.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins31.imageset/Ins31.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins32.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins32.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins32.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins32.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins32.imageset/Ins32.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins32.imageset/Ins32.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins32.imageset/Ins32.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins32.imageset/Ins32.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins33.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins33.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins33.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins33.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins33.imageset/Ins33.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins33.imageset/Ins33.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins33.imageset/Ins33.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins33.imageset/Ins33.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins34.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins34.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins34.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins34.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins34.imageset/Ins34.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins34.imageset/Ins34.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins34.imageset/Ins34.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins34.imageset/Ins34.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins35.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins35.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins35.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins35.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins35.imageset/Ins35.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins35.imageset/Ins35.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins35.imageset/Ins35.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins35.imageset/Ins35.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins36.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins36.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins36.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins36.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins36.imageset/Ins36.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins36.imageset/Ins36.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins36.imageset/Ins36.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins36.imageset/Ins36.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins37.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins37.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins37.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins37.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins37.imageset/Ins37.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins37.imageset/Ins37.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins37.imageset/Ins37.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins37.imageset/Ins37.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins38.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins38.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins38.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins38.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins38.imageset/Ins38.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins38.imageset/Ins38.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins38.imageset/Ins38.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins38.imageset/Ins38.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins39.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins39.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins39.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins39.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins39.imageset/Ins39.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins39.imageset/Ins39.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins39.imageset/Ins39.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins39.imageset/Ins39.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins4.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins4.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins4.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins4.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins4.imageset/Ins4.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins4.imageset/Ins4.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins4.imageset/Ins4.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins4.imageset/Ins4.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins40.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins40.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins40.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins40.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins40.imageset/Ins40.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins40.imageset/Ins40.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins40.imageset/Ins40.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins40.imageset/Ins40.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins41.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins41.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins41.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins41.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins41.imageset/Ins41.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins41.imageset/Ins41.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins41.imageset/Ins41.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins41.imageset/Ins41.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins42.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins42.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins42.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins42.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins42.imageset/Ins42.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins42.imageset/Ins42.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins42.imageset/Ins42.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins42.imageset/Ins42.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins43.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins43.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins43.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins43.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins43.imageset/Ins43.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins43.imageset/Ins43.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins43.imageset/Ins43.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins43.imageset/Ins43.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins44.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins44.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins44.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins44.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins44.imageset/Ins44.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins44.imageset/Ins44.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins44.imageset/Ins44.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins44.imageset/Ins44.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins45.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins45.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins45.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins45.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins45.imageset/Ins45.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins45.imageset/Ins45.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins45.imageset/Ins45.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins45.imageset/Ins45.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins46.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins46.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins46.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins46.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins46.imageset/Ins46.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins46.imageset/Ins46.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins46.imageset/Ins46.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins46.imageset/Ins46.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins47.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins47.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins47.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins47.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins47.imageset/Ins47.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins47.imageset/Ins47.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins47.imageset/Ins47.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins47.imageset/Ins47.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins48.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins48.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins48.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins48.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins48.imageset/Ins48.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins48.imageset/Ins48.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins48.imageset/Ins48.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins48.imageset/Ins48.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins49.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins49.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins49.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins49.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins49.imageset/Ins49.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins49.imageset/Ins49.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins49.imageset/Ins49.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins49.imageset/Ins49.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins5.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins5.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins5.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins5.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins5.imageset/Ins5.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins5.imageset/Ins5.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins5.imageset/Ins5.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins5.imageset/Ins5.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins50.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins50.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins50.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins50.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins50.imageset/Ins50.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins50.imageset/Ins50.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins50.imageset/Ins50.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins50.imageset/Ins50.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins51.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins51.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins51.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins51.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins51.imageset/Ins51.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins51.imageset/Ins51.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins51.imageset/Ins51.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins51.imageset/Ins51.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins52.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins52.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins52.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins52.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins52.imageset/Ins52.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins52.imageset/Ins52.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins52.imageset/Ins52.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins52.imageset/Ins52.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins53.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins53.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins53.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins53.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins53.imageset/Ins53.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins53.imageset/Ins53.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins53.imageset/Ins53.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins53.imageset/Ins53.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins54.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins54.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins54.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins54.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins54.imageset/Ins54.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins54.imageset/Ins54.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins54.imageset/Ins54.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins54.imageset/Ins54.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins55.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins55.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins55.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins55.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins55.imageset/Ins55.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins55.imageset/Ins55.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins55.imageset/Ins55.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins55.imageset/Ins55.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins56.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins56.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins56.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins56.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins56.imageset/Ins56.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins56.imageset/Ins56.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins56.imageset/Ins56.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins56.imageset/Ins56.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins57.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins57.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins57.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins57.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins57.imageset/Ins57.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins57.imageset/Ins57.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins57.imageset/Ins57.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins57.imageset/Ins57.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins58.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins58.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins58.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins58.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins58.imageset/Ins58.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins58.imageset/Ins58.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins58.imageset/Ins58.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins58.imageset/Ins58.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins59.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins59.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins59.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins59.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins59.imageset/Ins59.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins59.imageset/Ins59.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins59.imageset/Ins59.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins59.imageset/Ins59.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins6.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins6.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins6.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins6.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins6.imageset/Ins6.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins6.imageset/Ins6.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins6.imageset/Ins6.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins6.imageset/Ins6.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins60.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins60.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins60.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins60.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins60.imageset/Ins60.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins60.imageset/Ins60.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins60.imageset/Ins60.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins60.imageset/Ins60.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins61.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins61.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins61.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins61.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins61.imageset/Ins61.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins61.imageset/Ins61.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins61.imageset/Ins61.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins61.imageset/Ins61.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins62.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins62.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins62.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins62.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins62.imageset/Ins62.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins62.imageset/Ins62.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins62.imageset/Ins62.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins62.imageset/Ins62.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins63.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins63.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins63.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins63.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins63.imageset/Ins63.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins63.imageset/Ins63.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins63.imageset/Ins63.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins63.imageset/Ins63.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins64.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins64.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins64.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins64.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins64.imageset/Ins64.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins64.imageset/Ins64.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins64.imageset/Ins64.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins64.imageset/Ins64.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins65.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins65.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins65.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins65.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins65.imageset/Ins65.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins65.imageset/Ins65.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins65.imageset/Ins65.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins65.imageset/Ins65.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins66.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins66.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins66.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins66.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins66.imageset/Ins66.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins66.imageset/Ins66.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins66.imageset/Ins66.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins66.imageset/Ins66.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins67.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins67.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins67.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins67.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins67.imageset/Ins67.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins67.imageset/Ins67.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins67.imageset/Ins67.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins67.imageset/Ins67.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins69.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins69.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins69.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins69.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins69.imageset/Ins69.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins69.imageset/Ins69.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins69.imageset/Ins69.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins69.imageset/Ins69.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins7.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins7.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins7.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins7.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins7.imageset/Ins7.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins7.imageset/Ins7.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins7.imageset/Ins7.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins7.imageset/Ins7.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins70.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins70.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins70.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins70.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins70.imageset/Ins70.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins70.imageset/Ins70.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins70.imageset/Ins70.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins70.imageset/Ins70.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins71.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins71.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins71.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins71.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins71.imageset/Ins71.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins71.imageset/Ins71.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins71.imageset/Ins71.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins71.imageset/Ins71.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins72.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins72.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins72.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins72.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins72.imageset/Ins72.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins72.imageset/Ins72.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins72.imageset/Ins72.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins72.imageset/Ins72.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins73.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins73.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins73.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins73.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins73.imageset/Ins73.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins73.imageset/Ins73.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins73.imageset/Ins73.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins73.imageset/Ins73.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins74.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins74.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins74.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins74.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins74.imageset/Ins74.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins74.imageset/Ins74.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins74.imageset/Ins74.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins74.imageset/Ins74.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins75.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins75.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins75.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins75.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins75.imageset/Ins75.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins75.imageset/Ins75.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins75.imageset/Ins75.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins75.imageset/Ins75.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins76.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins76.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins76.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins76.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins76.imageset/Ins76.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins76.imageset/Ins76.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins76.imageset/Ins76.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins76.imageset/Ins76.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins77.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins77.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins77.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins77.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins77.imageset/Ins77.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins77.imageset/Ins77.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins77.imageset/Ins77.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins77.imageset/Ins77.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins78.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins78.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins78.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins78.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins78.imageset/Ins78.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins78.imageset/Ins78.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins78.imageset/Ins78.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins78.imageset/Ins78.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins79.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins79.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins79.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins79.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins79.imageset/Ins79.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins79.imageset/Ins79.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins79.imageset/Ins79.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins79.imageset/Ins79.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins8.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins8.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins8.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins8.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins8.imageset/Ins8.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins8.imageset/Ins8.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins8.imageset/Ins8.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins8.imageset/Ins8.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins80.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins80.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins80.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins80.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins80.imageset/Ins80.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins80.imageset/Ins80.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins80.imageset/Ins80.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins80.imageset/Ins80.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins81.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins81.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins81.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins81.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins81.imageset/Ins81.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins81.imageset/Ins81.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins81.imageset/Ins81.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins81.imageset/Ins81.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins82.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins82.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins82.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins82.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins82.imageset/Ins82.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins82.imageset/Ins82.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins82.imageset/Ins82.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins82.imageset/Ins82.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins9.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins9.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins9.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins9.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins9.imageset/Ins9.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins9.imageset/Ins9.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/bug/Ins9.imageset/Ins9.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/bug/Ins9.imageset/Ins9.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/celeste.imageset/Celeste@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/celeste.imageset/Celeste@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/celeste.imageset/Celeste@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/celeste.imageset/Celeste@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/celeste.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/celeste.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/celeste.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/celeste.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/cj.imageset/C.J.@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/cj.imageset/C.J.@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/cj.imageset/C.J.@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/cj.imageset/C.J.@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/cj.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/cj.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/cj.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/cj.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/daisy.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/daisy.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/daisy.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/daisy.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/daisy.imageset/Daisy Mae@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/daisy.imageset/Daisy Mae@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/daisy.imageset/Daisy Mae@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/daisy.imageset/Daisy Mae@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/flick.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/flick.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/flick.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/flick.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/flick.imageset/Flick@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/flick.imageset/Flick@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/flick.imageset/Flick@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/flick.imageset/Flick@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/gulliver.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/gulliver.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/gulliver.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/gulliver.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/gulliver.imageset/Gulliver@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/gulliver.imageset/Gulliver@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/gulliver.imageset/Gulliver@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/gulliver.imageset/Gulliver@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/kicks.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/kicks.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/kicks.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/kicks.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/kicks.imageset/Kicks@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/kicks.imageset/Kicks@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/kicks.imageset/Kicks@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/kicks.imageset/Kicks@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/kk.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/kk.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/kk.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/kk.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/kk.imageset/kk.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/kk.imageset/kk.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/kk.imageset/kk.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/kk.imageset/kk.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/label.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/label.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/label.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/label.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/label.imageset/Label@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/label.imageset/Label@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/label.imageset/Label@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/label.imageset/Label@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/leif.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/leif.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/leif.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/leif.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/leif.imageset/Leif@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/leif.imageset/Leif@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/leif.imageset/Leif@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/leif.imageset/Leif@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/redd.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/redd.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/redd.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/redd.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/redd.imageset/Redd@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/redd.imageset/Redd@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/redd.imageset/Redd@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/redd.imageset/Redd@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/saharah.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/saharah.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/saharah.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/saharah.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/saharah.imageset/Saharah@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/saharah.imageset/Saharah@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/saharah.imageset/Saharah@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/saharah.imageset/Saharah@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/wisp.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/wisp.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/wisp.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/wisp.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/wisp.imageset/Wisp@4x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/wisp.imageset/Wisp@4x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/characters/wisp.imageset/Wisp@4x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/characters/wisp.imageset/Wisp@4x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div0.imageset/Akoyagai.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div0.imageset/Akoyagai.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div0.imageset/Akoyagai.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div0.imageset/Akoyagai.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div0.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div0.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div0.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div0.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div1.imageset/Amaebi.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div1.imageset/Amaebi.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div1.imageset/Amaebi.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div1.imageset/Amaebi.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div1.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div1.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div1.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div1.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div10.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div10.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div10.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div10.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div10.imageset/Iseebi.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div10.imageset/Iseebi.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div10.imageset/Iseebi.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div10.imageset/Iseebi.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div11.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div11.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div11.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div11.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div11.imageset/Isogintyaku.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div11.imageset/Isogintyaku.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div11.imageset/Isogintyaku.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div11.imageset/Isogintyaku.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div12.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div12.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div12.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div12.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div12.imageset/Kabutogani.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div12.imageset/Kabutogani.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div12.imageset/Kabutogani.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div12.imageset/Kabutogani.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div13.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div13.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div13.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div13.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div13.imageset/Kairoudouketsu.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div13.imageset/Kairoudouketsu.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div13.imageset/Kairoudouketsu.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div13.imageset/Kairoudouketsu.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div14.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div14.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div14.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div14.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div14.imageset/Kaki.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div14.imageset/Kaki.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div14.imageset/Kaki.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div14.imageset/Kaki.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div15.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div15.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div15.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div15.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div15.imageset/Koumoridako.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div15.imageset/Koumoridako.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div15.imageset/Koumoridako.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div15.imageset/Koumoridako.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div16.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div16.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div16.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div16.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div16.imageset/Kurumaebi.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div16.imageset/Kurumaebi.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div16.imageset/Kurumaebi.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div16.imageset/Kurumaebi.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div17.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div17.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div17.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div17.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div17.imageset/Mendako.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div17.imageset/Mendako.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div17.imageset/Mendako.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div17.imageset/Mendako.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div18.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div18.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div18.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div18.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div18.imageset/Mizukurage.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div18.imageset/Mizukurage.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div18.imageset/Mizukurage.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div18.imageset/Mizukurage.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div19.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div19.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div19.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div19.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div19.imageset/Muhrugai.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div19.imageset/Muhrugai.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div19.imageset/Muhrugai.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div19.imageset/Muhrugai.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div2.imageset/Chinanago.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div2.imageset/Chinanago.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div2.imageset/Chinanago.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div2.imageset/Chinanago.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div2.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div2.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div2.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div2.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div20.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div20.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div20.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div20.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div20.imageset/Oumugai.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div20.imageset/Oumugai.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div20.imageset/Oumugai.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div20.imageset/Oumugai.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div21.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div21.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div21.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div21.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div21.imageset/Oyster.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div21.imageset/Oyster.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div21.imageset/Oyster.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div21.imageset/Oyster.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div22.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div22.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div22.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div22.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div22.imageset/Paipuuni.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div22.imageset/Paipuuni.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div22.imageset/Paipuuni.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div22.imageset/Paipuuni.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div23.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div23.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div23.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div23.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div23.imageset/Sazae.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div23.imageset/Sazae.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div23.imageset/Sazae.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div23.imageset/Sazae.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div24.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div24.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div24.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div24.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div24.imageset/Shako.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div24.imageset/Shako.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div24.imageset/Shako.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div24.imageset/Shako.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div25.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div25.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div25.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div25.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div25.imageset/Shakogai.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div25.imageset/Shakogai.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div25.imageset/Shakogai.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div25.imageset/Shakogai.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div26.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div26.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div26.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div26.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div26.imageset/Takaashigani.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div26.imageset/Takaashigani.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div26.imageset/Takaashigani.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div26.imageset/Takaashigani.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div27.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div27.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div27.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div27.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div27.imageset/Tako.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div27.imageset/Tako.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div27.imageset/Tako.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div27.imageset/Tako.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div28.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div28.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div28.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div28.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div28.imageset/Tarabagani.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div28.imageset/Tarabagani.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div28.imageset/Tarabagani.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div28.imageset/Tarabagani.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div29.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div29.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div29.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div29.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div29.imageset/Umiushi.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div29.imageset/Umiushi.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div29.imageset/Umiushi.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div29.imageset/Umiushi.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div3.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div3.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div3.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div3.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div3.imageset/Daiougusokumushi.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div3.imageset/Daiougusokumushi.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div3.imageset/Daiougusokumushi.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div3.imageset/Daiougusokumushi.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div30.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div30.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div30.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div30.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div30.imageset/Uni.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div30.imageset/Uni.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div30.imageset/Uni.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div30.imageset/Uni.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div31.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div31.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div31.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div31.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div31.imageset/Wakame.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div31.imageset/Wakame.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div31.imageset/Wakame.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div31.imageset/Wakame.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div32.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div32.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div32.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div32.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div32.imageset/Zuwaigani.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div32.imageset/Zuwaigani.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div32.imageset/Zuwaigani.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div32.imageset/Zuwaigani.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div4.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div4.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div4.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div4.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div4.imageset/DungenessCrab.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div4.imageset/DungenessCrab.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div4.imageset/DungenessCrab.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div4.imageset/DungenessCrab.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div5.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div5.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div5.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div5.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div5.imageset/Fujitsubo.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div5.imageset/Fujitsubo.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div5.imageset/Fujitsubo.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div5.imageset/Fujitsubo.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div6.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div6.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div6.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div6.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div6.imageset/Gazami.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div6.imageset/Gazami.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div6.imageset/Gazami.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div6.imageset/Gazami.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div7.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div7.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div7.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div7.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div7.imageset/Hiramushi.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div7.imageset/Hiramushi.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div7.imageset/Hiramushi.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div7.imageset/Hiramushi.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div8.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div8.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div8.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div8.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div8.imageset/Hitode.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div8.imageset/Hitode.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div8.imageset/Hitode.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div8.imageset/Hitode.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div9.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div9.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div9.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div9.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div9.imageset/Hotaruika.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div9.imageset/Hotaruika.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/diveFish/div9.imageset/Hotaruika.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/diveFish/div9.imageset/Hotaruika.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish0.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish0.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish0.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish0.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish0.imageset/Fish0.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish0.imageset/Fish0.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish0.imageset/Fish0.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish0.imageset/Fish0.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish1.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish1.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish1.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish1.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish1.imageset/Fish1.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish1.imageset/Fish1.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish1.imageset/Fish1.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish1.imageset/Fish1.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish10.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish10.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish10.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish10.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish10.imageset/Fish10.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish10.imageset/Fish10.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish10.imageset/Fish10.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish10.imageset/Fish10.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish11.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish11.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish11.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish11.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish11.imageset/Fish11.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish11.imageset/Fish11.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish11.imageset/Fish11.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish11.imageset/Fish11.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish12.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish12.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish12.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish12.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish12.imageset/Fish12.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish12.imageset/Fish12.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish12.imageset/Fish12.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish12.imageset/Fish12.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish13.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish13.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish13.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish13.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish13.imageset/Fish13.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish13.imageset/Fish13.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish13.imageset/Fish13.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish13.imageset/Fish13.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish14.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish14.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish14.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish14.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish14.imageset/Fish14.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish14.imageset/Fish14.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish14.imageset/Fish14.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish14.imageset/Fish14.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish15.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish15.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish15.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish15.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish15.imageset/Fish58.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish15.imageset/Fish58.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish15.imageset/Fish58.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish15.imageset/Fish58.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish16.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish16.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish16.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish16.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish16.imageset/Fish16.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish16.imageset/Fish16.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish16.imageset/Fish16.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish16.imageset/Fish16.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish17.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish17.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish17.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish17.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish17.imageset/Fish17.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish17.imageset/Fish17.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish17.imageset/Fish17.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish17.imageset/Fish17.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish18.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish18.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish18.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish18.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish18.imageset/Fish18.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish18.imageset/Fish18.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish18.imageset/Fish18.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish18.imageset/Fish18.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish19.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish19.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish19.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish19.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish19.imageset/Fish19.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish19.imageset/Fish19.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish19.imageset/Fish19.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish19.imageset/Fish19.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish2.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish2.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish2.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish2.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish2.imageset/Fish2.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish2.imageset/Fish2.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish2.imageset/Fish2.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish2.imageset/Fish2.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish20.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish20.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish20.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish20.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish20.imageset/Fish20.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish20.imageset/Fish20.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish20.imageset/Fish20.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish20.imageset/Fish20.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish21.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish21.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish21.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish21.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish21.imageset/Fish21.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish21.imageset/Fish21.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish21.imageset/Fish21.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish21.imageset/Fish21.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish22.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish22.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish22.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish22.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish22.imageset/Fish22.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish22.imageset/Fish22.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish22.imageset/Fish22.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish22.imageset/Fish22.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish23.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish23.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish23.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish23.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish23.imageset/Fish23.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish23.imageset/Fish23.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish23.imageset/Fish23.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish23.imageset/Fish23.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish24.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish24.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish24.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish24.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish24.imageset/Fish24.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish24.imageset/Fish24.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish24.imageset/Fish24.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish24.imageset/Fish24.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish25.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish25.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish25.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish25.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish25.imageset/Fish66.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish25.imageset/Fish66.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish25.imageset/Fish66.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish25.imageset/Fish66.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish26.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish26.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish26.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish26.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish26.imageset/Fish26.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish26.imageset/Fish26.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish26.imageset/Fish26.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish26.imageset/Fish26.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish27.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish27.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish27.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish27.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish27.imageset/Fish27.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish27.imageset/Fish27.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish27.imageset/Fish27.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish27.imageset/Fish27.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish28.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish28.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish28.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish28.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish28.imageset/Fish28.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish28.imageset/Fish28.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish28.imageset/Fish28.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish28.imageset/Fish28.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish29.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish29.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish29.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish29.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish29.imageset/Fish29.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish29.imageset/Fish29.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish29.imageset/Fish29.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish29.imageset/Fish29.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish3.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish3.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish3.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish3.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish3.imageset/Fish3.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish3.imageset/Fish3.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish3.imageset/Fish3.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish3.imageset/Fish3.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish30.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish30.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish30.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish30.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish30.imageset/Fish30.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish30.imageset/Fish30.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish30.imageset/Fish30.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish30.imageset/Fish30.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish31.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish31.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish31.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish31.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish31.imageset/Fish31.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish31.imageset/Fish31.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish31.imageset/Fish31.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish31.imageset/Fish31.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish32.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish32.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish32.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish32.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish32.imageset/Fish32.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish32.imageset/Fish32.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish32.imageset/Fish32.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish32.imageset/Fish32.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish33.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish33.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish33.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish33.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish33.imageset/Fish33.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish33.imageset/Fish33.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish33.imageset/Fish33.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish33.imageset/Fish33.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish34.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish34.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish34.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish34.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish34.imageset/Fish34.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish34.imageset/Fish34.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish34.imageset/Fish34.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish34.imageset/Fish34.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish35.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish35.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish35.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish35.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish35.imageset/Fish35.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish35.imageset/Fish35.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish35.imageset/Fish35.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish35.imageset/Fish35.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish36.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish36.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish36.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish36.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish36.imageset/Fish36.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish36.imageset/Fish36.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish36.imageset/Fish36.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish36.imageset/Fish36.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish37.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish37.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish37.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish37.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish37.imageset/Fish37.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish37.imageset/Fish37.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish37.imageset/Fish37.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish37.imageset/Fish37.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish39.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish39.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish39.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish39.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish39.imageset/Fish39.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish39.imageset/Fish39.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish39.imageset/Fish39.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish39.imageset/Fish39.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish4.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish4.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish4.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish4.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish4.imageset/Fish3.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish4.imageset/Fish3.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish4.imageset/Fish3.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish4.imageset/Fish3.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish40.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish40.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish40.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish40.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish40.imageset/Fish40.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish40.imageset/Fish40.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish40.imageset/Fish40.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish40.imageset/Fish40.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish41.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish41.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish41.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish41.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish41.imageset/Fish41.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish41.imageset/Fish41.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish41.imageset/Fish41.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish41.imageset/Fish41.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish42.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish42.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish42.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish42.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish42.imageset/Fish42.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish42.imageset/Fish42.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish42.imageset/Fish42.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish42.imageset/Fish42.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish43.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish43.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish43.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish43.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish43.imageset/Fish43.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish43.imageset/Fish43.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish43.imageset/Fish43.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish43.imageset/Fish43.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish44.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish44.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish44.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish44.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish44.imageset/Fish44.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish44.imageset/Fish44.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish44.imageset/Fish44.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish44.imageset/Fish44.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish45.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish45.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish45.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish45.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish45.imageset/Fish45.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish45.imageset/Fish45.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish45.imageset/Fish45.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish45.imageset/Fish45.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish46.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish46.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish46.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish46.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish46.imageset/Fish46.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish46.imageset/Fish46.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish46.imageset/Fish46.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish46.imageset/Fish46.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish47.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish47.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish47.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish47.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish47.imageset/Fish47.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish47.imageset/Fish47.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish47.imageset/Fish47.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish47.imageset/Fish47.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish48.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish48.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish48.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish48.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish48.imageset/Fish48.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish48.imageset/Fish48.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish48.imageset/Fish48.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish48.imageset/Fish48.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish49.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish49.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish49.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish49.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish49.imageset/Fish49.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish49.imageset/Fish49.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish49.imageset/Fish49.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish49.imageset/Fish49.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish5.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish5.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish5.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish5.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish5.imageset/Fish5.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish5.imageset/Fish5.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish5.imageset/Fish5.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish5.imageset/Fish5.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish50.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish50.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish50.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish50.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish50.imageset/Fish50.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish50.imageset/Fish50.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish50.imageset/Fish50.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish50.imageset/Fish50.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish51.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish51.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish51.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish51.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish51.imageset/Fish51.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish51.imageset/Fish51.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish51.imageset/Fish51.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish51.imageset/Fish51.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish52.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish52.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish52.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish52.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish52.imageset/Fish52.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish52.imageset/Fish52.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish52.imageset/Fish52.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish52.imageset/Fish52.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish55.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish55.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish55.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish55.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish55.imageset/Fish55.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish55.imageset/Fish55.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish55.imageset/Fish55.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish55.imageset/Fish55.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish56.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish56.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish56.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish56.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish56.imageset/Fish56.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish56.imageset/Fish56.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish56.imageset/Fish56.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish56.imageset/Fish56.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish57.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish57.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish57.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish57.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish57.imageset/Fish57.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish57.imageset/Fish57.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish57.imageset/Fish57.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish57.imageset/Fish57.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish58.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish58.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish58.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish58.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish58.imageset/Fish58.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish58.imageset/Fish58.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish58.imageset/Fish58.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish58.imageset/Fish58.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish59.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish59.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish59.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish59.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish59.imageset/Fish59.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish59.imageset/Fish59.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish59.imageset/Fish59.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish59.imageset/Fish59.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish6.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish6.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish6.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish6.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish6.imageset/Fish6.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish6.imageset/Fish6.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish6.imageset/Fish6.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish6.imageset/Fish6.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish60.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish60.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish60.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish60.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish60.imageset/Fish60.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish60.imageset/Fish60.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish60.imageset/Fish60.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish60.imageset/Fish60.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish61.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish61.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish61.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish61.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish61.imageset/Fish61.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish61.imageset/Fish61.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish61.imageset/Fish61.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish61.imageset/Fish61.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish62.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish62.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish62.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish62.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish62.imageset/Fish62.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish62.imageset/Fish62.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish62.imageset/Fish62.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish62.imageset/Fish62.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish63.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish63.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish63.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish63.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish63.imageset/Fish63.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish63.imageset/Fish63.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish63.imageset/Fish63.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish63.imageset/Fish63.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish64.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish64.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish64.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish64.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish64.imageset/Fish64.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish64.imageset/Fish64.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish64.imageset/Fish64.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish64.imageset/Fish64.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish65.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish65.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish65.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish65.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish65.imageset/Fish65.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish65.imageset/Fish65.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish65.imageset/Fish65.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish65.imageset/Fish65.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish66.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish66.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish66.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish66.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish66.imageset/Fish66.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish66.imageset/Fish66.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish66.imageset/Fish66.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish66.imageset/Fish66.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish67.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish67.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish67.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish67.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish67.imageset/Fish67.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish67.imageset/Fish67.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish67.imageset/Fish67.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish67.imageset/Fish67.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish68.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish68.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish68.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish68.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish68.imageset/Fish68.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish68.imageset/Fish68.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish68.imageset/Fish68.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish68.imageset/Fish68.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish69.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish69.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish69.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish69.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish69.imageset/Fish69.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish69.imageset/Fish69.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish69.imageset/Fish69.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish69.imageset/Fish69.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish7.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish7.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish7.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish7.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish7.imageset/Fish7.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish7.imageset/Fish7.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish7.imageset/Fish7.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish7.imageset/Fish7.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish70.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish70.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish70.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish70.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish70.imageset/Fish70.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish70.imageset/Fish70.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish70.imageset/Fish70.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish70.imageset/Fish70.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish71.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish71.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish71.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish71.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish71.imageset/Fish71.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish71.imageset/Fish71.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish71.imageset/Fish71.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish71.imageset/Fish71.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish72.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish72.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish72.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish72.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish72.imageset/Fish72.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish72.imageset/Fish72.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish72.imageset/Fish72.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish72.imageset/Fish72.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish73.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish73.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish73.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish73.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish73.imageset/Fish73.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish73.imageset/Fish73.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish73.imageset/Fish73.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish73.imageset/Fish73.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish74.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish74.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish74.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish74.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish74.imageset/Fish74.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish74.imageset/Fish74.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish74.imageset/Fish74.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish74.imageset/Fish74.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish75.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish75.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish75.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish75.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish75.imageset/Fish75.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish75.imageset/Fish75.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish75.imageset/Fish75.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish75.imageset/Fish75.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish76.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish76.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish76.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish76.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish76.imageset/Fish76.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish76.imageset/Fish76.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish76.imageset/Fish76.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish76.imageset/Fish76.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish77.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish77.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish77.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish77.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish77.imageset/Fish77.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish77.imageset/Fish77.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish77.imageset/Fish77.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish77.imageset/Fish77.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish78.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish78.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish78.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish78.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish78.imageset/Fish78.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish78.imageset/Fish78.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish78.imageset/Fish78.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish78.imageset/Fish78.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish79.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish79.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish79.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish79.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish79.imageset/Fish79.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish79.imageset/Fish79.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish79.imageset/Fish79.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish79.imageset/Fish79.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish8.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish8.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish8.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish8.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish8.imageset/Fish8.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish8.imageset/Fish8.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish8.imageset/Fish8.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish8.imageset/Fish8.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish80.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish80.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish80.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish80.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish80.imageset/Fish80.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish80.imageset/Fish80.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish80.imageset/Fish80.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish80.imageset/Fish80.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish81.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish81.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish81.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish81.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish81.imageset/Fish81.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish81.imageset/Fish81.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish81.imageset/Fish81.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish81.imageset/Fish81.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish82.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish82.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish82.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish82.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish82.imageset/Fish82.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish82.imageset/Fish82.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish82.imageset/Fish82.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish82.imageset/Fish82.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish83.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish83.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish83.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish83.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish83.imageset/Fish83.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish83.imageset/Fish83.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish83.imageset/Fish83.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish83.imageset/Fish83.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish84.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish84.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish84.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish84.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish84.imageset/Fish84.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish84.imageset/Fish84.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish84.imageset/Fish84.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish84.imageset/Fish84.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish85.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish85.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish85.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish85.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish85.imageset/Fish85.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish85.imageset/Fish85.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish85.imageset/Fish85.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish85.imageset/Fish85.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish9.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish9.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish9.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish9.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish9.imageset/Fish9.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish9.imageset/Fish9.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/fish/Fish9.imageset/Fish9.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/fish/Fish9.imageset/Fish9.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bag.imageset/Bag.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bag.imageset/Bag.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bag.imageset/Bag.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bag.imageset/Bag.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bag.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bag.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bag.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bag.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bamboo-spring.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bamboo-spring.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bamboo-spring.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bamboo-spring.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bamboo-spring.imageset/DIYBambooSpring.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bamboo-spring.imageset/DIYBambooSpring.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bamboo-spring.imageset/DIYBambooSpring.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bamboo-spring.imageset/DIYBambooSpring.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bamboo.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bamboo.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bamboo.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bamboo.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bamboo.imageset/DIYBamboo.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bamboo.imageset/DIYBamboo.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bamboo.imageset/DIYBamboo.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bamboo.imageset/DIYBamboo.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bell.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bell.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bell.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bell.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bell.imageset/icon-bell@2x.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bell.imageset/icon-bell@2x.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bell.imageset/icon-bell@2x.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bell.imageset/icon-bell@2x.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bells-tabbar.imageset/1,000_Bells_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bells-tabbar.imageset/1,000_Bells_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bells-tabbar.imageset/1,000_Bells_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bells-tabbar.imageset/1,000_Bells_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bells-tabbar.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bells-tabbar.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bells-tabbar.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bells-tabbar.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bells.imageset/1,000_Bells_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bells.imageset/1,000_Bells_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bells.imageset/1,000_Bells_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bells.imageset/1,000_Bells_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bells.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bells.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bells.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bells.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-board.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-board.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-board.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-board.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-board.imageset/Image.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-board.imageset/Image.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-board.imageset/Image.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-board.imageset/Image.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-book-tabbar.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-book-tabbar.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-book-tabbar.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-book-tabbar.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-book-tabbar.imageset/icon-book-tabbar.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-book-tabbar.imageset/icon-book-tabbar.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-book-tabbar.imageset/icon-book-tabbar.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-book-tabbar.imageset/icon-book-tabbar.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bottle-message.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bottle-message.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bottle-message.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bottle-message.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bottle-message.imageset/Message_Bottle_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bottle-message.imageset/Message_Bottle_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-bottle-message.imageset/Message_Bottle_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-bottle-message.imageset/Message_Bottle_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-branch.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-branch.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-branch.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-branch.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-branch.imageset/DIYBranch.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-branch.imageset/DIYBranch.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-branch.imageset/DIYBranch.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-branch.imageset/DIYBranch.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-cardboard-tabbar.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-cardboard-tabbar.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-cardboard-tabbar.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-cardboard-tabbar.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-cardboard-tabbar.imageset/Package_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-cardboard-tabbar.imageset/Package_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-cardboard-tabbar.imageset/Package_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-cardboard-tabbar.imageset/Package_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-cardboard.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-cardboard.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-cardboard.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-cardboard.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-cardboard.imageset/Package_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-cardboard.imageset/Package_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-cardboard.imageset/Package_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-cardboard.imageset/Package_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-ceiling.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-ceiling.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-ceiling.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-ceiling.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-ceiling.imageset/icon-ceiling.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-ceiling.imageset/icon-ceiling.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-ceiling.imageset/icon-ceiling.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-ceiling.imageset/icon-ceiling.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-clay.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-clay.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-clay.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-clay.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-clay.imageset/OreClay.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-clay.imageset/OreClay.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-clay.imageset/OreClay.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-clay.imageset/OreClay.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fence.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fence.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fence.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fence.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fence.imageset/Fence.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fence.imageset/Fence.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fence.imageset/Fence.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fence.imageset/Fence.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fish.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fish.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fish.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fish.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fish.imageset/FishBait.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fish.imageset/FishBait.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fish.imageset/FishBait.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fish.imageset/FishBait.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-floor.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-floor.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-floor.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-floor.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-floor.imageset/Floor.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-floor.imageset/Floor.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-floor.imageset/Floor.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-floor.imageset/Floor.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fossil.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fossil.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fossil.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fossil.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fossil.imageset/Fossil_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fossil.imageset/Fossil_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-fossil.imageset/Fossil_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-fossil.imageset/Fossil_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-glasses.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-glasses.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-glasses.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-glasses.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-glasses.imageset/Glasses.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-glasses.imageset/Glasses.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-glasses.imageset/Glasses.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-glasses.imageset/Glasses.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-gold.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-gold.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-gold.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-gold.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-gold.imageset/Gold_Ore.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-gold.imageset/Gold_Ore.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-gold.imageset/Gold_Ore.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-gold.imageset/Gold_Ore.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-hardwood.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-hardwood.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-hardwood.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-hardwood.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-hardwood.imageset/DIYWoodHard.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-hardwood.imageset/DIYWoodHard.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-hardwood.imageset/DIYWoodHard.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-hardwood.imageset/DIYWoodHard.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-helm.imageset/Cap.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-helm.imageset/Cap.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-helm.imageset/Cap.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-helm.imageset/Cap.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-helm.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-helm.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-helm.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-helm.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-helmet.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-helmet.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-helmet.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-helmet.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-helmet.imageset/Helmet.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-helmet.imageset/Helmet.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-helmet.imageset/Helmet.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-helmet.imageset/Helmet.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-housewares.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-housewares.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-housewares.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-housewares.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-housewares.imageset/Image.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-housewares.imageset/Image.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-housewares.imageset/Image.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-housewares.imageset/Image.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-insect.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-insect.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-insect.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-insect.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-insect.imageset/Net.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-insect.imageset/Net.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-insect.imageset/Net.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-insect.imageset/Net.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-iron.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-iron.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-iron.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-iron.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-iron.imageset/OreIron.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-iron.imageset/OreIron.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-iron.imageset/OreIron.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-iron.imageset/OreIron.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf-design.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf-design.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf-design.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf-design.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf-design.imageset/LeafDesign.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf-design.imageset/LeafDesign.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf-design.imageset/LeafDesign.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf-design.imageset/LeafDesign.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf-tabbar.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf-tabbar.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf-tabbar.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf-tabbar.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf-tabbar.imageset/Furniture_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf-tabbar.imageset/Furniture_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf-tabbar.imageset/Furniture_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf-tabbar.imageset/Furniture_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf.imageset/Furniture_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf.imageset/Furniture_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-leaf.imageset/Furniture_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-leaf.imageset/Furniture_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mapple-leaf.imageset/AutumnLeaf.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mapple-leaf.imageset/AutumnLeaf.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mapple-leaf.imageset/AutumnLeaf.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mapple-leaf.imageset/AutumnLeaf.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mapple-leaf.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mapple-leaf.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mapple-leaf.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mapple-leaf.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-miles.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-miles.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-miles.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-miles.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-miles.imageset/PlaneTicket.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-miles.imageset/PlaneTicket.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-miles.imageset/PlaneTicket.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-miles.imageset/PlaneTicket.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-miscellaneous.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-miscellaneous.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-miscellaneous.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-miscellaneous.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-miscellaneous.imageset/icon-miscellaneous.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-miscellaneous.imageset/icon-miscellaneous.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-miscellaneous.imageset/icon-miscellaneous.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-miscellaneous.imageset/icon-miscellaneous.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom1.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom1.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom1.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom1.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom1.imageset/Mush0.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom1.imageset/Mush0.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom1.imageset/Mush0.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom1.imageset/Mush0.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom2.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom2.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom2.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom2.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom2.imageset/Mush1.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom2.imageset/Mush1.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom2.imageset/Mush1.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom2.imageset/Mush1.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom3.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom3.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom3.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom3.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom3.imageset/Mush2.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom3.imageset/Mush2.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom3.imageset/Mush2.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom3.imageset/Mush2.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom4.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom4.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom4.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom4.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom4.imageset/Mush4.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom4.imageset/Mush4.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-mushroom4.imageset/Mush4.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-mushroom4.imageset/Mush4.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-nookmiles.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-nookmiles.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-nookmiles.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-nookmiles.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-nookmiles.imageset/icon-nookmiles.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-nookmiles.imageset/icon-nookmiles.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-nookmiles.imageset/icon-nookmiles.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-nookmiles.imageset/icon-nookmiles.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-nookpoint.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-nookpoint.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-nookpoint.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-nookpoint.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-nookpoint.imageset/icon-nookpoint.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-nookpoint.imageset/icon-nookpoint.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-nookpoint.imageset/icon-nookpoint.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-nookpoint.imageset/icon-nookpoint.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-paint.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-paint.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-paint.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-paint.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-paint.imageset/RemakeKit.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-paint.imageset/RemakeKit.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-paint.imageset/RemakeKit.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-paint.imageset/RemakeKit.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-pant.imageset/Bottoms.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-pant.imageset/Bottoms.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-pant.imageset/Bottoms.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-pant.imageset/Bottoms.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-pant.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-pant.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-pant.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-pant.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-pearl.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-pearl.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-pearl.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-pearl.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-pearl.imageset/icon-pearl.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-pearl.imageset/icon-pearl.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-pearl.imageset/icon-pearl.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-pearl.imageset/icon-pearl.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-photos.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-photos.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-photos.imageset/Image.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Image.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-photos.imageset/Image.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-photos.imageset/Image.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-poki.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-poki.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-poki.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-poki.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-poki.imageset/icon-poki.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-poki.imageset/icon-poki.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-poki.imageset/icon-poki.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-poki.imageset/icon-poki.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-posters.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-posters.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-posters.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-posters.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-posters.imageset/Image.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-posters.imageset/Image.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-posters.imageset/Image.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-posters.imageset/Image.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-present.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-present.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-present.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-present.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-present.imageset/Present.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-present.imageset/Present.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-present.imageset/Present.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-present.imageset/Present.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-present2.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-present2.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-present2.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-present2.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-present2.imageset/Present2.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-present2.imageset/Present2.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-present2.imageset/Present2.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-present2.imageset/Present2.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-recipe.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-recipe.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-recipe.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-recipe.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-recipe.imageset/recipe-icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-recipe.imageset/recipe-icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-recipe.imageset/recipe-icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-recipe.imageset/recipe-icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-rug.imageset/Carpet.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-rug.imageset/Carpet.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-rug.imageset/Carpet.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-rug.imageset/Carpet.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-rug.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-rug.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-rug.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-rug.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-shoes.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-shoes.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-shoes.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-shoes.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-shoes.imageset/Shoes.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-shoes.imageset/Shoes.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-shoes.imageset/Shoes.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-shoes.imageset/Shoes.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-socks.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-socks.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-socks.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-socks.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-socks.imageset/Socks.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-socks.imageset/Socks.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-socks.imageset/Socks.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-socks.imageset/Socks.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-softwood.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-softwood.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-softwood.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-softwood.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-softwood.imageset/DIYWoodSoft.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-softwood.imageset/DIYWoodSoft.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-softwood.imageset/DIYWoodSoft.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-softwood.imageset/DIYWoodSoft.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-song.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-song.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-song.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-song.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-song.imageset/Music.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-song.imageset/Music.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-song.imageset/Music.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-song.imageset/Music.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-stone.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-stone.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-stone.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-stone.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-stone.imageset/Image.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-stone.imageset/Image.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-stone.imageset/Image.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-stone.imageset/Image.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-tool.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-tool.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-tool.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-tool.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-tool.imageset/Scoop.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-tool.imageset/Scoop.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-tool.imageset/Scoop.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-tool.imageset/Scoop.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-top.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-top.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-top.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-top.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-top.imageset/Dress_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-top.imageset/Dress_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-top.imageset/Dress_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-top.imageset/Dress_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-turnip-tabbar.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-turnip-tabbar.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-turnip-tabbar.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-turnip-tabbar.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-turnip-tabbar.imageset/Turnip_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-turnip-tabbar.imageset/Turnip_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-turnip-tabbar.imageset/Turnip_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-turnip-tabbar.imageset/Turnip_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-turnip.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-turnip.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-turnip.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-turnip.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-turnip.imageset/Turnip_NH_Inv_Icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-turnip.imageset/Turnip_NH_Inv_Icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-turnip.imageset/Turnip_NH_Inv_Icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-turnip.imageset/Turnip_NH_Inv_Icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-umbrella.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-umbrella.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-umbrella.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-umbrella.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-umbrella.imageset/Umbrella.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-umbrella.imageset/Umbrella.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-umbrella.imageset/Umbrella.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-umbrella.imageset/Umbrella.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-villager-tabbar.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-villager-tabbar.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-villager-tabbar.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-villager-tabbar.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-villager-tabbar.imageset/Pietro_PC_icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-villager-tabbar.imageset/Pietro_PC_icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-villager-tabbar.imageset/Pietro_PC_icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-villager-tabbar.imageset/Pietro_PC_icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-villager.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-villager.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-villager.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-villager.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-villager.imageset/Pietro_PC_icon.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-villager.imageset/Pietro_PC_icon.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-villager.imageset/Pietro_PC_icon.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-villager.imageset/Pietro_PC_icon.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wallmounted.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wallmounted.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wallmounted.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wallmounted.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wallmounted.imageset/Image.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wallmounted.imageset/Image.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wallmounted.imageset/Image.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wallmounted.imageset/Image.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wallpaper.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wallpaper.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wallpaper.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wallpaper.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wallpaper.imageset/Wall.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wallpaper.imageset/Wall.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wallpaper.imageset/Wall.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wallpaper.imageset/Wall.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-weed.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-weed.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-weed.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-weed.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-weed.imageset/Weed.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-weed.imageset/Weed.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-weed.imageset/Weed.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-weed.imageset/Weed.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wetsuit.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wetsuit.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wetsuit.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wetsuit.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wetsuit.imageset/WetSuit.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wetsuit.imageset/WetSuit.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wetsuit.imageset/WetSuit.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wetsuit.imageset/WetSuit.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wood.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wood.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wood.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wood.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wood.imageset/DIYWoodNormal.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wood.imageset/DIYWoodNormal.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/icon-wood.imageset/DIYWoodNormal.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/icon-wood.imageset/DIYWoodNormal.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv0.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv0.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv0.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv0.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv0.imageset/Inv0.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv0.imageset/Inv0.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv0.imageset/Inv0.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv0.imageset/Inv0.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv1.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv1.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv1.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv1.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv1.imageset/Inv1.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv1.imageset/Inv1.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv1.imageset/Inv1.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv1.imageset/Inv1.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv10.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv10.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv10.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv10.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv10.imageset/Inv10.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv10.imageset/Inv10.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv10.imageset/Inv10.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv10.imageset/Inv10.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv100.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv100.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv100.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv100.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv100.imageset/Inv100.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv100.imageset/Inv100.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv100.imageset/Inv100.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv100.imageset/Inv100.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv101.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv101.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv101.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv101.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv101.imageset/Inv101.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv101.imageset/Inv101.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv101.imageset/Inv101.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv101.imageset/Inv101.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv102.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv102.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv102.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv102.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv102.imageset/Inv102.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv102.imageset/Inv102.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv102.imageset/Inv102.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv102.imageset/Inv102.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv103.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv103.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv103.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv103.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv103.imageset/Inv103.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv103.imageset/Inv103.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv103.imageset/Inv103.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv103.imageset/Inv103.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv104.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv104.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv104.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv104.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv104.imageset/Inv104.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv104.imageset/Inv104.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv104.imageset/Inv104.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv104.imageset/Inv104.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv105.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv105.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv105.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv105.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv105.imageset/Inv105.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv105.imageset/Inv105.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv105.imageset/Inv105.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv105.imageset/Inv105.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv106.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv106.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv106.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv106.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv106.imageset/Inv106.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv106.imageset/Inv106.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv106.imageset/Inv106.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv106.imageset/Inv106.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv107.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv107.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv107.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv107.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv107.imageset/Inv107.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv107.imageset/Inv107.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv107.imageset/Inv107.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv107.imageset/Inv107.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv108.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv108.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv108.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv108.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv108.imageset/Inv108.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv108.imageset/Inv108.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv108.imageset/Inv108.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv108.imageset/Inv108.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv109.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv109.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv109.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv109.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv109.imageset/Inv109.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv109.imageset/Inv109.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv109.imageset/Inv109.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv109.imageset/Inv109.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv11.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv11.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv11.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv11.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv11.imageset/Inv11.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv11.imageset/Inv11.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv11.imageset/Inv11.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv11.imageset/Inv11.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv110.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv110.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv110.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv110.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv110.imageset/Inv110.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv110.imageset/Inv110.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv110.imageset/Inv110.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv110.imageset/Inv110.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv111.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv111.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv111.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv111.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv111.imageset/Inv111.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv111.imageset/Inv111.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv111.imageset/Inv111.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv111.imageset/Inv111.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv112.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv112.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv112.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv112.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv112.imageset/Inv112.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv112.imageset/Inv112.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv112.imageset/Inv112.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv112.imageset/Inv112.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv113.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv113.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv113.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv113.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv113.imageset/Inv113.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv113.imageset/Inv113.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv113.imageset/Inv113.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv113.imageset/Inv113.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv114.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv114.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv114.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv114.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv114.imageset/Inv114.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv114.imageset/Inv114.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv114.imageset/Inv114.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv114.imageset/Inv114.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv115.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv115.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv115.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv115.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv115.imageset/Inv115.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv115.imageset/Inv115.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv115.imageset/Inv115.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv115.imageset/Inv115.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv116.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv116.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv116.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv116.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv116.imageset/Inv116.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv116.imageset/Inv116.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv116.imageset/Inv116.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv116.imageset/Inv116.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv117.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv117.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv117.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv117.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv117.imageset/Inv117.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv117.imageset/Inv117.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv117.imageset/Inv117.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv117.imageset/Inv117.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv118.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv118.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv118.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv118.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv118.imageset/Inv118.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv118.imageset/Inv118.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv118.imageset/Inv118.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv118.imageset/Inv118.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv119.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv119.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv119.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv119.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv119.imageset/Inv119.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv119.imageset/Inv119.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv119.imageset/Inv119.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv119.imageset/Inv119.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv12.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv12.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv12.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv12.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv12.imageset/Inv12.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv12.imageset/Inv12.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv12.imageset/Inv12.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv12.imageset/Inv12.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv120.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv120.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv120.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv120.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv120.imageset/Inv120.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv120.imageset/Inv120.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv120.imageset/Inv120.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv120.imageset/Inv120.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv121.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv121.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv121.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv121.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv121.imageset/Inv121.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv121.imageset/Inv121.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv121.imageset/Inv121.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv121.imageset/Inv121.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv122.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv122.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv122.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv122.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv122.imageset/Inv122.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv122.imageset/Inv122.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv122.imageset/Inv122.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv122.imageset/Inv122.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv123.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv123.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv123.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv123.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv123.imageset/Inv123.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv123.imageset/Inv123.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv123.imageset/Inv123.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv123.imageset/Inv123.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv124.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv124.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv124.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv124.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv124.imageset/Inv124.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv124.imageset/Inv124.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv124.imageset/Inv124.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv124.imageset/Inv124.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv125.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv125.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv125.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv125.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv125.imageset/Inv125.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv125.imageset/Inv125.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv125.imageset/Inv125.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv125.imageset/Inv125.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv126.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv126.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv126.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv126.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv126.imageset/Inv126.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv126.imageset/Inv126.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv126.imageset/Inv126.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv126.imageset/Inv126.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv127.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv127.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv127.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv127.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv127.imageset/Inv127.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv127.imageset/Inv127.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv127.imageset/Inv127.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv127.imageset/Inv127.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv128.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv128.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv128.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv128.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv128.imageset/Inv128.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv128.imageset/Inv128.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv128.imageset/Inv128.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv128.imageset/Inv128.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv129.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv129.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv129.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv129.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv129.imageset/Inv129.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv129.imageset/Inv129.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv129.imageset/Inv129.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv129.imageset/Inv129.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv13.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv13.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv13.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv13.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv13.imageset/Inv13.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv13.imageset/Inv13.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv13.imageset/Inv13.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv13.imageset/Inv13.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv130.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv130.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv130.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv130.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv130.imageset/Inv130.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv130.imageset/Inv130.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv130.imageset/Inv130.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv130.imageset/Inv130.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv131.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv131.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv131.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv131.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv131.imageset/Inv131.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv131.imageset/Inv131.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv131.imageset/Inv131.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv131.imageset/Inv131.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv132.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv132.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv132.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv132.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv132.imageset/Inv132.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv132.imageset/Inv132.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv132.imageset/Inv132.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv132.imageset/Inv132.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv133.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv133.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv133.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv133.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv133.imageset/Inv133.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv133.imageset/Inv133.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv133.imageset/Inv133.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv133.imageset/Inv133.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv134.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv134.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv134.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv134.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv134.imageset/Inv134.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv134.imageset/Inv134.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv134.imageset/Inv134.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv134.imageset/Inv134.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv135.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv135.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv135.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv135.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv135.imageset/Inv135.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv135.imageset/Inv135.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv135.imageset/Inv135.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv135.imageset/Inv135.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv136.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv136.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv136.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv136.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv136.imageset/Inv136.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv136.imageset/Inv136.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv136.imageset/Inv136.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv136.imageset/Inv136.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv137.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv137.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv137.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv137.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv137.imageset/Inv137.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv137.imageset/Inv137.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv137.imageset/Inv137.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv137.imageset/Inv137.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv138.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv138.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv138.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv138.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv138.imageset/Inv138.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv138.imageset/Inv138.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv138.imageset/Inv138.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv138.imageset/Inv138.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv139.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv139.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv139.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv139.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv139.imageset/Inv139.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv139.imageset/Inv139.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv139.imageset/Inv139.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv139.imageset/Inv139.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv14.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv14.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv14.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv14.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv14.imageset/Inv14.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv14.imageset/Inv14.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv14.imageset/Inv14.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv14.imageset/Inv14.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv140.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv140.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv140.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv140.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv140.imageset/Inv140.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv140.imageset/Inv140.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv140.imageset/Inv140.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv140.imageset/Inv140.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv141.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv141.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv141.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv141.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv141.imageset/Inv141.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv141.imageset/Inv141.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv141.imageset/Inv141.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv141.imageset/Inv141.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv142.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv142.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv142.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv142.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv142.imageset/Inv142.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv142.imageset/Inv142.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv142.imageset/Inv142.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv142.imageset/Inv142.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv143.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv143.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv143.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv143.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv143.imageset/Inv143.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv143.imageset/Inv143.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv143.imageset/Inv143.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv143.imageset/Inv143.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv144.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv144.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv144.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv144.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv144.imageset/Inv144.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv144.imageset/Inv144.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv144.imageset/Inv144.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv144.imageset/Inv144.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv145.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv145.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv145.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv145.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv145.imageset/Inv145.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv145.imageset/Inv145.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv145.imageset/Inv145.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv145.imageset/Inv145.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv146.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv146.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv146.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv146.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv146.imageset/Inv146.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv146.imageset/Inv146.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv146.imageset/Inv146.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv146.imageset/Inv146.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv147.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv147.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv147.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv147.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv147.imageset/Inv147.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv147.imageset/Inv147.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv147.imageset/Inv147.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv147.imageset/Inv147.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv148.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv148.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv148.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv148.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv148.imageset/Inv148.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv148.imageset/Inv148.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv148.imageset/Inv148.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv148.imageset/Inv148.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv149.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv149.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv149.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv149.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv149.imageset/Inv149.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv149.imageset/Inv149.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv149.imageset/Inv149.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv149.imageset/Inv149.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv15.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv15.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv15.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv15.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv15.imageset/Inv15.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv15.imageset/Inv15.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv15.imageset/Inv15.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv15.imageset/Inv15.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv150.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv150.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv150.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv150.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv150.imageset/Inv150.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv150.imageset/Inv150.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv150.imageset/Inv150.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv150.imageset/Inv150.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv151.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv151.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv151.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv151.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv151.imageset/Inv151.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv151.imageset/Inv151.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv151.imageset/Inv151.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv151.imageset/Inv151.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv152.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv152.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv152.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv152.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv152.imageset/Inv152.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv152.imageset/Inv152.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv152.imageset/Inv152.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv152.imageset/Inv152.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv153.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv153.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv153.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv153.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv153.imageset/Inv153.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv153.imageset/Inv153.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv153.imageset/Inv153.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv153.imageset/Inv153.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv154.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv154.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv154.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv154.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv154.imageset/Inv154.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv154.imageset/Inv154.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv154.imageset/Inv154.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv154.imageset/Inv154.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv155.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv155.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv155.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv155.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv155.imageset/Inv155.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv155.imageset/Inv155.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv155.imageset/Inv155.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv155.imageset/Inv155.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv156.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv156.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv156.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv156.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv156.imageset/Inv156.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv156.imageset/Inv156.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv156.imageset/Inv156.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv156.imageset/Inv156.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv157.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv157.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv157.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv157.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv157.imageset/Inv157.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv157.imageset/Inv157.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv157.imageset/Inv157.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv157.imageset/Inv157.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv158.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv158.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv158.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv158.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv158.imageset/Inv158.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv158.imageset/Inv158.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv158.imageset/Inv158.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv158.imageset/Inv158.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv159.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv159.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv159.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv159.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv159.imageset/Inv159.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv159.imageset/Inv159.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv159.imageset/Inv159.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv159.imageset/Inv159.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv16.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv16.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv16.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv16.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv16.imageset/Inv16.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv16.imageset/Inv16.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv16.imageset/Inv16.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv16.imageset/Inv16.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv160.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv160.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv160.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv160.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv160.imageset/Inv160.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv160.imageset/Inv160.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv160.imageset/Inv160.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv160.imageset/Inv160.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv161.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv161.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv161.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv161.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv161.imageset/Inv161.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv161.imageset/Inv161.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv161.imageset/Inv161.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv161.imageset/Inv161.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv162.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv162.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv162.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv162.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv162.imageset/Inv162.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv162.imageset/Inv162.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv162.imageset/Inv162.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv162.imageset/Inv162.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv163.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv163.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv163.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv163.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv163.imageset/Inv163.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv163.imageset/Inv163.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv163.imageset/Inv163.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv163.imageset/Inv163.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv164.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv164.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv164.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv164.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv164.imageset/Inv164.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv164.imageset/Inv164.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv164.imageset/Inv164.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv164.imageset/Inv164.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv165.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv165.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv165.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv165.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv165.imageset/Inv165.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv165.imageset/Inv165.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv165.imageset/Inv165.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv165.imageset/Inv165.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv166.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv166.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv166.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv166.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv166.imageset/Inv166.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv166.imageset/Inv166.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv166.imageset/Inv166.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv166.imageset/Inv166.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv167.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv167.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv167.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv167.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv167.imageset/Inv167.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv167.imageset/Inv167.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv167.imageset/Inv167.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv167.imageset/Inv167.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv168.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv168.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv168.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv168.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv168.imageset/Inv168.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv168.imageset/Inv168.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv168.imageset/Inv168.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv168.imageset/Inv168.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv169.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv169.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv169.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv169.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv169.imageset/Inv169.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv169.imageset/Inv169.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv169.imageset/Inv169.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv169.imageset/Inv169.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv17.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv17.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv17.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv17.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv17.imageset/Inv17.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv17.imageset/Inv17.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv17.imageset/Inv17.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv17.imageset/Inv17.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv170.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv170.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv170.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv170.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv170.imageset/Inv170.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv170.imageset/Inv170.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv170.imageset/Inv170.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv170.imageset/Inv170.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv171.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv171.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv171.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv171.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv171.imageset/Inv171.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv171.imageset/Inv171.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv171.imageset/Inv171.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv171.imageset/Inv171.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv172.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv172.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv172.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv172.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv172.imageset/Inv172.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv172.imageset/Inv172.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv172.imageset/Inv172.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv172.imageset/Inv172.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv173.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv173.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv173.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv173.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv173.imageset/Inv173.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv173.imageset/Inv173.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv173.imageset/Inv173.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv173.imageset/Inv173.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv174.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv174.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv174.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv174.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv174.imageset/Inv174.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv174.imageset/Inv174.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv174.imageset/Inv174.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv174.imageset/Inv174.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv175.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv175.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv175.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv175.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv175.imageset/Inv175.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv175.imageset/Inv175.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv175.imageset/Inv175.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv175.imageset/Inv175.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv176.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv176.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv176.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv176.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv176.imageset/Inv176.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv176.imageset/Inv176.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv176.imageset/Inv176.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv176.imageset/Inv176.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv177.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv177.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv177.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv177.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv177.imageset/Inv177.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv177.imageset/Inv177.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv177.imageset/Inv177.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv177.imageset/Inv177.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv178.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv178.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv178.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv178.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv178.imageset/Inv178.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv178.imageset/Inv178.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv178.imageset/Inv178.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv178.imageset/Inv178.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv179.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv179.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv179.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv179.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv179.imageset/Inv179.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv179.imageset/Inv179.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv179.imageset/Inv179.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv179.imageset/Inv179.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv18.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv18.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv18.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv18.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv18.imageset/Inv18.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv18.imageset/Inv18.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv18.imageset/Inv18.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv18.imageset/Inv18.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv180.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv180.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv180.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv180.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv180.imageset/Inv180.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv180.imageset/Inv180.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv180.imageset/Inv180.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv180.imageset/Inv180.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv181.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv181.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv181.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv181.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv181.imageset/Inv181.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv181.imageset/Inv181.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv181.imageset/Inv181.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv181.imageset/Inv181.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv182.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv182.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv182.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv182.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv182.imageset/Inv182.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv182.imageset/Inv182.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv182.imageset/Inv182.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv182.imageset/Inv182.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv183.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv183.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv183.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv183.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv183.imageset/Inv183.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv183.imageset/Inv183.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv183.imageset/Inv183.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv183.imageset/Inv183.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv184.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv184.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv184.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv184.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv184.imageset/Inv184.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv184.imageset/Inv184.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv184.imageset/Inv184.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv184.imageset/Inv184.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv185.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv185.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv185.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv185.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv185.imageset/Inv185.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv185.imageset/Inv185.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv185.imageset/Inv185.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv185.imageset/Inv185.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv186.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv186.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv186.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv186.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv186.imageset/Inv186.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv186.imageset/Inv186.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv186.imageset/Inv186.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv186.imageset/Inv186.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv187.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv187.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv187.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv187.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv187.imageset/Inv187.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv187.imageset/Inv187.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv187.imageset/Inv187.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv187.imageset/Inv187.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv188.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv188.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv188.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv188.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv188.imageset/Inv188.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv188.imageset/Inv188.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv188.imageset/Inv188.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv188.imageset/Inv188.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv189.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv189.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv189.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv189.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv189.imageset/Inv189.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv189.imageset/Inv189.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv189.imageset/Inv189.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv189.imageset/Inv189.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv19.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv19.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv19.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv19.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv19.imageset/Inv19.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv19.imageset/Inv19.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv19.imageset/Inv19.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv19.imageset/Inv19.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv190.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv190.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv190.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv190.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv190.imageset/Inv190.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv190.imageset/Inv190.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv190.imageset/Inv190.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv190.imageset/Inv190.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv191.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv191.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv191.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv191.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv191.imageset/Inv191.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv191.imageset/Inv191.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv191.imageset/Inv191.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv191.imageset/Inv191.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv192.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv192.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv192.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv192.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv192.imageset/Inv192.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv192.imageset/Inv192.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv192.imageset/Inv192.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv192.imageset/Inv192.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv193.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv193.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv193.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv193.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv193.imageset/Inv193.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv193.imageset/Inv193.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv193.imageset/Inv193.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv193.imageset/Inv193.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv194.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv194.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv194.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv194.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv194.imageset/Inv194.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv194.imageset/Inv194.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv194.imageset/Inv194.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv194.imageset/Inv194.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv195.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv195.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv195.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv195.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv195.imageset/Inv195.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv195.imageset/Inv195.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv195.imageset/Inv195.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv195.imageset/Inv195.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv196.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv196.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv196.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv196.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv196.imageset/Inv196.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv196.imageset/Inv196.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv196.imageset/Inv196.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv196.imageset/Inv196.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv197.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv197.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv197.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv197.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv197.imageset/Inv197.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv197.imageset/Inv197.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv197.imageset/Inv197.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv197.imageset/Inv197.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv198.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv198.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv198.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv198.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv198.imageset/Inv198.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv198.imageset/Inv198.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv198.imageset/Inv198.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv198.imageset/Inv198.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv199.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv199.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv199.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv199.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv199.imageset/Inv199.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv199.imageset/Inv199.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv199.imageset/Inv199.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv199.imageset/Inv199.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv2.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv2.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv2.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv2.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv2.imageset/Inv2.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv2.imageset/Inv2.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv2.imageset/Inv2.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv2.imageset/Inv2.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv20.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv20.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv20.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv20.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv20.imageset/Inv20.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv20.imageset/Inv20.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv20.imageset/Inv20.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv20.imageset/Inv20.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv21.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv21.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv21.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv21.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv21.imageset/Inv21.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv21.imageset/Inv21.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv21.imageset/Inv21.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv21.imageset/Inv21.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv22.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv22.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv22.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv22.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv22.imageset/Inv22.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv22.imageset/Inv22.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv22.imageset/Inv22.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv22.imageset/Inv22.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv23.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv23.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv23.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv23.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv23.imageset/Inv23.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv23.imageset/Inv23.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv23.imageset/Inv23.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv23.imageset/Inv23.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv24.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv24.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv24.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv24.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv24.imageset/Inv24.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv24.imageset/Inv24.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv24.imageset/Inv24.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv24.imageset/Inv24.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv25.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv25.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv25.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv25.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv25.imageset/Inv25.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv25.imageset/Inv25.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv25.imageset/Inv25.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv25.imageset/Inv25.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv26.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv26.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv26.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv26.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv26.imageset/Inv26.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv26.imageset/Inv26.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv26.imageset/Inv26.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv26.imageset/Inv26.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv27.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv27.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv27.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv27.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv27.imageset/Inv27.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv27.imageset/Inv27.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv27.imageset/Inv27.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv27.imageset/Inv27.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv28.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv28.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv28.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv28.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv28.imageset/Inv28.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv28.imageset/Inv28.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv28.imageset/Inv28.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv28.imageset/Inv28.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv29.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv29.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv29.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv29.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv29.imageset/Inv29.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv29.imageset/Inv29.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv29.imageset/Inv29.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv29.imageset/Inv29.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv3.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv3.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv3.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv3.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv3.imageset/Inv3.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv3.imageset/Inv3.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv3.imageset/Inv3.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv3.imageset/Inv3.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv30.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv30.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv30.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv30.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv30.imageset/Inv30.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv30.imageset/Inv30.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv30.imageset/Inv30.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv30.imageset/Inv30.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv31.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv31.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv31.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv31.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv31.imageset/Inv31.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv31.imageset/Inv31.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv31.imageset/Inv31.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv31.imageset/Inv31.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv32.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv32.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv32.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv32.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv32.imageset/Inv32.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv32.imageset/Inv32.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv32.imageset/Inv32.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv32.imageset/Inv32.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv33.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv33.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv33.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv33.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv33.imageset/Inv33.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv33.imageset/Inv33.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv33.imageset/Inv33.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv33.imageset/Inv33.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv34.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv34.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv34.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv34.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv34.imageset/Inv34.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv34.imageset/Inv34.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv34.imageset/Inv34.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv34.imageset/Inv34.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv35.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv35.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv35.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv35.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv35.imageset/Inv35.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv35.imageset/Inv35.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv35.imageset/Inv35.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv35.imageset/Inv35.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv36.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv36.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv36.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv36.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv36.imageset/Inv36.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv36.imageset/Inv36.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv36.imageset/Inv36.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv36.imageset/Inv36.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv37.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv37.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv37.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv37.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv37.imageset/Inv37.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv37.imageset/Inv37.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv37.imageset/Inv37.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv37.imageset/Inv37.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv38.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv38.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv38.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv38.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv38.imageset/Inv38.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv38.imageset/Inv38.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv38.imageset/Inv38.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv38.imageset/Inv38.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv39.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv39.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv39.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv39.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv39.imageset/Inv39.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv39.imageset/Inv39.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv39.imageset/Inv39.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv39.imageset/Inv39.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv4.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv4.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv4.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv4.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv4.imageset/Inv4.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv4.imageset/Inv4.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv4.imageset/Inv4.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv4.imageset/Inv4.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv40.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv40.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv40.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv40.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv40.imageset/Inv40.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv40.imageset/Inv40.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv40.imageset/Inv40.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv40.imageset/Inv40.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv41.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv41.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv41.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv41.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv41.imageset/Inv41.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv41.imageset/Inv41.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv41.imageset/Inv41.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv41.imageset/Inv41.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv42.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv42.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv42.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv42.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv42.imageset/Inv42.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv42.imageset/Inv42.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv42.imageset/Inv42.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv42.imageset/Inv42.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv43.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv43.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv43.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv43.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv43.imageset/Inv43.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv43.imageset/Inv43.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv43.imageset/Inv43.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv43.imageset/Inv43.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv44.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv44.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv44.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv44.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv44.imageset/Inv44.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv44.imageset/Inv44.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv44.imageset/Inv44.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv44.imageset/Inv44.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv45.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv45.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv45.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv45.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv45.imageset/Inv45.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv45.imageset/Inv45.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv45.imageset/Inv45.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv45.imageset/Inv45.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv46.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv46.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv46.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv46.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv46.imageset/Inv46.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv46.imageset/Inv46.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv46.imageset/Inv46.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv46.imageset/Inv46.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv47.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv47.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv47.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv47.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv47.imageset/Inv47.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv47.imageset/Inv47.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv47.imageset/Inv47.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv47.imageset/Inv47.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv48.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv48.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv48.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv48.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv48.imageset/Inv48.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv48.imageset/Inv48.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv48.imageset/Inv48.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv48.imageset/Inv48.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv49.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv49.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv49.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv49.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv49.imageset/Inv49.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv49.imageset/Inv49.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv49.imageset/Inv49.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv49.imageset/Inv49.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv5.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv5.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv5.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv5.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv5.imageset/Inv5.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv5.imageset/Inv5.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv5.imageset/Inv5.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv5.imageset/Inv5.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv50.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv50.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv50.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv50.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv50.imageset/Inv50.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv50.imageset/Inv50.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv50.imageset/Inv50.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv50.imageset/Inv50.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv51.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv51.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv51.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv51.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv51.imageset/Inv51.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv51.imageset/Inv51.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv51.imageset/Inv51.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv51.imageset/Inv51.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv52.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv52.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv52.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv52.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv52.imageset/Inv52.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv52.imageset/Inv52.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv52.imageset/Inv52.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv52.imageset/Inv52.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv53.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv53.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv53.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv53.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv53.imageset/Inv53.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv53.imageset/Inv53.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv53.imageset/Inv53.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv53.imageset/Inv53.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv54.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv54.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv54.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv54.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv54.imageset/Inv54.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv54.imageset/Inv54.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv54.imageset/Inv54.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv54.imageset/Inv54.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv55.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv55.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv55.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv55.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv55.imageset/Inv55.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv55.imageset/Inv55.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv55.imageset/Inv55.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv55.imageset/Inv55.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv56.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv56.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv56.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv56.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv56.imageset/Inv56.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv56.imageset/Inv56.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv56.imageset/Inv56.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv56.imageset/Inv56.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv57.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv57.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv57.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv57.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv57.imageset/Inv57.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv57.imageset/Inv57.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv57.imageset/Inv57.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv57.imageset/Inv57.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv58.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv58.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv58.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv58.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv58.imageset/Inv58.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv58.imageset/Inv58.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv58.imageset/Inv58.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv58.imageset/Inv58.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv59.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv59.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv59.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv59.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv59.imageset/Inv59.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv59.imageset/Inv59.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv59.imageset/Inv59.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv59.imageset/Inv59.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv6.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv6.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv6.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv6.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv6.imageset/Inv6.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv6.imageset/Inv6.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv6.imageset/Inv6.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv6.imageset/Inv6.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv60.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv60.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv60.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv60.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv60.imageset/Inv60.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv60.imageset/Inv60.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv60.imageset/Inv60.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv60.imageset/Inv60.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv61.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv61.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv61.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv61.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv61.imageset/Inv61.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv61.imageset/Inv61.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv61.imageset/Inv61.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv61.imageset/Inv61.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv62.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv62.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv62.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv62.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv62.imageset/Inv62.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv62.imageset/Inv62.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv62.imageset/Inv62.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv62.imageset/Inv62.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv63.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv63.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv63.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv63.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv63.imageset/Inv63.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv63.imageset/Inv63.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv63.imageset/Inv63.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv63.imageset/Inv63.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv64.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv64.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv64.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv64.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv64.imageset/Inv64.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv64.imageset/Inv64.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv64.imageset/Inv64.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv64.imageset/Inv64.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv65.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv65.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv65.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv65.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv65.imageset/Inv65.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv65.imageset/Inv65.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv65.imageset/Inv65.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv65.imageset/Inv65.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv66.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv66.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv66.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv66.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv66.imageset/Inv66.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv66.imageset/Inv66.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv66.imageset/Inv66.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv66.imageset/Inv66.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv67.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv67.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv67.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv67.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv67.imageset/Inv67.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv67.imageset/Inv67.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv67.imageset/Inv67.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv67.imageset/Inv67.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv68.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv68.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv68.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv68.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv68.imageset/Inv68.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv68.imageset/Inv68.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv68.imageset/Inv68.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv68.imageset/Inv68.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv69.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv69.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv69.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv69.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv69.imageset/Inv69.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv69.imageset/Inv69.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv69.imageset/Inv69.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv69.imageset/Inv69.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv7.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv7.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv7.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv7.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv7.imageset/Inv7.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv7.imageset/Inv7.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv7.imageset/Inv7.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv7.imageset/Inv7.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv70.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv70.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv70.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv70.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv70.imageset/Inv70.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv70.imageset/Inv70.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv70.imageset/Inv70.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv70.imageset/Inv70.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv71.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv71.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv71.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv71.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv71.imageset/Inv71.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv71.imageset/Inv71.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv71.imageset/Inv71.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv71.imageset/Inv71.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv72.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv72.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv72.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv72.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv72.imageset/Inv72.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv72.imageset/Inv72.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv72.imageset/Inv72.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv72.imageset/Inv72.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv73.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv73.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv73.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv73.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv73.imageset/Inv73.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv73.imageset/Inv73.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv73.imageset/Inv73.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv73.imageset/Inv73.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv74.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv74.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv74.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv74.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv74.imageset/Inv74.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv74.imageset/Inv74.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv74.imageset/Inv74.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv74.imageset/Inv74.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv75.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv75.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv75.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv75.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv75.imageset/Inv75.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv75.imageset/Inv75.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv75.imageset/Inv75.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv75.imageset/Inv75.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv76.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv76.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv76.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv76.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv76.imageset/Inv76.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv76.imageset/Inv76.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv76.imageset/Inv76.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv76.imageset/Inv76.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv77.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv77.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv77.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv77.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv77.imageset/Inv77.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv77.imageset/Inv77.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv77.imageset/Inv77.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv77.imageset/Inv77.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv78.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv78.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv78.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv78.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv78.imageset/Inv78.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv78.imageset/Inv78.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv78.imageset/Inv78.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv78.imageset/Inv78.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv79.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv79.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv79.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv79.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv79.imageset/Inv79.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv79.imageset/Inv79.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv79.imageset/Inv79.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv79.imageset/Inv79.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv8.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv8.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv8.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv8.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv8.imageset/Inv8.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv8.imageset/Inv8.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv8.imageset/Inv8.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv8.imageset/Inv8.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv80.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv80.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv80.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv80.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv80.imageset/Inv80.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv80.imageset/Inv80.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv80.imageset/Inv80.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv80.imageset/Inv80.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv81.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv81.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv81.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv81.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv81.imageset/Inv81.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv81.imageset/Inv81.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv81.imageset/Inv81.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv81.imageset/Inv81.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv82.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv82.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv82.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv82.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv82.imageset/Inv82.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv82.imageset/Inv82.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv82.imageset/Inv82.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv82.imageset/Inv82.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv83.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv83.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv83.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv83.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv83.imageset/Inv83.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv83.imageset/Inv83.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv83.imageset/Inv83.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv83.imageset/Inv83.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv84.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv84.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv84.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv84.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv84.imageset/Inv84.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv84.imageset/Inv84.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv84.imageset/Inv84.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv84.imageset/Inv84.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv85.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv85.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv85.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv85.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv85.imageset/Inv85.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv85.imageset/Inv85.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv85.imageset/Inv85.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv85.imageset/Inv85.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv86.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv86.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv86.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv86.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv86.imageset/Inv86.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv86.imageset/Inv86.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv86.imageset/Inv86.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv86.imageset/Inv86.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv87.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv87.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv87.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv87.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv87.imageset/Inv87.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv87.imageset/Inv87.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv87.imageset/Inv87.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv87.imageset/Inv87.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv88.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv88.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv88.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv88.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv88.imageset/Inv88.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv88.imageset/Inv88.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv88.imageset/Inv88.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv88.imageset/Inv88.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv89.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv89.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv89.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv89.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv89.imageset/Inv89.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv89.imageset/Inv89.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv89.imageset/Inv89.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv89.imageset/Inv89.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv9.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv9.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv9.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv9.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv9.imageset/Inv9.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv9.imageset/Inv9.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv9.imageset/Inv9.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv9.imageset/Inv9.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv90.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv90.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv90.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv90.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv90.imageset/Inv90.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv90.imageset/Inv90.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv90.imageset/Inv90.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv90.imageset/Inv90.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv91.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv91.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv91.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv91.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv91.imageset/Inv91.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv91.imageset/Inv91.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv91.imageset/Inv91.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv91.imageset/Inv91.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv92.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv92.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv92.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv92.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv92.imageset/Inv92.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv92.imageset/Inv92.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv92.imageset/Inv92.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv92.imageset/Inv92.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv93.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv93.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv93.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv93.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv93.imageset/Inv93.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv93.imageset/Inv93.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv93.imageset/Inv93.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv93.imageset/Inv93.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv94.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv94.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv94.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv94.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv94.imageset/Inv94.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv94.imageset/Inv94.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv94.imageset/Inv94.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv94.imageset/Inv94.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv95.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv95.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv95.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv95.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv95.imageset/Inv95.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv95.imageset/Inv95.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv95.imageset/Inv95.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv95.imageset/Inv95.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv96.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv96.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv96.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv96.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv96.imageset/Inv96.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv96.imageset/Inv96.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv96.imageset/Inv96.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv96.imageset/Inv96.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv97.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv97.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv97.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv97.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv97.imageset/Inv97.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv97.imageset/Inv97.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv97.imageset/Inv97.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv97.imageset/Inv97.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv98.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv98.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv98.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv98.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv98.imageset/Inv98.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv98.imageset/Inv98.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv98.imageset/Inv98.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv98.imageset/Inv98.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv99.imageset/Contents.json b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv99.imageset/Contents.json similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv99.imageset/Contents.json rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv99.imageset/Contents.json diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv99.imageset/Inv99.png b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv99.imageset/Inv99.png similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Assets.xcassets/icons/inventory/Inv99.imageset/Inv99.png rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Assets.xcassets/icons/inventory/Inv99.imageset/Inv99.png diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Base.lproj/LaunchScreen.storyboard b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Base.lproj/LaunchScreen.storyboard rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/Base.lproj/LaunchScreen.storyboard diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/SceneDelegate.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/SceneDelegate.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/SceneDelegate.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/SceneDelegate.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/ko.lproj/LaunchScreen.strings b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/ko.lproj/LaunchScreen.strings similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/ko.lproj/LaunchScreen.strings rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Resources/ko.lproj/LaunchScreen.strings diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/CoreDataStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/CoreDataStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/CoreDataStorage.xcdatamodeld/.xccurrentversion b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.xcdatamodeld/.xccurrentversion similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/CoreDataStorage.xcdatamodeld/.xccurrentversion rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.xcdatamodeld/.xccurrentversion diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents similarity index 96% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents index e3df6727..8c6c2379 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/CoreDataStorage.xcdatamodeld/UserCollectionEntity.xcdatamodel/contents @@ -70,6 +70,7 @@ + @@ -125,8 +126,8 @@ - - - + + + \ No newline at end of file diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/DailyTaskStorage/CoreDataDailyTaskStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/DailyTaskStorage/CoreDataDailyTaskStorage.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/DailyTaskStorage/CoreDataDailyTaskStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/DailyTaskStorage/CoreDataDailyTaskStorage.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/DailyTaskStorage/DailyTaskStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/DailyTaskStorage/DailyTaskStorage.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/DailyTaskStorage/DailyTaskStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/DailyTaskStorage/DailyTaskStorage.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/DailyTaskStorage/EntityMapping/DailyTaskEntity+Mapping.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/DailyTaskStorage/EntityMapping/DailyTaskEntity+Mapping.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/DailyTaskStorage/EntityMapping/DailyTaskEntity+Mapping.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/DailyTaskStorage/EntityMapping/DailyTaskEntity+Mapping.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/ItemsStorage/CoreDataItemsStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/CoreDataItemsStorage.swift similarity index 64% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/ItemsStorage/CoreDataItemsStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/CoreDataItemsStorage.swift index d5981ccc..6e56e337 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/ItemsStorage/CoreDataItemsStorage.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/CoreDataItemsStorage.swift @@ -49,4 +49,30 @@ final class CoreDataItemsStorage: ItemsStorage { } } } + + func updates(_ items: [Item]) { + coreDataStorage.performBackgroundTask { context in + do { + let object = try self.coreDataStorage.getUserCollection(context) + let newItems = items.map { ItemEntity($0, context: context) } + object.addToCritters(NSSet(array: newItems)) + context.saveContext() + } catch { + debugPrint(error) + } + } + } + + func reset(category: Category) { + coreDataStorage.performBackgroundTask { context in + do { + let object = try self.coreDataStorage.getUserCollection(context) + let items = object.critters?.allObjects as? [ItemEntity] ?? [] + object.removeFromCritters(NSSet(array: items.filter { $0.category == category.rawValue })) + context.saveContext() + } catch { + debugPrint(error) + } + } + } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/ItemsStorage/EntityMapping/ItemEntity+Mapping.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/EntityMapping/ItemEntity+Mapping.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/ItemsStorage/EntityMapping/ItemEntity+Mapping.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/EntityMapping/ItemEntity+Mapping.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/ItemsStorage/ItemsStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/ItemsStorage.swift similarity index 75% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/ItemsStorage/ItemsStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/ItemsStorage.swift index c2eeaaae..6259e0dc 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/ItemsStorage/ItemsStorage.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/ItemsStorage/ItemsStorage.swift @@ -9,6 +9,9 @@ import Foundation import RxSwift protocol ItemsStorage { + func fetch() -> Single<[Item]> func update(_ item: Item) + func updates(_ items: [Item]) + func reset(category: Category) } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/UserInfoStorage/CoreDataUserInfoStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/UserInfoStorage/CoreDataUserInfoStorage.swift similarity index 59% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/UserInfoStorage/CoreDataUserInfoStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/UserInfoStorage/CoreDataUserInfoStorage.swift index d14b8286..44e85a6d 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/UserInfoStorage/CoreDataUserInfoStorage.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/UserInfoStorage/CoreDataUserInfoStorage.swift @@ -7,8 +7,9 @@ import Foundation import RxSwift +import CoreData -final class CoreDataUserInfoStorage { +final class CoreDataUserInfoStorage: UserInfoStorage { private let coreDataStorage: CoreDataStorage @@ -16,20 +17,11 @@ final class CoreDataUserInfoStorage { self.coreDataStorage = coreDataStorage } - func fetchUserInfo() -> Single { - return Single.create { single in - self.coreDataStorage.performBackgroundTask { context in - do { - let object = try self.coreDataStorage.getUserCollection(context) - let userInfo = object.toDomain() - single(.success(userInfo)) - } catch { - single(.failure(CoreDataStorageError.readError(error))) - } - } - return Disposables.create() - } - + func fetchUserInfo() -> UserInfo? { + let context = coreDataStorage.persistentContainer.viewContext + let object = try? self.coreDataStorage.getUserCollection(context) + let userInfo = object?.toDomain() + return userInfo } func updateUserInfo(_ userInfo: UserInfo) { @@ -40,6 +32,7 @@ final class CoreDataUserInfoStorage { object.islandName = userInfo.islandName object.islandFruit = userInfo.islandFruit.rawValue object.hemisphere = userInfo.hemisphere.rawValue + object.islandReputation = Int16(userInfo.islandReputation) context.saveContext() } catch { debugPrint(error) @@ -49,11 +42,8 @@ final class CoreDataUserInfoStorage { func resetUserInfo() { coreDataStorage.performBackgroundTask { [weak self] context in - let object = try? self?.coreDataStorage.getUserCollection(context) - object?.name = nil - object?.islandName = nil - object?.islandFruit = nil - object?.hemisphere = nil + let object = try? self?.coreDataStorage.getUserCollection(context) as? NSManagedObject + object.flatMap { context.delete($0) } context.saveContext() } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/UserInfoStorage/EntityMapping/UserCollectionEntity+Mapping.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/UserInfoStorage/EntityMapping/UserCollectionEntity+Mapping.swift similarity index 85% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/UserInfoStorage/EntityMapping/UserCollectionEntity+Mapping.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/UserInfoStorage/EntityMapping/UserCollectionEntity+Mapping.swift index a3bc7b65..43e3e11e 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/UserInfoStorage/EntityMapping/UserCollectionEntity+Mapping.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/UserInfoStorage/EntityMapping/UserCollectionEntity+Mapping.swift @@ -15,6 +15,7 @@ extension UserCollectionEntity { self.islandName = userInfo.islandName self.islandFruit = userInfo.islandFruit.imageName self.hemisphere = userInfo.hemisphere.rawValue.capitalized + self.islandReputation = Int16(userInfo.islandReputation) } func toDomain() -> UserInfo { @@ -22,7 +23,8 @@ extension UserCollectionEntity { name: self.name ?? "", islandName: self.islandName ?? "", islandFruit: Fruit(rawValue: self.islandFruit ?? "") ?? .apple, - hemisphere: Hemisphere(rawValue: self.hemisphere ?? "") ?? .north + hemisphere: Hemisphere(rawValue: self.hemisphere ?? "") ?? .north, + islandReputation: Int(self.islandReputation) ) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/UserInfoStorage/UserInfoStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/UserInfoStorage/UserInfoStorage.swift new file mode 100644 index 00000000..3592695f --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/UserInfoStorage/UserInfoStorage.swift @@ -0,0 +1,14 @@ +// +// UserInfoStorage.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/10. +// + +import Foundation + +protocol UserInfoStorage { + func fetchUserInfo() -> UserInfo? + func updateUserInfo(_ userInfo: UserInfo) + func resetUserInfo() +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersHouseStorage/CoreDataVillagersHouseStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersHouseStorage/CoreDataVillagersHouseStorage.swift similarity index 65% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersHouseStorage/CoreDataVillagersHouseStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersHouseStorage/CoreDataVillagersHouseStorage.swift index b20c760c..e39a8e31 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersHouseStorage/CoreDataVillagersHouseStorage.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersHouseStorage/CoreDataVillagersHouseStorage.swift @@ -16,19 +16,12 @@ final class CoreDataVillagersHouseStorage: VillagersHouseStorage { self.coreDataStorage = coreDataStorage } - func fetch() -> Single<[Villager]> { - return Single.create { single in - self.coreDataStorage.performBackgroundTask { context in - do { - let object = try self.coreDataStorage.getUserCollection(context) - let villagers = object.villagersHouse?.allObjects as? [VillagersHouseEntity] ?? [] - single(.success(villagers.map { $0.toDomain() })) - } catch { - single(.failure(CoreDataStorageError.readError(error))) - } - } - return Disposables.create() - } + func fetch() -> [Villager] { + let context = coreDataStorage.persistentContainer.viewContext + let object = try? self.coreDataStorage.getUserCollection(context) + let villagers = object?.villagersHouse?.allObjects as? [VillagersHouseEntity] ?? [] + return villagers.compactMap { $0.toDomain() } + .sorted(by: { $0.translations.localizedName() < $1.translations.localizedName() }) } func update(_ villager: Villager) { diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersHouseStorage/EntityMapping/VillagersHouseEntity+Mapping.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersHouseStorage/EntityMapping/VillagersHouseEntity+Mapping.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersHouseStorage/EntityMapping/VillagersHouseEntity+Mapping.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersHouseStorage/EntityMapping/VillagersHouseEntity+Mapping.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersHouseStorage/VillagersHouseStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersHouseStorage/VillagersHouseStorage.swift similarity index 84% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersHouseStorage/VillagersHouseStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersHouseStorage/VillagersHouseStorage.swift index 8627b417..b3011455 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersHouseStorage/VillagersHouseStorage.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersHouseStorage/VillagersHouseStorage.swift @@ -9,6 +9,6 @@ import Foundation import RxSwift protocol VillagersHouseStorage { - func fetch() -> Single<[Villager]> + func fetch() -> [Villager] func update(_ villager: Villager) } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersLikeStorage/CoreDataVillagersLikeStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersLikeStorage/CoreDataVillagersLikeStorage.swift similarity index 65% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersLikeStorage/CoreDataVillagersLikeStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersLikeStorage/CoreDataVillagersLikeStorage.swift index 6a415fa2..36675244 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersLikeStorage/CoreDataVillagersLikeStorage.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersLikeStorage/CoreDataVillagersLikeStorage.swift @@ -16,19 +16,12 @@ final class CoreDataVillagersLikeStorage: VillagersLikeStorage { self.coreDataStorage = coreDataStorage } - func fetch() -> Single<[Villager]> { - return Single.create { single in - self.coreDataStorage.performBackgroundTask { context in - do { - let object = try self.coreDataStorage.getUserCollection(context) - let villagers = object.villagersLike?.allObjects as? [VillagersLikeEntity] ?? [] - single(.success(villagers.map { $0.toDomain() })) - } catch { - single(.failure(CoreDataStorageError.readError(error))) - } - } - return Disposables.create() - } + func fetch() -> [Villager] { + let context = coreDataStorage.persistentContainer.viewContext + let object = try? self.coreDataStorage.getUserCollection(context) + let villagers = object?.villagersLike?.allObjects as? [VillagersLikeEntity] ?? [] + return villagers.map { $0.toDomain() } + .sorted(by: { $0.translations.localizedName() < $1.translations.localizedName() }) } func update(_ villager: Villager) { diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersLikeStorage/EntityMapping/VillagersLikeEntity+Mapping.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersLikeStorage/EntityMapping/VillagersLikeEntity+Mapping.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersLikeStorage/EntityMapping/VillagersLikeEntity+Mapping.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersLikeStorage/EntityMapping/VillagersLikeEntity+Mapping.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersLikeStorage/VillagersLikeStorage.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersLikeStorage/VillagersLikeStorage.swift similarity index 84% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersLikeStorage/VillagersLikeStorage.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersLikeStorage/VillagersLikeStorage.swift index 67b7008f..48025fea 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/CoreDataStorage/VillagersLikeStorage/VillagersLikeStorage.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/CoreDataStorage/VillagersLikeStorage/VillagersLikeStorage.swift @@ -9,6 +9,6 @@ import Foundation import RxSwift protocol VillagersLikeStorage { - func fetch() -> Single<[Villager]> + func fetch() -> [Villager] func update(_ villager: Villager) } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/Array+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Array+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/Array+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Array+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/Collection+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Collection+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/Collection+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Collection+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/Date+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Date+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/Date+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Date+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/Int+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Int+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/Int+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Int+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Reactor+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Reactor+extension.swift new file mode 100644 index 00000000..a0040025 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/Reactor+extension.swift @@ -0,0 +1,17 @@ +// +// Reactor+extension.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/30. +// + +import UIKit +import RxSwift +import RxCocoa + +extension Reactive where Base: UIViewController { + var viewDidLoad: ControlEvent { + let source = self.methodInvoked(#selector(Base.viewDidLoad)).map { _ in } + return ControlEvent(events: source) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/String+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/String+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/String+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/String+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIButton+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIButton+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIButton+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIButton+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UICollectionView+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UICollectionView+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UICollectionView+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UICollectionView+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIColor+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIColor+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIColor+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIColor+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIFont+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIFont+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIFont+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIFont+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIImage+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIImage+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIImage+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIImage+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIImageView+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIImageView+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIImageView+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIImageView+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UILabel+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UILabel+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UILabel+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UILabel+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIMenu+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIMenu+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIMenu+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIMenu+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UINavigationItem.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UINavigationItem.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UINavigationItem.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UINavigationItem.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIStackView+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIStackView+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIStackView+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIStackView+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UITableView+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UITableView+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UITableView+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UITableView+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIView+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIView+extension.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIView+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIView+extension.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIViewController+extension.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIViewController+extension.swift similarity index 66% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIViewController+extension.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIViewController+extension.swift index 28e32747..61eacd58 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Extension/UI/UIViewController+extension.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Extension/UI/UIViewController+extension.swift @@ -49,4 +49,26 @@ extension UIViewController { return Disposables.create { alert.dismiss(animated: true, completion: nil) } } } + + func showAlert(title: String?, message: String?) -> Observable { + return Observable.create { observer in + let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) + alert.addAction( + UIAlertAction(title: "Cancel".localized, style: .destructive) { _ in + alert.dismiss(animated: true) + observer.onNext(false) + observer.onCompleted() + } + ) + alert.addAction( + UIAlertAction(title: "OK".localized, style: .default) { _ in + alert.dismiss(animated: true) + observer.onNext(true) + observer.onCompleted() + } + ) + self.present(alert, animated: true, completion: nil) + return Disposables.create { alert.dismiss(animated: true) } + } + } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/DailyTask.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/DailyTask.swift similarity index 98% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/DailyTask.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/DailyTask.swift index 09604e78..86d5676a 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/DailyTask.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/DailyTask.swift @@ -115,3 +115,5 @@ extension DailyTask { ] } } + +extension DailyTask: Equatable {} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Fruit.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Fruit.swift similarity index 95% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Fruit.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Fruit.swift index 0176401b..44096d66 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Fruit.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Fruit.swift @@ -18,7 +18,7 @@ enum Fruit: String, CaseIterable { return self.rawValue.capitalized } - static func title(_ string: String) -> String? { + static func transform(_ string: String) -> String? { switch string { case Fruit.apple.imageName.localized: return Fruit.apple.rawValue case Fruit.orange.imageName.localized: return Fruit.orange.rawValue diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Hemisphere.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Hemisphere.swift similarity index 92% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Hemisphere.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Hemisphere.swift index 80285522..e713bdc3 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Hemisphere.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Hemisphere.swift @@ -11,7 +11,7 @@ enum Hemisphere: String, CaseIterable { case north = "North" case south = "South" - static func title(_ string: String) -> String? { + static func transform(_ string: String) -> String? { switch string { case Hemisphere.north.rawValue.localized: return Hemisphere.north.rawValue case Hemisphere.south.rawValue.localized: return Hemisphere.south.rawValue diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Items/Category.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Category.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Items/Category.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Category.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Items/Item.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Item.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Items/Item.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Item.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Items/Keyword.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Keyword.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Items/Keyword.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Items/Keyword.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/UserInfo.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/UserInfo.swift similarity index 82% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/UserInfo.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/UserInfo.swift index 93915aa6..9eae37ac 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/UserInfo.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/UserInfo.swift @@ -12,6 +12,7 @@ struct UserInfo { private(set) var islandName: String private(set) var islandFruit: Fruit private(set) var hemisphere: Hemisphere + private(set) var islandReputation: Int mutating func updateName(_ name: String) { self.name = name @@ -28,6 +29,10 @@ struct UserInfo { mutating func updateHemisphere(_ hemisphere: Hemisphere) { self.hemisphere = hemisphere } + + mutating func updateIslandReputation(_ score: Int) { + self.islandReputation = score + } } extension UserInfo: Equatable { @@ -36,5 +41,6 @@ extension UserInfo: Equatable { self.islandName = "" self.islandFruit = .apple self.hemisphere = .north + self.islandReputation = 0 } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Villager.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Villager.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Models/Villager.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Models/Villager.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/DefaultAPIProvider.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/DefaultAPIProvider.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/DefaultAPIProvider.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/DefaultAPIProvider.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Protocol/APIProvider.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Protocol/APIProvider.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Protocol/APIProvider.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Protocol/APIProvider.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Protocol/APIRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Protocol/APIRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Protocol/APIRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Protocol/APIRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/ArtRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/ArtRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/ArtRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/ArtRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/BugRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/BugRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/BugRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/BugRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/CeilingDecorRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/CeilingDecorRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/CeilingDecorRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/CeilingDecorRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/FishRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FishRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/FishRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FishRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/FloorsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FloorsRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/FloorsRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FloorsRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/FossilsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FossilsRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/FossilsRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/FossilsRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/HousewaresRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/HousewaresRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/HousewaresRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/HousewaresRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/MiscellaneousRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/MiscellaneousRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/MiscellaneousRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/MiscellaneousRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/OtherRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/OtherRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/OtherRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/OtherRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/RecipesRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/RecipesRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/RecipesRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/RecipesRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/RugsRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/RugsRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/RugsRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/RugsRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/SeaCreaturesRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/SeaCreaturesRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/SeaCreaturesRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/SeaCreaturesRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/MusicRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/SongsRequest.swift similarity index 53% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/MusicRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/SongsRequest.swift index db3c4ccb..490819d3 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/MusicRequest.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/SongsRequest.swift @@ -2,17 +2,17 @@ // MusicRequest.swift // Animal-Crossing-Wiki // -// Created by Ari on 2022/07/20. +// Created by Ari on 2022/08/18. // import Foundation import Alamofire -struct MusicRequest: APIRequest { - typealias Response = [String: MusicResponseDTO] +struct SongsRequest: APIRequest { + typealias Response = [SongResponseDTO] let method: HTTPMethod = HTTPMethod.get - let baseURL: URL? = URL(string: EnvironmentsVariable.acnhAPI) - let path: String = "songs/" + let baseURL: URL? = URL(string: EnvironmentsVariable.repoURL) + let path: String = "Music.json" var headers: [String : String]? = [:] var parameters: [String : String] { return [:] diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/TurnipRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/TurnipRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/TurnipRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/TurnipRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/VillagersRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/VillagersRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/VillagersRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/VillagersRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/WallMountedRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/WallMountedRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/WallMountedRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/WallMountedRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/WallpaperRequest.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/WallpaperRequest.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Request/WallpaperRequest.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Request/WallpaperRequest.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/ArtResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/ArtResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/ArtResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/ArtResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/BugResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/BugResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/BugResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/BugResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/CeilingDecorResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/CeilingDecorResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/CeilingDecorResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/CeilingDecorResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/FishResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FishResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/FishResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FishResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/FloorsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FloorsResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/FloorsResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FloorsResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/FossilsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FossilsResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/FossilsResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/FossilsResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/HousewaresResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/HousewaresResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/HousewaresResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/HousewaresResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/MiscellaneousResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/MiscellaneousResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/MiscellaneousResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/MiscellaneousResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/OtherResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/OtherResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/OtherResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/OtherResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/RecipeResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/RecipeResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/RecipeResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/RecipeResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/RugsResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/RugsResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/RugsResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/RugsResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/SeaCreaturesResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/SeaCreaturesResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/SeaCreaturesResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/SeaCreaturesResponseDTO.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/SongResponseDTO.swift new file mode 100644 index 00000000..555e6e43 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/SongResponseDTO.swift @@ -0,0 +1,80 @@ +// +// SongResponseDTO.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/08/18. +// + +import Foundation + +struct SongResponseDTO: Codable { + let name: String + let framedImage: String? + let albumImage: String? + let buy: Int + let sell: Int? + let hhaBasePoints: Int + let size: Size + 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 internalId: Int + let uniqueEntryId: String + let translations: Translations + let colors: [Color] + let musicURL: String? +} + +extension SongResponseDTO { + func toDomain() -> Item { + var sources = ["K.K. concert"] + var sourceNotes: [String]? + if buy != -1 { + sources.append("Nook Shopping Daily Selection") + } else { + sourceNotes = ["Hidden song"] + } + return Item( + name: name, + category: .songs, + sell: sell ?? -1, + translations: translations, + image: albumImage, + buy: buy, + sources: sources, + sourceNotes: sourceNotes, + musicURL: musicURL ?? "" + ) + } +} + +extension Item { + init( + name: String, + category: Category, + sell: Int, + translations: Translations, + image: String?, + buy: Int?, + sources: [String], + sourceNotes: [String]?, + musicURL: String + ) { + self.name = name + self.category = category + self.sell = sell + self.translations = translations + self.image = image + self.buy = buy + self.sources = sources + self.sourceNotes = sourceNotes + self.colors = [] + self.genuine = true + self.musicURL = musicURL + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/TurnipResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/TurnipResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/TurnipResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/TurnipResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/VillagersResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/VillagersResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/VillagersResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/VillagersResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/WallMountedResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/WallMountedResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/WallMountedResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/WallMountedResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/WallpaperResponseDTO.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/WallpaperResponseDTO.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Response/WallpaperResponseDTO.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Response/WallpaperResponseDTO.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Utilities/APIError.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Utilities/APIError.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Utilities/APIError.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Utilities/APIError.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Utilities/EnvironmentsVariable.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Utilities/EnvironmentsVariable.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Networking/Utilities/EnvironmentsVariable.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Networking/Utilities/EnvironmentsVariable.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/AppAppearance.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/AppAppearance.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/AppAppearance.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/AppAppearance.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/AppCoordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/AppCoordinator.swift similarity index 96% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/AppCoordinator.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/AppCoordinator.swift index 81b23745..ad3f18b8 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/AppCoordinator.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/AppCoordinator.swift @@ -66,13 +66,13 @@ extension AppCoordinator { rootViewController.view.addSubviews(viewController.view) rootViewController.view.bringSubviewToFront(rootViewController.tabBar) viewController.didMove(toParent: rootViewController) - let viewModel = PlayerViewModel(coordinator: self) + let viewModel = PlayerReactor(coordinator: self) viewController.bind(to: viewModel) let frame = rootViewController.view.frame let tabBarHeight = rootViewController.tabBar.frame.height viewController.configure(tabBarHeight: tabBarHeight) - self.topAnchorConstraint = viewController.view.topAnchor.constraint( + topAnchorConstraint = viewController.view.topAnchor.constraint( equalTo: rootViewController.view.topAnchor, constant: frame.height - rootViewController.tabBar.frame.height - 60 ) diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Coordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Coordinator.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Coordinator.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Coordinator.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Coordinator/DashboardCoordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Coordinator/DashboardCoordinator.swift similarity index 74% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Coordinator/DashboardCoordinator.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Coordinator/DashboardCoordinator.swift index 61fd3094..3d3f6f0c 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Coordinator/DashboardCoordinator.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Coordinator/DashboardCoordinator.swift @@ -6,6 +6,7 @@ // import UIKit +import RxSwift final class DashboardCoordinator: Coordinator { @@ -37,12 +38,12 @@ final class DashboardCoordinator: Coordinator { func start() { let viewController = DashboardViewController() - viewController.bind(to: DashboardViewModel(coordinator: self)) + viewController.bind(to: DashboardReactor(coordinator: self)) viewController.setUpViewModels( - userInfoVM: UserInfoSectionViewModel(), - tasksVM: TodaysTasksSectionViewModel(coordinator: self), - villagersVM: VillagersSectionViewModel(coordinator: self), - progressVM: CollectionProgressSectionViewModel(coordinator: self) + userInfoVM: UserInfoReactor(coordinator: self), + tasksVM: TodaysTasksSectionReactor(coordinator: self), + villagersVM: VillagersSectionReactor(coordinator: self), + progressVM: CollectionProgressSectionReactor(coordinator: self) ) rootViewController.addChild(viewController) } @@ -51,27 +52,30 @@ final class DashboardCoordinator: Coordinator { switch route { case .setting: let viewController = PreferencesViewController() - viewController.bind(to: PreferencesViewModel(coordinator: self)) + viewController.bind( + to: PreferencesReactor(coordinator: self), + appSettingReactor: AppSettingReactor(coordinator: self) + ) let navigationController = UINavigationController(rootViewController: viewController) rootViewController.present(navigationController, animated: true) case .about: let viewController = AboutViewController() - viewController.bind(to: AboutViewModel(coordinator: self)) + viewController.bind(to: AboutReactor(coordinator: self)) let navigationController = UINavigationController(rootViewController: viewController) rootViewController.present(navigationController, animated: true) case .taskEdit: let viewController = TaskEditViewController() - viewController.bind(to: TasksEditViewModel(coordinator: self)) + viewController.bind(to: TasksEditReactor(coordinator: self)) let navigationController = UINavigationController(rootViewController: viewController) rootViewController.present(navigationController, animated: true) case .customTask(let task): let viewController = CustomTaskViewController() delegate = viewController if task.icon == "plus" { - viewController.bind(to: CustomTaskViewModel(coordinator: self, task: nil)) + viewController.bind(to: CustomTaskReactor(coordinator: self, task: nil)) viewController.mode = .add } else { - viewController.bind(to: CustomTaskViewModel(coordinator: self, task: task)) + viewController.bind(to: CustomTaskReactor(coordinator: self, task: task)) viewController.mode = .edit } let navigationController = rootViewController.visibleViewController?.navigationController as? UINavigationController @@ -83,29 +87,31 @@ final class DashboardCoordinator: Coordinator { rootViewController.visibleViewController?.present(navigationController, animated: true) case .villagerDetail(let villager): let viewController = VillagerDetailViewController() - viewController.bind(to: VillagerDetailViewModel(villager: villager)) + viewController.bind( + to: VillagerDetailReactor(villager: villager, state: .init(villager: villager)) + ) let navigationController = UINavigationController(rootViewController: viewController) rootViewController.present(navigationController, animated: true) HapticManager.shared.notification(type: .success) case .progress: let viewController = CollectionProgressViewController() - viewController.bind(to: CollectionProgressViewModel(coordinator: self)) + viewController.bind(to: CollectionProgressReactor(coordinator: self)) rootViewController.pushViewController(viewController, animated: true) case .item(let category): let viewController = ItemsViewController() let currentMonth = (Calendar.current.dateComponents([.month], from: Date()).month ?? 1).description viewController.bind( - to: ItemsViewModel(category: category, coordinator: self), + to: ItemsReactor(category: category, coordinator: self), keyword: [.month: currentMonth] ) rootViewController.pushViewController(viewController, animated: true) case .itemDetail(let item): let viewController = ItemDetailViewController() - viewController.bind(to: ItemDetailViewModel(item: item, coordinator: self)) + viewController.bind(to: ItemDetailReactor(item: item, coordinator: self)) rootViewController.pushViewController(viewController, animated: true) case .keyword(let title, let keyword): let viewController = ItemsViewController() - viewController.bind(to: ItemsViewModel(coordinator: self, mode: .keyword(title: title, category: keyword))) + viewController.bind(to: ItemsReactor(coordinator: self, mode: .keyword(title: title, category: keyword))) rootViewController.pushViewController(viewController, animated: true) case .pop: rootViewController.visibleViewController?.navigationController?.popViewController(animated: true) @@ -121,6 +127,13 @@ final class DashboardCoordinator: Coordinator { func setUpParent(to coordinator: Coordinator) { parentCoordinator = coordinator } + + func showAlert(title: String, message: String) -> Observable { + guard let currentVC = rootViewController.visibleViewController else { + return .empty() + } + return currentVC.showAlert(title: title, message: message) + } } protocol CustomTaskViewControllerDelegate: AnyObject { diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/AboutViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/AboutViewController.swift similarity index 90% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/AboutViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/AboutViewController.swift index 7ffd92ec..8d894aa6 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/AboutViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/AboutViewController.swift @@ -6,8 +6,8 @@ // import UIKit -import RxSwift import RxDataSources +import ReactorKit class AboutViewController: UIViewController { @@ -35,7 +35,7 @@ class AboutViewController: UIViewController { private func setUpViews() { view.backgroundColor = .acBackground - self.navigationItem.title = "About".localized + navigationItem.title = "About".localized navigationItem.largeTitleDisplayMode = .never navigationItem.leftBarButtonItem = cancelButton @@ -49,11 +49,12 @@ class AboutViewController: UIViewController { ]) } - func bind(to viewModel: AboutViewModel) { - let input = AboutViewModel.Input( - didTapCancel: cancelButton.rx.tap.asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + func bind(to reactor: AboutReactor) { + cancelButton.rx.tap + .map { AboutReactor.Action.cancel } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) let dataSource = RxTableViewSectionedReloadDataSource> { _, _, _, item in let cell = UITableViewCell() @@ -78,18 +79,18 @@ class AboutViewController: UIViewController { return dataSource[sectionIndex].model } - output.items + reactor.state.map { $0.items } .map { $0.map { SectionModel(model: $0.title, items: $0.items) } } .bind(to: tableView.rx.items(dataSource: dataSource)) .disposed(by: disposeBag) - + tableView.rx.itemSelected .observe(on: MainScheduler.instance) .withUnretained(self) .subscribe(onNext: { owner, indexPath in owner.tableView.deselectRow(at: indexPath, animated: true) }).disposed(by: disposeBag) - + tableView.rx.modelSelected(AboutItem.self) .compactMap { $0.url } .subscribe(onNext: { url in diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/CustomTaskViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/CustomTaskViewController.swift similarity index 51% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/CustomTaskViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/CustomTaskViewController.swift index 7bf21f25..98dd0f9e 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/CustomTaskViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/CustomTaskViewController.swift @@ -17,10 +17,10 @@ class CustomTaskViewController: UIViewController { } var mode: Mode? - var viewModel: CustomTaskViewModel? - private let iconText = BehaviorRelay(value: nil) - private let amount = BehaviorRelay(value: nil) + private let currentIconName = BehaviorRelay(value: nil) + private let currentAmount = BehaviorRelay(value: nil) + private let currentTask = BehaviorRelay(value: nil) private let disposeBag = DisposeBag() private lazy var customTaskSection = CustomTaskView() @@ -42,7 +42,7 @@ class CustomTaskViewController: UIViewController { private func setUpViews() { view.backgroundColor = .acBackground - self.navigationItem.title = mode?.rawValue.localized + navigationItem.title = mode?.rawValue.localized navigationItem.largeTitleDisplayMode = .never navigationItem.rightBarButtonItem = doneButton @@ -58,31 +58,53 @@ class CustomTaskViewController: UIViewController { ]) } - func bind(to viewModel: CustomTaskViewModel) { - let input = CustomTaskViewModel.Input( - didTapCheck: doneButton.rx.tap.asObservable(), - didTapIcon: customTaskSection.iconButtonObservable, - didTapAmount: customTaskSection.maxAmountButtonObservable, - taskNameText: customTaskSection.taskNameObservable, - iconNameText: iconText.asObservable(), - amountText: amount.asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + func bind(to reactor: CustomTaskReactor) { + doneButton.rx.tap + .map { CustomTaskReactor.Action.save } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + customTaskSection.iconButtonObservable + .map { CustomTaskReactor.Action.iconList } + .bind(to: reactor.action) + .disposed(by: disposeBag) - output.task - .compactMap { $0 } + currentIconName.compactMap { $0 } + .map { CustomTaskReactor.Action.iconName($0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + customTaskSection.maxAmountButtonObservable .withUnretained(self) - .subscribe(onNext: { owner, task in - owner.customTaskSection.setUpViews(task) + .subscribe(onNext: { owner, _ in + owner.showSelectedItemAlert( + Array(1...20).map { $0.description }, + currentItem: owner.currentAmount.value + ).map { CustomTaskReactor.Action.amount($0) } + .bind(to: reactor.action) + .disposed(by: owner.disposeBag) }).disposed(by: disposeBag) - output.didChangeAmount - .compactMap { $0 } - .observe(on: MainScheduler.asyncInstance) + customTaskSection.taskNameObservable + .map { CustomTaskReactor.Action.taskName($0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + reactor.state + .compactMap { $0.amount } .withUnretained(self) - .subscribe(onNext: { owner, text in - owner.customTaskSection.updateAmount(text) - owner.amount.accept(text) + .subscribe(onNext: { owner, amount in + owner.customTaskSection.updateAmount(amount.description) + owner.currentAmount.accept(amount.description) + }).disposed(by: disposeBag) + + reactor.state.compactMap { $0.task } + .filter { [weak self] in self?.currentTask.value != $0 } + .withUnretained(self) + .subscribe(onNext: { owner, task in + owner.customTaskSection.setUpViews(task) + owner.currentAmount.accept(task.amount.description) + owner.currentTask.accept(task) }).disposed(by: disposeBag) } @@ -91,6 +113,6 @@ class CustomTaskViewController: UIViewController { extension CustomTaskViewController: CustomTaskViewControllerDelegate { func selectedIcon(_ icon: String) { customTaskSection.updateIcon(icon) - iconText.accept(icon) + currentIconName.accept(icon) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/DashboardViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/DashboardViewController.swift similarity index 75% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/DashboardViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/DashboardViewController.swift index 852418bd..6ad0cff8 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/DashboardViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/DashboardViewController.swift @@ -49,10 +49,10 @@ class DashboardViewController: UIViewController { } func setUpViewModels( - userInfoVM: UserInfoSectionViewModel, - tasksVM: TodaysTasksSectionViewModel, - villagersVM: VillagersSectionViewModel, - progressVM: CollectionProgressSectionViewModel + userInfoVM: UserInfoReactor, + tasksVM: TodaysTasksSectionReactor, + villagersVM: VillagersSectionReactor, + progressVM: CollectionProgressSectionReactor ) { let userInfoSection = SectionView( title: "My Island".localized, @@ -76,11 +76,19 @@ class DashboardViewController: UIViewController { ) sectionsScrollView.addSection(userInfoSection, tasksSection, villagersSection, progressSection) } - - func bind(to viewModel: DashboardViewModel) { - let input = DashboardViewModel.Input( - didTapMore: moreButton.rx.tap.asObservable() - ) - viewModel.bind(input: input, disposeBag: disposeBag) + + func bind(to reactor: DashboardReactor) { + moreButton.rx.tap + .subscribe(onNext: { [weak self] _ in + guard let self = self else { + return + } + self.showSelectedItemAlert( + [DashboardReactor.Menu.about.rawValue.localized, DashboardReactor.Menu.setting.rawValue.localized], + currentItem: nil + ).map { DashboardReactor.Action.selected(title: $0) } + .bind(to: reactor.action ) + .disposed(by: self.disposeBag) + }).disposed(by: disposeBag) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/IconChooserViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/IconChooserViewController.swift similarity index 94% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/IconChooserViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/IconChooserViewController.swift index 5e966824..8a121cdd 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/IconChooserViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/IconChooserViewController.swift @@ -34,7 +34,7 @@ class IconChooserViewController: UIViewController { private func setUpViews() { view.backgroundColor = .acBackground - self.navigationItem.title = "Icon" + navigationItem.title = "Icon" navigationItem.largeTitleDisplayMode = .never navigationItem.leftBarButtonItem = UIBarButtonItem( image: UIImage(systemName: "xmark.app.fill"), @@ -78,8 +78,8 @@ extension IconChooserViewController: UICollectionViewDataSource { extension IconChooserViewController: UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - dismiss(animated: true) { - self.coordinator?.selectedIcon("Inv\(indexPath.row)") + dismiss(animated: true) { [weak self] in + self?.coordinator?.selectedIcon("Inv\(indexPath.row)") } } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/PreferencesViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/PreferencesViewController.swift new file mode 100644 index 00000000..2f4ada06 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/PreferencesViewController.swift @@ -0,0 +1,122 @@ +// +// PreferencesViewController.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/16. +// + +import UIKit +import RxSwift +import RxRelay + +class PreferencesViewController: UIViewController { + + private let currentHemisphere = BehaviorRelay(value: nil) + private let currentFruit = BehaviorRelay(value: nil) + private let currentReputation = BehaviorRelay(value: nil) + let disposeBag = DisposeBag() + + private lazy var settingSection = PreferencesView() + private lazy var sectionsScrollView: SectionsScrollView = SectionsScrollView( + SectionView(title: "Island".localized, iconName: "leaf.fill", contentView: settingSection) + ) + + private lazy var cancelButton: UIBarButtonItem = { + return .init( + image: UIImage(systemName: "xmark.app.fill"), + style: .plain, + target: self, + action: nil + ) + }() + + override func viewDidLoad() { + super.viewDidLoad() + setUpViews() + } + + private func setUpViews() { + view.backgroundColor = .acBackground + navigationItem.title = "Preferences".localized + navigationItem.largeTitleDisplayMode = .never + navigationItem.leftBarButtonItem = cancelButton + + view.addSubviews(sectionsScrollView) + + NSLayoutConstraint.activate([ + sectionsScrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + sectionsScrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), + sectionsScrollView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), + sectionsScrollView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor) + ]) + } + + func bind(to reactor: PreferencesReactor, appSettingReactor: AppSettingReactor) { + cancelButton.rx.tap + .map { PreferencesReactor.Action.cancel } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + settingSection.islandNameObservable + .map { PreferencesReactor.Action.islandName($0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + settingSection.userNameObservable + .map { PreferencesReactor.Action.userName($0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + settingSection.hemisphereButtonObservable + .withUnretained(self) + .subscribe(onNext: { owner, _ in + owner.showSelectedItemAlert( + Hemisphere.allCases.map { $0.rawValue.localized }, + currentItem: owner.currentHemisphere.value + ).map { PreferencesReactor.Action.hemishphere(title: $0) } + .bind(to: reactor.action) + .disposed(by: owner.disposeBag) + }).disposed(by: disposeBag) + + settingSection.reputationButtonObservable + .withUnretained(self) + .subscribe(onNext: { owner, _ in + owner.showSelectedItemAlert( + ["⭐️", "⭐️⭐️", "⭐️⭐️⭐️", "⭐️⭐️⭐️⭐️", "⭐️⭐️⭐️⭐️⭐️"], + currentItem: owner.currentReputation.value + ).map { PreferencesReactor.Action.reputation($0) } + .bind(to: reactor.action) + .disposed(by: owner.disposeBag) + }).disposed(by: disposeBag) + + settingSection.startingFruitButtonObservable + .withUnretained(self) + .subscribe(onNext: { owner, _ in + owner.showSelectedItemAlert( + Fruit.allCases.map { $0.rawValue.localized }, + currentItem: owner.currentFruit.value + ).map { PreferencesReactor.Action.fruit(title: $0)} + .bind(to: reactor.action) + .disposed(by: owner.disposeBag) + }).disposed(by: disposeBag) + + reactor.state + .compactMap { $0.userInfo } + .observe(on: MainScheduler.instance) + .withUnretained(self) + .subscribe(onNext: { owner, userInfo in + owner.settingSection.setUpViews(userInfo) + owner.currentHemisphere.accept(userInfo.hemisphere.rawValue.localized) + owner.currentFruit.accept(userInfo.islandFruit.rawValue.localized) + owner.currentReputation.accept(String(repeating: "⭐️", count: userInfo.islandReputation + 1)) + }).disposed(by: disposeBag) + + setUpAppSettings(to: appSettingReactor) + } + + private func setUpAppSettings(to reactor: AppSettingReactor) { + sectionsScrollView.addSection( + SectionView(title: "App Settings".localized, iconName: "square.and.pencil", contentView: AppSettingView(reactor: reactor)) + ) + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/TaskEditViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/TaskEditViewController.swift similarity index 76% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/TaskEditViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/TaskEditViewController.swift index faa8c7ad..17417d02 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/ViewControllers/TaskEditViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewControllers/TaskEditViewController.swift @@ -34,7 +34,7 @@ class TaskEditViewController: UIViewController { private func setUpViews() { view.backgroundColor = .acBackground - self.navigationItem.title = "Today's Tasks".localized + navigationItem.title = "Today's Tasks".localized navigationItem.largeTitleDisplayMode = .never navigationItem.leftBarButtonItem = cancelButton @@ -48,15 +48,29 @@ class TaskEditViewController: UIViewController { ]) } - func bind(to viewModel: TasksEditViewModel) { - let input = TasksEditViewModel.Input( - didSelectedTask: tableView.rx.modelSelected(DailyTask.self).asObservable(), - didTapCancel: cancelButton.rx.tap.asObservable(), - didDeleted: tableView.rx.itemDeleted.asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + func bind(to reactor: TasksEditReactor) { + self.rx.viewDidLoad + .map { TasksEditReactor.Action.fetch } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + tableView.rx.modelSelected(DailyTask.self) + .map { TasksEditReactor.Action.selectedTask($0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + cancelButton.rx.tap + .map { TasksEditReactor.Action.cancel } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + tableView.rx.itemDeleted + .map { TasksEditReactor.Action.deleted(index: $0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) - output.tasks + reactor.state.map { $0.tasks } .bind(to: tableView.rx.items) { _, _, task in let cell = UITableViewCell() var content = cell.defaultContentConfiguration() diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/AboutReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/AboutReactor.swift new file mode 100644 index 00000000..57467238 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/AboutReactor.swift @@ -0,0 +1,50 @@ +// +// AboutViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/11. +// + +import Foundation +import ReactorKit + +final class AboutReactor: Reactor { + + enum Action { + case cancel + } + + enum Mutation { + case transition(for: DashboardCoordinator.Route) + } + + struct State { + var items: [(title: String, items: [AboutItem])] = [ + ("Version".localized, AboutItem.versions), + ("The app".localized, AboutItem.theApp), + ("Credit / Thanks".localized, AboutItem.acknowledgement) + ] + } + + let initialState: State = State() + let coordinator: DashboardCoordinator + + init(coordinator: DashboardCoordinator) { + self.coordinator = coordinator + } + + func mutate(action: Action) -> Observable { + switch action { + case .cancel: + return Observable.just(Mutation.transition(for: .dismiss)) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + switch mutation { + case .transition(let route): + coordinator.transition(for: route) + } + return state + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/AppSettingReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/AppSettingReactor.swift new file mode 100644 index 00000000..43a00aa4 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/AppSettingReactor.swift @@ -0,0 +1,67 @@ +// +// AppSettingsViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/12. +// + +import Foundation +import ReactorKit + +final class AppSettingReactor: Reactor { + + enum Action { + case toggleSwitch + case reset + } + + enum Mutation { + case setHapticState(_ isOn: Bool) + case reset(_ isReset: Bool) + } + + struct State { + var currentHapticState: Bool = HapticManager.shared.mode == .on + } + + let initialState: State + private let storage: UserInfoStorage + private let coordinator: DashboardCoordinator + + init(coordinator: DashboardCoordinator, state: State = State(), storage: UserInfoStorage = CoreDataUserInfoStorage()) { + self.coordinator = coordinator + self.initialState = state + self.storage = storage + } + + func mutate(action: Action) -> Observable { + switch action { + case .toggleSwitch: + HapticManager.shared.toggle() + let isOn = HapticManager.shared.mode == .on + return Observable.just(Mutation.setHapticState(isOn)) + + case .reset: + return coordinator + .showAlert(title: "Notice".localized, message: "Are you sure you want to reset it?".localized) + .map { AppSettingReactor.Mutation.reset($0) } + .observe(on: MainScheduler.asyncInstance) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setHapticState(let isOn): + newState.currentHapticState = isOn + + case .reset(let isReset): + if isReset { + Items.shared.reset() + storage.resetUserInfo() + coordinator.transition(for: .dismiss) + } + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/CollectionProgressSectionReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/CollectionProgressSectionReactor.swift new file mode 100644 index 00000000..2df5be87 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/CollectionProgressSectionReactor.swift @@ -0,0 +1,56 @@ +// +// CollectionProgressSectionViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/11. +// + +import Foundation +import ReactorKit + +final class CollectionProgressSectionReactor: Reactor { + + enum Action { + case fetch + case didTapSection + } + + enum Mutation { + case setLoadingState(_ isLoading: Bool) + case progress + } + + struct State { + var isLoading: Bool = true + } + + let initialState: State + var coordinator: DashboardCoordinator + + init(coordinator: DashboardCoordinator, state: State = State()) { + self.coordinator = coordinator + self.initialState = state + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let loadingState = Items.shared.isLoading.map { Mutation.setLoadingState($0) } + return loadingState + + case .didTapSection: + return Observable.just(Mutation.progress) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .progress: + coordinator.transition(for: .progress) + case .setLoadingState(let isLoading): + newState.isLoading = isLoading + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/CustomTaskReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/CustomTaskReactor.swift new file mode 100644 index 00000000..f2facce5 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/CustomTaskReactor.swift @@ -0,0 +1,98 @@ +// +// CustomTaskViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/24. +// + +import Foundation +import ReactorKit + +final class CustomTaskReactor: Reactor { + + enum Action { + case save + case iconList + case taskName(_ text: String) + case iconName(_ text: String) + case amount(_ text: String) + } + + enum Mutation { + case setName(_ text: String) + case setAmount(_ text: String) + case setIcon(_ text: String) + case save + case chooseIcon + } + + struct State { + var task: DailyTask? + var title: String? + var icon: String? + var amount: Int? + } + + let initialState: State + private let storage: DailyTaskStorage = CoreDataDailyTaskStorage() + private let coordinator: DashboardCoordinator + + init(coordinator: DashboardCoordinator, task: DailyTask?) { + self.coordinator = coordinator + self.initialState = State(task: task) + } + + func mutate(action: Action) -> Observable { + switch action { + case .save: + return Observable.just(Mutation.save) + case .iconList: + return Observable.just(Mutation.chooseIcon) + case .taskName(let text): + return Observable.just(Mutation.setName(text)) + case .iconName(let text): + return Observable.just(Mutation.setIcon(text)) + case .amount(let text): + return Observable.just(Mutation.setAmount(text)) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setName(let name): + newState.title = name + case .setIcon(let name): + newState.icon = name + case .setAmount(let amount): + newState.amount = Int(amount) ?? 1 + case .save: + var newTask: DailyTask + if let task = newState.task { + newTask = DailyTask( + id: task.id, + name: newState.title ?? task.name, + icon: newState.icon ?? task.icon, + progressList: Array(repeating: false, count: newState.amount ?? task.amount), + amount: newState.amount ?? task.amount, + createdDate: task.createdDate + ) + } else { + newTask = DailyTask( + name: newState.title ?? "제목 없음", + icon: newState.icon ?? "Inv7", + isCompleted: false, + amount: newState.amount ?? 1, + createdDate: Date() + ) + } + storage.updateTask(newTask) + Items.shared.updateTasks(newTask) + newState.task = newTask + coordinator.transition(for: .pop) + case .chooseIcon: + coordinator.transition(for: .iconChooser) + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/DashboardReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/DashboardReactor.swift new file mode 100644 index 00000000..9f47c9cc --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/DashboardReactor.swift @@ -0,0 +1,64 @@ +// +// DashboardViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/11. +// + +import Foundation +import ReactorKit + +final class DashboardReactor: Reactor { + + enum Menu: String { + case about = "About" + case setting = "Setting" + + static func transform(localized: String) -> String? { + switch localized { + case Menu.about.rawValue.localized: return Menu.about.rawValue + case Menu.setting.rawValue.localized: return Menu.setting.rawValue + default: return nil + } + } + } + + let initialState: State = State() + var coordinator: DashboardCoordinator? + + init(coordinator: DashboardCoordinator) { + self.coordinator = coordinator + } + + enum Action { + case selected(title: String) + } + + enum Mutation { + case selected(menu: Menu?) + } + + struct State {} + + func mutate(action: Action) -> Observable { + switch action { + case .selected(let title): + let menu = Menu(rawValue: Menu.transform(localized: title) ?? "") + return Observable.just(Mutation.selected(menu: menu)) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + switch mutation { + case .selected(let menu): + switch menu { + case .about: + coordinator?.transition(for: .about) + case .setting: + coordinator?.transition(for: .setting) + default: break + } + } + return state + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/PreferencesReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/PreferencesReactor.swift new file mode 100644 index 00000000..9be5fd52 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/PreferencesReactor.swift @@ -0,0 +1,88 @@ +// +// PreferencesSectionViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/21. +// + +import Foundation +import ReactorKit + +final class PreferencesReactor: Reactor { + + enum Action { + case islandName(_ text: String?) + case userName(_ text: String?) + case hemishphere(title: String) + case fruit(title: String) + case reputation(_ score: String?) + case cancel + } + + enum Mutation { + case transition(for: DashboardCoordinator.Route) + case setUserName(_ name: String?) + case setIslandName(_ name: String?) + case setHemishphere(_ hemishphere: Hemisphere?) + case setFruit(_ fruit: Fruit?) + case setReputation(_ reputation: Int) + } + + struct State { + var userInfo: UserInfo? + } + + let initialState: State + private let coordinator: DashboardCoordinator + private let storage: UserInfoStorage + + init(coordinator: DashboardCoordinator, storage: UserInfoStorage = CoreDataUserInfoStorage()) { + self.coordinator = coordinator + self.storage = storage + self.initialState = State(userInfo: storage.fetchUserInfo()) + } + + func mutate(action: Action) -> Observable { + switch action { + case .islandName(let text): + return .just(.setIslandName(text)) + case .userName(let text): + return .just(.setUserName(text)) + case .hemishphere(let title): + let hemishphere = Hemisphere.transform(title) ?? "" + return .just(.setHemishphere(Hemisphere(rawValue: hemishphere))) + case .fruit(let title): + let fruit = Fruit.transform(title) ?? "" + return .just(.setFruit(Fruit(rawValue: fruit))) + case .reputation(let score): + return .just(.setReputation((score?.count ?? 1) - 1)) + case .cancel: + return .just(.transition(for: .dismiss)) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setUserName(let name): + name.flatMap { newState.userInfo?.updateName($0) } + case .setIslandName(let name): + name.flatMap { newState.userInfo?.updateIslandName($0) } + case .setFruit(let fruit): + fruit.flatMap { newState.userInfo?.updateFruit($0) } + case .setHemishphere(let hemishphere): + hemishphere.flatMap { newState.userInfo?.updateHemisphere($0) } + case .setReputation(let reputation): + newState.userInfo?.updateIslandReputation(reputation) + case .transition(let route): + coordinator.transition(for: route) + } + if newState.userInfo != state.userInfo { + newState.userInfo.flatMap { + storage.updateUserInfo($0) + Items.shared.updateUserInfo($0) + } + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/ProgressReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/ProgressReactor.swift new file mode 100644 index 00000000..579a8c9f --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/ProgressReactor.swift @@ -0,0 +1,54 @@ +// +// ProgressReactor.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/07. +// + +import Foundation +import ReactorKit + +final class ProgressReactor: Reactor { + + enum Action { + case fetch + } + + enum Mutation { + case setItemInfo(itemCount: Int, maxCount: Int) + } + + struct State { + var itemInfo: (itemCount: Int, maxCount: Int) = (0, 0) + } + + let initialState: State + let category: Category + + init(category: Category) { + self.category = category + self.initialState = State() + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let itemsInfo = Observable.combineLatest(Items.shared.itemList, Items.shared.itemsCount) + .map { info -> (itemCount: Int, maxCount: Int) in + let itemsCount = info.0[self.category]?.count ?? 0 + let maxCount = info.1[self.category] ?? itemsCount + return (itemsCount, maxCount) + }.map { Mutation.setItemInfo(itemCount: $0.itemCount, maxCount: $0.maxCount) } + return itemsInfo + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setItemInfo(let itemCount, let maxCount): + newState.itemInfo = (itemCount, maxCount) + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/TasksEditReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/TasksEditReactor.swift new file mode 100644 index 00000000..1b6c10e6 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/TasksEditReactor.swift @@ -0,0 +1,91 @@ +// +// TasksEditViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/24. +// + +import Foundation +import ReactorKit + +final class TasksEditReactor: Reactor { + + enum Action { + case fetch + case selectedTask(_ task: DailyTask) + case cancel + case deleted(index: IndexPath) + } + + enum Mutation { + case setTasks(_ tasks: [DailyTask]) + case transition(DashboardCoordinator.Route) + case deleteTask(_ index: Int) + } + + struct State { + var tasks: [DailyTask] = [] + } + + let initialState: State + private let storage: DailyTaskStorage + private let coordinator: DashboardCoordinator + private let disposeBag = DisposeBag() + + init( + coordinator: DashboardCoordinator, + storage: DailyTaskStorage = CoreDataDailyTaskStorage(), + state: State = State() + ) { + self.coordinator = coordinator + self.storage = storage + self.initialState = state + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let tasks = Items.shared.dailyTasks.map { tasks -> Mutation in + var tasks = tasks + tasks.append( + DailyTask( + name: "Add a custom task", + icon: "plus", + isCompleted: false, + amount: 1, + createdDate: Date() + ) + ) + return Mutation.setTasks(tasks) + } + return tasks + + case .selectedTask(let task): + return Observable.just(Mutation.transition(.customTask(task: task))) + + case .deleted(let indexPath): + return Observable.just(Mutation.deleteTask(indexPath.item)) + + case .cancel: + return Observable.just(Mutation.transition(.dismiss)) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setTasks(let tasks): + newState.tasks = tasks + case .transition(let route): + coordinator.transition(for: route) + case .deleteTask(let index): + storage.deleteTaskDelete(newState.tasks.remove(at: index)) + .subscribe(onSuccess: { task in + Items.shared.deleteTask(task) + }, onFailure: { error in + debugPrint(error) + }).disposed(by: disposeBag) + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/TodaysTasksSectionReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/TodaysTasksSectionReactor.swift new file mode 100644 index 00000000..c5198b91 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/TodaysTasksSectionReactor.swift @@ -0,0 +1,85 @@ +// +// TodaysTasksSectionViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/24. +// + +import Foundation +import ReactorKit + +final class TodaysTasksSectionReactor: Reactor { + + enum Action { + case fetch + case selectedItem(indexPath: IndexPath) + case reset + case edit + } + + enum Mutation { + case transition(route: DashboardCoordinator.Route) + case toggleCompleted(index: Int) + case reset + case setTasks(_ tasks: [DailyTask]) + } + + struct State { + var tasks: [(progressIndex: Int, task: DailyTask)] = [] + } + + let initialState: State + private let coordinator: DashboardCoordinator + private let storage: DailyTaskStorage + + init(coordinator: DashboardCoordinator, storage: DailyTaskStorage = CoreDataDailyTaskStorage()) { + self.coordinator = coordinator + self.storage = storage + self.initialState = State() + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let tasks = Items.shared.dailyTasks.map { Mutation.setTasks($0) } + return tasks + case .selectedItem(let indexPath): + return Observable.just(Mutation.toggleCompleted(index: indexPath.item)) + case .reset: + return Observable.just(Mutation.reset) + case .edit: + return Observable.just(Mutation.transition(route: .taskEdit)) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setTasks(let tasks): + var tasksList = [(progressIndex: Int, task: DailyTask)]() + tasks.forEach { task in + (0.. Observable { + switch action { + case .fetch: + let userInfo = Items.shared.userInfo + .compactMap { $0 } + .map { Mutation.setUserInfo($0) } + return userInfo + + case .tap: + return .just(.transition(route: .setting)) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setUserInfo(let userInfo): + newState.userInfo = userInfo + + case .transition(let route): + coordinator.transition(for: route) + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/VillagersSectionReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/VillagersSectionReactor.swift new file mode 100644 index 00000000..277a544c --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/ViewModels/VillagersSectionReactor.swift @@ -0,0 +1,59 @@ +// +// VillagersSectionViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/24. +// + +import Foundation +import ReactorKit + +final class VillagersSectionReactor: Reactor { + + enum Action { + case fetch + case villagerLongPress(indexPath: IndexPath) + } + + enum Mutation { + case transition(route: DashboardCoordinator.Route) + case setVillagers(_ villagers: [Villager]) + } + + struct State { + var villagers: [Villager] = [] + } + + let initialState: State = State() + private var coordinator: DashboardCoordinator? + + init(coordinator: DashboardCoordinator?) { + self.coordinator = coordinator + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let villagers = Items.shared.villagerHouseList + .map { Mutation.setVillagers($0)} + return villagers + + case .villagerLongPress(let indexPath): + guard let villager = currentState.villagers[safe: indexPath.item] else { + return Observable.empty() + } + return Observable.just(Mutation.transition(route: .villagerDetail(villager: villager))) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .transition(let route): + coordinator?.transition(for: route) + case .setVillagers(let villagers): + newState.villagers = villagers + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/AppSettingView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/AppSettingView.swift similarity index 65% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/AppSettingView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/AppSettingView.swift index 4078e4f8..753c7e77 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/AppSettingView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/AppSettingView.swift @@ -11,6 +11,7 @@ import RxSwift class AppSettingView: UIView { private let disposeBag = DisposeBag() + private let resetTapGesture = UITapGestureRecognizer() private lazy var backgroundStackView: UIStackView = { let stackView = UIStackView( @@ -38,26 +39,36 @@ class AppSettingView: UIView { backgroundStackView.widthAnchor.constraint(equalTo: widthAnchor), backgroundStackView.heightAnchor.constraint(equalTo: heightAnchor) ]) - + let resetView = InfoContentView(title: "Data reset".localized) backgroundStackView.addArrangedSubviews( - InfoContentView(title: "System haptic".localized, contentView: hapticSwitch) + InfoContentView(title: "System haptic".localized, contentView: hapticSwitch), + resetView ) + resetView.addGestureRecognizer(resetTapGesture) } - func bind(to viewModel: AppSettingViewModel) { - let input = AppSettingViewModel.Input(didTapSwitch: hapticSwitch.rx.controlEvent(.valueChanged).asObservable()) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + func bind(to reactor: AppSettingReactor) { + hapticSwitch.rx.controlEvent(.valueChanged) + .map { AppSettingReactor.Action.toggleSwitch } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + resetTapGesture.rx.event + .map { _ in AppSettingReactor.Action.reset } + .bind(to: reactor.action) + .disposed(by: disposeBag) - output.currentHapticState + reactor.state.map { $0.currentHapticState } .bind(to: hapticSwitch.rx.isOn) .disposed(by: disposeBag) } } extension AppSettingView { - convenience init(viewModel: AppSettingViewModel) { + convenience init(reactor: AppSettingReactor) { self.init(frame: .zero) - bind(to: viewModel) + bind(to: reactor) configure() } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/CollectionProgressView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/CollectionProgressView.swift similarity index 57% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/CollectionProgressView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/CollectionProgressView.swift index 9fb01bec..079c570c 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/CollectionProgressView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/CollectionProgressView.swift @@ -26,11 +26,17 @@ class CollectionProgressView: UIView { return activityIndicator }() + private lazy var emptyView: EmptyView = EmptyView( + title: "Please check the network status.".localized, + description: "" + ) + private func configure() { let config = UIImage.SymbolConfiguration(scale: .small) let image = UIImageView(image: UIImage(systemName: "chevron.forward", withConfiguration: config)) image.tintColor = .systemGray - addSubviews(backgroundStackView, image, activityIndicator) + emptyView.backgroundColor = .acSecondaryBackground + addSubviews(backgroundStackView, image, activityIndicator, emptyView) backgroundStackView.addArrangedSubviews(Category.progress().map { ProgressView(category: $0) }) let heightAnchor = backgroundStackView.heightAnchor.constraint(equalTo: heightAnchor) @@ -44,23 +50,49 @@ class CollectionProgressView: UIView { heightAnchor, activityIndicator.widthAnchor.constraint(equalTo: widthAnchor), activityIndicator.topAnchor.constraint(equalTo: backgroundStackView.topAnchor), - activityIndicator.bottomAnchor.constraint(equalTo: backgroundStackView.bottomAnchor) + activityIndicator.bottomAnchor.constraint(equalTo: backgroundStackView.bottomAnchor), + emptyView.centerXAnchor.constraint(equalTo: centerXAnchor), + emptyView.centerYAnchor.constraint(equalTo: centerYAnchor), + emptyView.widthAnchor.constraint(equalTo: widthAnchor), + emptyView.heightAnchor.constraint(equalTo: self.heightAnchor) ]) } - private func bind(to viewModel: CollectionProgressSectionViewModel) { + private func bind(to reactor: CollectionProgressSectionReactor) { let tap = UITapGestureRecognizer() addGestureRecognizer(tap) - let input = CollectionProgressSectionViewModel.Input(didTapSection: tap.rx.event.asObservable()) - let output = viewModel.transform(input: input, disposeBag: disposeBag) - output.isLoading - .bind(to: self.activityIndicator.rx.isAnimating) + + Observable.just(CollectionProgressSectionReactor.Action.fetch) + .bind(to: reactor.action) + .disposed(by: disposeBag) + + tap.rx.event + .map { _ in CollectionProgressSectionReactor.Action.didTapSection } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + reactor.state.map { $0.isLoading } + .bind(to: activityIndicator.rx.isAnimating) + .disposed(by: disposeBag) + + Items.shared.itemsCount + .map { $0.isEmpty } + .withUnretained(self) + .subscribe(onNext: { owner, isEmpty in + owner.emptyView.isHidden = !isEmpty + if isEmpty { + owner.removeGestureRecognizer(tap) + } else { + owner.addGestureRecognizer(tap) + } + }) .disposed(by: disposeBag) } } extension CollectionProgressView { - convenience init(viewModel: CollectionProgressSectionViewModel) { + convenience init(viewModel: CollectionProgressSectionReactor) { self.init(frame: .zero) bind(to: viewModel) configure() diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/CustomTaskView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/CustomTaskView.swift similarity index 94% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/CustomTaskView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/CustomTaskView.swift index ccaeb353..6cebc8ff 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/CustomTaskView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/CustomTaskView.swift @@ -81,8 +81,10 @@ class CustomTaskView: UIView { } extension CustomTaskView { - var taskNameObservable: Observable { - taskNameTextField.rx.text.asObservable() + var taskNameObservable: Observable { + taskNameTextField.rx.controlEvent(.editingChanged).compactMap { [weak self] in + self?.taskNameTextField.text + }.asObservable() } var iconButtonObservable: Observable { diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/PreferencesView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/PreferencesView.swift similarity index 79% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/PreferencesView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/PreferencesView.swift index 979dc478..2c930c51 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/PreferencesView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/PreferencesView.swift @@ -37,6 +37,12 @@ class PreferencesView: UIView { return button }() + private lazy var reputationButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("⭐️", for: .normal) + return button + }() + private lazy var startingFruitButton: UIButton = { let button = UIButton(type: .system) let image = UIImage(named: Fruit.apple.imageName)? @@ -76,7 +82,7 @@ class PreferencesView: UIView { $0.delegate = self } - [hemisphereButton, startingFruitButton].forEach { + [hemisphereButton, startingFruitButton, reputationButton].forEach { $0.titleLabel?.font = .preferredFont(forTextStyle: .footnote) $0.contentHorizontalAlignment = .right $0.setTitleColor(.acText.withAlphaComponent(0.8), for: .normal) @@ -84,6 +90,7 @@ class PreferencesView: UIView { backgroundStackView.addArrangedSubviews( InfoContentView(title: "Island name".localized, contentView: islandNameTextField), + InfoContentView(title: "Island Reputation".localized, contentView: reputationButton), InfoContentView(title: "User name".localized, contentView: userNameTextField), InfoContentView(title: "Hemisphere".localized, contentView: hemisphereButton), InfoContentView(title: "Starting fruit".localized, contentView: startingFruitButton) @@ -99,18 +106,26 @@ extension PreferencesView: UITextFieldDelegate { extension PreferencesView { - var islandNameObservable: Observable { - return islandNameTextField.rx.text.asObservable() + var islandNameObservable: Observable { + return islandNameTextField.rx.controlEvent(.editingChanged).compactMap { [weak self] in + self?.islandNameTextField.text + }.asObservable() } - var userNameObservable: Observable { - return userNameTextField.rx.text.asObservable() + var userNameObservable: Observable { + return userNameTextField.rx.controlEvent(.editingChanged).compactMap { [weak self] in + self?.userNameTextField.text + }.asObservable() } var hemisphereButtonObservable: Observable { return hemisphereButton.rx.tap.asObservable() } + var reputationButtonObservable: Observable { + return reputationButton.rx.tap.asObservable() + } + var startingFruitButtonObservable: Observable { return startingFruitButton.rx.tap.asObservable() } @@ -120,6 +135,7 @@ extension PreferencesView { islandNameTextField.text = userInfo.islandName updateHemisphere(userInfo.hemisphere) updateFruit(userInfo.islandFruit) + updateReputation(userInfo.islandReputation + 1) } func updateHemisphere(_ hemisphere: Hemisphere) { @@ -132,4 +148,8 @@ extension PreferencesView { .withRenderingMode(.alwaysOriginal) startingFruitButton.setImage(image, for: .normal) } + + func updateReputation(_ reputation: Int) { + reputationButton.setTitle(String(repeating: "⭐️", count: reputation), for: .normal) + } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/TodaysTasksView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/TodaysTasksView.swift similarity index 69% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/TodaysTasksView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/TodaysTasksView.swift index ed52f2fd..b9e1e98f 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/TodaysTasksView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/TodaysTasksView.swift @@ -45,30 +45,21 @@ class TodaysTasksView: UIView { return button }() - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - override init(frame: CGRect) { - super.init(frame: frame) - configure() - } - override func layoutSubviews() { super.layoutSubviews() - let contentHeight = self.collectionView.collectionViewLayout.collectionViewContentSize.height + 40 - self.heightConstraint.constant = contentHeight == .zero ? 40 : contentHeight + let contentHeight = collectionView.collectionViewLayout.collectionViewContentSize.height + 40 + heightConstraint.constant = contentHeight == .zero ? 40 : contentHeight } override func layoutIfNeeded() { super.layoutIfNeeded() - self.heightConstraint.constant = self.collectionView.collectionViewLayout.collectionViewContentSize.height + heightConstraint.constant = collectionView.collectionViewLayout.collectionViewContentSize.height } private func configure() { addSubviews(collectionView, buttonStackView) - self.heightConstraint = self.collectionView.heightAnchor.constraint(equalToConstant: 40) + heightConstraint = collectionView.heightAnchor.constraint(equalToConstant: 40) heightConstraint.priority = .defaultHigh NSLayoutConstraint.activate([ buttonStackView.bottomAnchor.constraint(equalTo: bottomAnchor), @@ -91,15 +82,29 @@ class TodaysTasksView: UIView { buttonStackView.addArrangedSubviews(editButton, resetButton) } - func bind(to viewModel: TodaysTasksSectionViewModel) { - let input = TodaysTasksSectionViewModel.Input( - didSelectItem: collectionView.rx.itemSelected.asObservable(), - didTapReset: resetButton.rx.tap.asObservable(), - didTapEdit: editButton.rx.tap.asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + func bind(to reactor: TodaysTasksSectionReactor) { + Observable.just(TodaysTasksSectionReactor.Action.fetch) + .bind(to: reactor.action) + .disposed(by: disposeBag) + + collectionView.rx.itemSelected + .map { TodaysTasksSectionReactor.Action.selectedItem(indexPath: $0) } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }) + .disposed(by: disposeBag) + + resetButton.rx.tap + .map { TodaysTasksSectionReactor.Action.reset } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + editButton.rx.tap + .map { TodaysTasksSectionReactor.Action.edit } + .bind(to: reactor.action) + .disposed(by: disposeBag) - output.tasks + reactor.state.map { $0.tasks } .bind( to: collectionView.rx.items( cellIdentifier: IconCell.className, @@ -109,18 +114,19 @@ class TodaysTasksView: UIView { cell.setImage(icon: item.task.icon) item.task.progressList[item.progressIndex] ? cell.setAlpha(1) : cell.setAlpha(0.5) }.disposed(by: disposeBag) - - output.tasks + + reactor.state.map { $0.tasks } .observe(on: MainScheduler.instance) .subscribe(onNext: { _ in - DispatchQueue.main.asyncAfter(deadline: .now()) { - self.layoutIfNeeded() + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in + self?.layoutIfNeeded() } }).disposed(by: disposeBag) collectionView.rx.itemSelected - .subscribe(onNext: { indexPath in - let cell = self.collectionView.cellForItem(at: indexPath) as? IconCell + .withUnretained(self) + .subscribe(onNext: { owner, indexPath in + let cell = owner.collectionView.cellForItem(at: indexPath) as? IconCell cell?.toggle() HapticManager.shared.selection() }).disposed(by: disposeBag) @@ -129,8 +135,9 @@ class TodaysTasksView: UIView { extension TodaysTasksView { - convenience init(_ viewModel: TodaysTasksSectionViewModel) { + convenience init(_ viewModel: TodaysTasksSectionReactor) { self.init(frame: .zero) bind(to: viewModel) + configure() } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/UserInfoView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/UserInfoView.swift similarity index 74% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/UserInfoView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/UserInfoView.swift index 32ac7052..8cf32c76 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/UserInfoView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/UserInfoView.swift @@ -46,26 +46,24 @@ class UserInfoView: UIView { return label }() - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - override init(frame: CGRect) { - super.init(frame: frame) - configure() - } + private lazy var reputationLabel: UILabel = { + let label = UILabel() + label.text = "⭐️" + return label + }() private func configure() { addSubviews(backgroundStackView) backgroundStackView.addArrangedSubviews( InfoContentView(title: "ISLAND".localized, contentView: islandNameLabel), + InfoContentView(title: "REPUTATION".localized, contentView: reputationLabel), InfoContentView(title: "USER".localized, contentView: userNameLabel), InfoContentView(title: "HEMISPHERE".localized, contentView: hemisphereLabel), InfoContentView(title: "FRUIT".localized, contentView: fruitImageView) ) - [islandNameLabel, userNameLabel, hemisphereLabel].forEach { label in + [islandNameLabel, userNameLabel, hemisphereLabel, reputationLabel].forEach { label in label.textColor = .acSecondaryText label.font = .preferredFont(forTextStyle: .footnote) label.textAlignment = .right @@ -82,33 +80,42 @@ class UserInfoView: UIView { ]) } - private func bind(to viewModel: UserInfoSectionViewModel) { - let output = viewModel.transform(disposeBag: disposeBag) - output.userInfo + private func bind(to reactor: UserInfoReactor) { + let tap = UITapGestureRecognizer() + addGestureRecognizer(tap) + + Observable.just(UserInfoReactor.Action.fetch) + .bind(to: reactor.action) + .disposed(by: disposeBag) + + tap.rx.event + .map { _ in UserInfoReactor.Action.tap } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + reactor.state.map { $0.userInfo } .compactMap { $0 } .withUnretained(self) .observe(on: MainScheduler.instance) - .bind { (owner, userInfo) in + .subscribe(onNext: { owner, userInfo in owner.updateInfo(userInfo) - }.disposed(by: disposeBag) + }).disposed(by: disposeBag) } private func updateInfo(_ userInfo: UserInfo) { - guard userInfo != UserInfo() else { - userNameLabel.text = "Please set a name.".localized - islandNameLabel.text = "Please set a Island Name.".localized - return - } userNameLabel.text = userInfo.name == "" ? "Please set a name.".localized : userInfo.name islandNameLabel.text = userInfo.islandName == "" ? "Please set a Island Name.".localized : userInfo.islandName fruitImageView.image = UIImage(named: userInfo.islandFruit.imageName) hemisphereLabel.text = userInfo.hemisphere.rawValue.localized.capitalized + reputationLabel.text = String(repeating: "⭐️", count: userInfo.islandReputation + 1) } } extension UserInfoView { - convenience init(_ viewModel: UserInfoSectionViewModel) { + convenience init(_ viewModel: UserInfoReactor) { self.init(frame: .zero) bind(to: viewModel) + configure() } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/VillagersView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/VillagersView.swift similarity index 74% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/VillagersView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/VillagersView.swift index 7ba94d02..f3b4c867 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/VillagersView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/VillagersView.swift @@ -75,15 +75,15 @@ class VillagersView: UIView { }() private func updateCollectionViewHeight() { - let contentHeight = self.collectionView.collectionViewLayout.collectionViewContentSize.height - self.heightConstraint.constant = contentHeight == .zero ? 60 : contentHeight + let contentHeight = collectionView.collectionViewLayout.collectionViewContentSize.height + heightConstraint.constant = contentHeight == .zero ? 60 : contentHeight } private func configure() { addSubviews(backgroundStackView) backgroundStackView.addArrangedSubviews(collectionView, descriptionLabel, resetButton) - self.heightConstraint = self.collectionView.heightAnchor.constraint(equalToConstant: 60) + heightConstraint = collectionView.heightAnchor.constraint(equalToConstant: 60) heightConstraint.priority = .defaultHigh NSLayoutConstraint.activate([ @@ -96,28 +96,44 @@ class VillagersView: UIView { ]) } - private func bind(to viewModel: VillagersSectionViewModel) { - let input = VillagersSectionViewModel.Input( - didSelectItem: collectionView.rx.itemSelected.asObservable(), - didTapVillagerLongPress: longPressGesture.rx.event - .map { (longPressGesture: UIGestureRecognizer) -> IndexPath? in - guard let collectionView = longPressGesture.view as? UICollectionView else { - return nil - } - if longPressGesture.state == .began, - let indexPath = collectionView.indexPathForItem( - at: longPressGesture.location(in: collectionView) - ) { - return indexPath - } + private func bind(to reactor: VillagersSectionReactor) { + Observable.just(VillagersSectionReactor.Action.fetch) + .bind(to: reactor.action) + .disposed(by: disposeBag) + + longPressGesture.rx.event + .map { (longPressGesture: UIGestureRecognizer) -> IndexPath? in + guard let collectionView = longPressGesture.view as? UICollectionView else { return nil - }.asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) - - output.villagers - .observe(on: MainScheduler.asyncInstance) + } + if longPressGesture.state == .began, + let indexPath = collectionView.indexPathForItem( + at: longPressGesture.location(in: collectionView) + ) { + return indexPath + } + return nil + }.compactMap { $0 } + .map { VillagersSectionReactor.Action.villagerLongPress(indexPath: $0)} + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + reactor.state + .map { $0.villagers } + .bind( + to: collectionView.rx.items( + cellIdentifier: IconCell.className, + cellType: IconCell.self + ) + ) { _, villager, cell in + cell.setImage(url: villager.iconImage) + }.disposed(by: disposeBag) + + reactor.state + .map { $0.villagers } .withUnretained(self) + .observe(on: MainScheduler.asyncInstance) .subscribe(onNext: { owner, villagers in if villagers.isEmpty { owner.emptyLabel.isHidden = false @@ -130,34 +146,26 @@ class VillagersView: UIView { owner.updateCollectionViewHeight() owner.layoutIfNeeded() }).disposed(by: disposeBag) - - output.villagers - .bind( - to: collectionView.rx.items( - cellIdentifier: IconCell.className, - cellType: IconCell.self - ) - ) { _, villager, cell in - cell.setImage(url: villager.iconImage) - }.disposed(by: disposeBag) - + collectionView.rx.itemSelected - .subscribe(onNext: { indexPath in + .withUnretained(self) + .subscribe(onNext: { owner, indexPath in HapticManager.shared.selection() - let cell = self.collectionView.cellForItem(at: indexPath) as? IconCell + let cell = owner.collectionView.cellForItem(at: indexPath) as? IconCell cell?.checkMark() }).disposed(by: disposeBag) resetButton.rx.tap - .subscribe(onNext: { _ in - let cells = self.collectionView.visibleCells as? [IconCell] + .withUnretained(self) + .subscribe(onNext: { owner, _ in + let cells = owner.collectionView.visibleCells as? [IconCell] cells?.forEach { $0.removeCheckMark() } }).disposed(by: disposeBag) } } extension VillagersView { - convenience init(_ viewModel: VillagersSectionViewModel) { + convenience init(_ viewModel: VillagersSectionReactor) { self.init(frame: .zero) configure() bind(to: viewModel) diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/EmptyView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/EmptyView.swift new file mode 100644 index 00000000..a8c5d60c --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/EmptyView.swift @@ -0,0 +1,60 @@ +// +// EmptyView.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/08/01. +// + +import UIKit + +class EmptyView: UIView { + + private lazy var titleLabel: UILabel = { + let label = UILabel( + text: "", + font: .preferredFont(for: .body, weight: .semibold), + color: .acText.withAlphaComponent(0.7) + ) + return label + }() + + private lazy var descriptionLabel: UILabel = { + let label = UILabel( + text: "", + font: .preferredFont(forTextStyle: .footnote), + color: .acText.withAlphaComponent(0.7) + ) + label.numberOfLines = 0 + label.textAlignment = .center + return label + }() + + private lazy var backgroundStackView: UIStackView = { + let stackView = UIStackView(axis: .vertical, alignment: .center, distribution: .fill, spacing: 8) + stackView.addArrangedSubviews(titleLabel, descriptionLabel) + return stackView + }() + + convenience init(title: String, description: String) { + self.init(frame: .zero) + titleLabel.text = title + descriptionLabel.text = description + configure() + } + + private func configure() { + addSubviews(backgroundStackView) + + NSLayoutConstraint.activate([ + backgroundStackView.topAnchor.constraint(equalTo: topAnchor), + backgroundStackView.bottomAnchor.constraint(equalTo: bottomAnchor), + backgroundStackView.leadingAnchor.constraint(equalTo: leadingAnchor), + backgroundStackView.trailingAnchor.constraint(equalTo: trailingAnchor) + ]) + } + + func editLabel(title: String, description: String) { + titleLabel.text = title + descriptionLabel.text = description + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/IconCell.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/IconCell.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/IconCell.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/IconCell.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/IconCell.xib b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/IconCell.xib similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/IconCell.xib rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/IconCell.xib diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/InfoContentView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/InfoContentView.swift similarity index 81% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/InfoContentView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/InfoContentView.swift index 4957d42f..8e89dfe7 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/InfoContentView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/InfoContentView.swift @@ -15,6 +15,7 @@ class InfoContentView: UIStackView { label.setContentHuggingPriority(.defaultHigh, for: .horizontal) label.setContentCompressionResistancePriority(.required, for: .horizontal) label.textColor = .acText + label.heightAnchor.constraint(greaterThanOrEqualToConstant: 30).isActive = true return label }() @@ -27,6 +28,13 @@ class InfoContentView: UIStackView { } extension InfoContentView { + convenience init(title: String) { + self.init(frame: .zero) + configure() + self.titleLabel.text = title + addArrangedSubviews(titleLabel) + } + convenience init(title: String, contentView: UIView...) { self.init(frame: .zero) configure() @@ -38,7 +46,7 @@ extension InfoContentView { convenience init(item: Item, contentView: UIView...) { self.init(frame: .zero) configure() - self.titleLabel.text = item.translations.localizedName() + titleLabel.text = item.translations.localizedName() let icon = UIImageView(path: item.image ?? item.iconImage ?? "") icon.widthAnchor.constraint(equalToConstant: 30).isActive = true icon.heightAnchor.constraint(equalTo: icon.widthAnchor).isActive = true diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/LoadingView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/LoadingView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/LoadingView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/LoadingView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/ProgressBar.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/ProgressBar.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/ProgressBar.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/ProgressBar.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/ProgressView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/ProgressView.swift similarity index 85% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/ProgressView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/ProgressView.swift index ae327641..fbe85d38 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/ProgressView.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/ProgressView.swift @@ -47,15 +47,17 @@ class ProgressView: UIStackView { ]) } - private func bind(to viewModel: ProgressViewModel) { - let output = viewModel.transform(disposeBag: disposeBag) + private func bind(to reactor: ProgressReactor) { + Observable.just(ProgressReactor.Action.fetch) + .bind(to: reactor.action) + .disposed(by: disposeBag) - output.items - .observe(on: MainScheduler.instance) + reactor.state.map { $0.itemInfo } .withUnretained(self) + .observe(on: MainScheduler.instance) .subscribe(onNext: { owner, items in owner.progressLabel.text = "\(items.itemCount) / \(items.maxCount)" - owner.progressBar.setProgress(Float(items.itemCount) / Float(items.maxCount), animated: true) + owner.progressBar.setProgress(Float(items.itemCount) / Float(items.maxCount), animated: false) }).disposed(by: disposeBag) } } @@ -66,12 +68,12 @@ extension ProgressView { self.barHeight = barHeight self.iconImageView.image = UIImage(named: category.progressIconName) configure() - bind(to: ProgressViewModel(category: category)) + bind(to: ProgressReactor(category: category)) } func updateView(category: Category) { self.iconImageView.image = UIImage(named: category.progressIconName) disposeBag = DisposeBag() - bind(to: ProgressViewModel(category: category)) + bind(to: ProgressReactor(category: category)) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/SectionHeaderView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/SectionHeaderView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/SectionHeaderView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/SectionHeaderView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/SectionView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/SectionView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/SectionView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/SectionView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/SectionsScrollView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/SectionsScrollView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Dashboard/Views/shared/SectionsScrollView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Dashboard/Views/shared/SectionsScrollView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/MaximizePlayerView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/MaximizePlayerView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/MaximizePlayerView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/MaximizePlayerView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/MinimizePlayerView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/MinimizePlayerView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/MinimizePlayerView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/MinimizePlayerView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/PlayerMode.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerMode.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/PlayerMode.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerMode.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/PlayerReactor.swift new file mode 100644 index 00000000..d494edd9 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerReactor.swift @@ -0,0 +1,121 @@ +// +// PlayerViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/22. +// + +import Foundation +import ReactorKit + +final class PlayerReactor: Reactor { + + enum Action { + case fetch + case didTapMiniPlayer + case folding + case dragGesture(_ isSwipeUp: Bool?) + case cancel + case play + case next + case prev + case playerList + case selectedSong(_ item: Item) + case shuffle + case fullRepeat + } + + enum Mutation { + case setSongs(_ items: [Item]) + case transform(_ mode: PlayerMode) + case remove + } + + struct State { + var playerMode: PlayerMode = .small + var songs: [Item] = [] + } + + let initialState: State + private let coordinator: AppCoordinator + + init(coordinator: AppCoordinator, state: State = State()) { + self.coordinator = coordinator + self.initialState = state + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let songs = MusicPlayerManager.shared.songList.map { Mutation.setSongs($0) } + return songs + + case .didTapMiniPlayer: + return .just(.transform(.large)) + + case .folding: + return .just(.transform(.small)) + + case .dragGesture( + let isSwipeUp): + guard let isSwipeUp = isSwipeUp else { + return .empty() + } + return .just(.transform(isSwipeUp ? .large : .small)) + + case .cancel: + return .just(.remove) + + case .play: + MusicPlayerManager.shared.togglePlaying() + return .empty() + + case .next: + MusicPlayerManager.shared.next() + return .empty() + + case .prev: + MusicPlayerManager.shared.prev() + return .empty() + + case .playerList: + return .just(.transform(.list)) + + case .selectedSong(let item): + MusicPlayerManager.shared.choice(item) + return .empty() + + case .shuffle: + MusicPlayerManager.shared.updatePlayerMode(to: .shuffle) + return .empty() + + case .fullRepeat: + MusicPlayerManager.shared.updatePlayerMode(to: .fullRepeat) + return .empty() + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setSongs(let items): + newState.songs = items + + case .transform(let mode): + switch mode { + case .small: + coordinator.minimize() + + case .large: + coordinator.maximize() + + case .list: break + } + newState.playerMode = mode + + case .remove: + coordinator.removePlayerViewController() + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/PlayerViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerViewController.swift similarity index 55% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/PlayerViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerViewController.swift index 022b0ecc..81a34c02 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/PlayerViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/PlayerViewController.swift @@ -59,12 +59,28 @@ class PlayerViewController: UIViewController { visualEffectView.addGestureRecognizer(dragGesture) } - func bind(to viewModel: PlayerViewModel) { - let input = PlayerViewModel.Input( - didTapMiniPlayer: minimizeViewTap.rx.event.map { _ in }.asObservable(), - didTapFoldingButton: maximizeView.foldingButton.rx.tap.asObservable(), - dragGesture: dragGesture.rx.event.map { gestureRecognizer -> Bool? in - let velocity = gestureRecognizer.velocity(in: self.visualEffectView) + func bind(to reactor: PlayerReactor) { + Observable.just(PlayerReactor.Action.fetch) + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + minimizeViewTap.rx.event.map { _ in } + .map { PlayerReactor.Action.didTapMiniPlayer } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + maximizeView.foldingButton.rx.tap + .map { PlayerReactor.Action.folding } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + dragGesture.rx.event + .withUnretained(self) + .map { owner, gestureRecognizer -> Bool? in + let velocity = gestureRecognizer.velocity(in: owner.visualEffectView) if gestureRecognizer.state == .ended { if velocity.y < 0 { return true @@ -73,26 +89,64 @@ class PlayerViewController: UIViewController { } } return nil - }.asObservable(), - didTapCancel: minimizeView.cancelButton.rx.tap.asObservable(), - didTapPlayButton: [ - minimizeView.playButton.rx.tap.asObservable(), - maximizeView.playButton.rx.tap.asObservable() - ], - didTapNextButton: [ - minimizeView.nextButton.rx.tap.asObservable(), - maximizeView.nextButton.rx.tap.asObservable() - ], - didTapPrevButton: maximizeView.previousButton.rx.tap.asObservable(), - didTapPlayList: maximizeView.listButton.rx.tap.asObservable(), - seletedSong: tableView.rx.modelSelected(Item.self).asObservable(), - didTapShuffle: maximizeView.shuffleButton.rx.tap.asObservable(), - didTapRepeat: maximizeView.repeatButton.rx.tap.asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + }.map { PlayerReactor.Action.dragGesture($0) } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + minimizeView.cancelButton.rx.tap + .map { PlayerReactor.Action.cancel } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) - output.playerMode - .compactMap { $0 } + Observable.merge( + minimizeView.playButton.rx.tap.asObservable(), + maximizeView.playButton.rx.tap.asObservable() + ).map { PlayerReactor.Action.play } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + Observable.merge( + minimizeView.nextButton.rx.tap.asObservable(), + maximizeView.nextButton.rx.tap.asObservable() + ).map { PlayerReactor.Action.next } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + maximizeView.previousButton.rx.tap + .map { PlayerReactor.Action.prev } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + maximizeView.listButton.rx.tap + .map { PlayerReactor.Action.playerList } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + tableView.rx.modelSelected(Item.self) + .map { PlayerReactor.Action.selectedSong($0) } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + maximizeView.shuffleButton.rx.tap + .map { PlayerReactor.Action.shuffle } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + maximizeView.repeatButton.rx.tap + .map { PlayerReactor.Action.fullRepeat } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + reactor.state.map { $0.playerMode } .withUnretained(self) .subscribe(onNext: { owner, playerMode in switch playerMode { @@ -129,17 +183,23 @@ class PlayerViewController: UIViewController { } }).disposed(by: disposeBag) - output.songs + reactor.state.map { $0.songs } .bind(to: tableView.rx.items(cellIdentifier: SongRow.className, cellType: SongRow.self)) { _, item, cell in cell.setUp(to: item) }.disposed(by: disposeBag) - MusicPlayerManager.shared.playingSongIndex - .compactMap { $0 } - .map { IndexPath(row: $0, section: .zero) } + reactor.state.map { $0.songs } + .filter { $0.isEmpty == false } .withUnretained(self) - .subscribe(onNext: { owner, indexPath in - owner.tableView.selectRow(at: indexPath, animated: true, scrollPosition: .top) + .subscribe(onNext: { owner, _ in + MusicPlayerManager.shared.playingSongIndex + .compactMap { $0 } + .map { IndexPath(row: $0, section: .zero) } + .withUnretained(self) + .subscribe(onNext: { owner, indexPath in + owner.tableView.selectRow(at: indexPath, animated: true, scrollPosition: .top) + }).disposed(by: owner.disposeBag) }).disposed(by: disposeBag) + } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/SongRow.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/SongRow.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/SongRow.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/SongRow.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/SongRow.xib b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/SongRow.xib similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/MusicPlayer/SongRow.xib rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/MusicPlayer/SongRow.xib diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Coordinator/VillagersCoordinator.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Coordinator/VillagersCoordinator.swift similarity index 81% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Coordinator/VillagersCoordinator.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Coordinator/VillagersCoordinator.swift index 80db7bb8..0e137698 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Coordinator/VillagersCoordinator.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Coordinator/VillagersCoordinator.swift @@ -24,7 +24,7 @@ final class VillagersCoordinator: Coordinator { func start() { let villagersVC = VillagersViewController() - villagersVC.bind(to: VillagersViewModel(coordinator: self)) + villagersVC.bind(to: VillagersReactor(coordinator: self)) rootViewController.addChild(villagersVC) } @@ -32,7 +32,9 @@ final class VillagersCoordinator: Coordinator { switch route { case .detail(let villager): let viewController = VillagerDetailViewController() - viewController.bind(to: VillagerDetailViewModel(villager: villager)) + viewController.bind( + to: VillagerDetailReactor(villager: villager, state: .init(villager: villager)) + ) rootViewController.pushViewController(viewController, animated: true) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewControllers/VillagerDetailViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewControllers/VillagerDetailViewController.swift similarity index 72% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewControllers/VillagerDetailViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewControllers/VillagerDetailViewController.swift index 1d46f712..d4ed2ef9 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewControllers/VillagerDetailViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewControllers/VillagerDetailViewController.swift @@ -63,49 +63,64 @@ class VillagerDetailViewController: UIViewController { navigationItem.rightBarButtonItems = [houseBarButton, likeBarButton] } - func bind(to viewModel: VillagerDetailViewModel) { - let input = VillagerDetailViewModel.Input( - didTapHeart: likeButton.rx.tap.asObservable(), - didTapHouse: houseButton.rx.tap.asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) - let config = UIImage.SymbolConfiguration(scale: .large) + func bind(to reactor: VillagerDetailReactor) { + let buttonConfigure = UIImage.SymbolConfiguration(textStyle: .callout, scale: .large) + self.rx.viewDidLoad + .map { VillagerDetailReactor.Action.fetch } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) - output.villager - .observe(on: MainScheduler.instance) - .withUnretained(self) - .subscribe(onNext: { owner, villager in - let detailSection = VillagerDetailView(villager) - owner.sectionsScrollView.addSection(SectionView(contentView: detailSection)) - owner.navigationItem.title = villager.translations.localizedName() + likeButton.rx.tap + .map { VillagerDetailReactor.Action.like } + .subscribe(onNext: { action in + reactor.action.onNext(action) }).disposed(by: disposeBag) - output.villager - .compactMap { $0.houseImage } - .observe(on: MainScheduler.asyncInstance) - .withUnretained(self) - .subscribe(onNext: { owner, houseImage in - owner.addHouseSection(houseImage) + houseButton.rx.tap + .map { VillagerDetailReactor.Action.home } + .subscribe(onNext: { action in + reactor.action.onNext(action) }).disposed(by: disposeBag) - output.isLiked + reactor.state.map { $0.isLiked } + .compactMap { $0 } .observe(on: MainScheduler.instance) .withUnretained(self) .subscribe(onNext: { owner, isLiked in owner.likeButton.setImage( - UIImage(systemName: isLiked ? "heart.fill" : "heart", withConfiguration: config), + UIImage(systemName: isLiked ? "heart.fill" : "heart")?.withConfiguration(buttonConfigure), for: .normal ) }).disposed(by: disposeBag) - output.isResident + reactor.state.map { $0.isResident } + .compactMap { $0 } .observe(on: MainScheduler.instance) .withUnretained(self) .subscribe(onNext: { owner, isResident in - owner.houseButton.setImage( - UIImage(systemName: isResident ? "house.fill" : "house", withConfiguration: config), - for: .normal - ) + owner.houseButton.setImage( + UIImage(systemName: isResident ? "house.fill" : "house")?.withConfiguration(buttonConfigure), + for: .normal + ) + }).disposed(by: disposeBag) + + reactor.state.map { $0.villager } + .take(1) + .observe(on: MainScheduler.instance) + .withUnretained(self) + .subscribe(onNext: { owner, villager in + let detailSection = VillagerDetailView(villager) + owner.sectionsScrollView.addSection(SectionView(contentView: detailSection)) + owner.navigationItem.title = villager.translations.localizedName() + }).disposed(by: disposeBag) + + reactor.state.compactMap { $0.villager.houseImage } + .take(1) + .observe(on: MainScheduler.asyncInstance) + .withUnretained(self) + .subscribe(onNext: { owner, houseImage in + owner.addHouseSection(houseImage) }).disposed(by: disposeBag) } @@ -116,6 +131,6 @@ class VillagerDetailViewController: UIViewController { iconName: "house.circle.fill", contentView: houseSection ) - self.sectionsScrollView.addSection(sectionView) + sectionsScrollView.addSection(sectionView) } } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewControllers/VillagersViewController.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewControllers/VillagersViewController.swift similarity index 59% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewControllers/VillagersViewController.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewControllers/VillagersViewController.swift index cfe1eb3b..bd66d7ea 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewControllers/VillagersViewController.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewControllers/VillagersViewController.swift @@ -29,7 +29,7 @@ class VillagersViewController: UIViewController { } } - enum SearchScope: String { + enum SearchScope: String, CaseIterable { case all = "All" case liked = "Liked" case residents = "Residents" @@ -63,13 +63,8 @@ class VillagersViewController: UIViewController { private lazy var searchController: UISearchController = { let searchController = UISearchController(searchResultsController: nil) searchController.searchBar.showsScopeBar = true - searchController.hidesNavigationBarDuringPresentation = false searchController.searchBar.placeholder = "Search a villager".localized - searchController.searchBar.scopeButtonTitles = [ - SearchScope.all.rawValue.localized, - SearchScope.liked.rawValue.localized, - SearchScope.residents.rawValue.localized - ] + searchController.searchBar.scopeButtonTitles = SearchScope.allCases.map { $0.rawValue.localized } return searchController }() @@ -81,6 +76,11 @@ class VillagersViewController: UIViewController { return activityIndicator }() + private lazy var emptyView: EmptyView = EmptyView( + title: "There are no villagers.".localized, + description: "They appear here when you press the villager's heart button or home button.".localized + ) + override func viewDidLoad() { super.viewDidLoad() setUpViews() @@ -91,26 +91,90 @@ class VillagersViewController: UIViewController { navigationController?.navigationBar.sizeToFit() } - func bind(to viewModel: VillagersViewModel) { - let input = VillagersViewModel.Input( - searchBarText: searchController.searchBar.rx.text.asObservable(), - selectedScopeButton: searchController.searchBar.rx.selectedScopeButtonIndex - .compactMap { self.searchController.searchBar.scopeButtonTitles?[$0] }, - didSelectedMenuKeyword: selectedKeyword.asObservable(), - villagerSelected: collectionView.rx.itemSelected.asObservable() - ) - let output = viewModel.transform(input: input, disposeBag: disposeBag) + func bind(to reactor: VillagersReactor) { + self.rx.viewDidLoad + .map { VillagersReactor.Action.fetch } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + searchController.searchBar.rx.cancelButtonClicked + .map { VillagersReactor.Action.searchText("") } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + searchController.searchBar.rx.text + .compactMap { $0 } + .map { VillagersReactor.Action.searchText($0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + searchController.searchBar.rx.text + .map { $0 != "" } + .withUnretained(self) + .subscribe(onNext: { owner, isSearching in + if isSearching { + owner.emptyView.editLabel( + title: "There are no villagers.".localized, + description: "There are no results for your search.".localized + ) + } + }).disposed(by: disposeBag) + + searchController.searchBar.rx.selectedScopeButtonIndex + .compactMap { [weak self] in self?.searchController.searchBar.scopeButtonTitles?[$0] } + .map { VillagersReactor.Action.selectedScope($0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) - output.villagers + selectedKeyword + .map { VillagersReactor.Action.selectedMenu(keywords: $0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + collectionView.rx.itemSelected + .map { VillagersReactor.Action.selectedVillager(indexPath: $0) } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + reactor.state.map { $0.villagers } .bind(to: collectionView.rx.items(cellIdentifier: VillagersCell.className, cellType: VillagersCell.self)) { _, villager, cell in cell.setUp(villager) }.disposed(by: disposeBag) + reactor.state.map { $0.villagers } + .map { !$0.isEmpty } + .bind(to: emptyView.rx.isHidden) + .disposed(by: disposeBag) + + reactor.state.map { $0.isLoading } + .bind(to: self.activityIndicator.rx.isAnimating) + .disposed(by: disposeBag) + searchController.searchBar.rx.selectedScopeButtonIndex .observe(on: MainScheduler.asyncInstance) - .subscribe(onNext: { _ in - self.searchController.searchBar.endEditing(true) - self.selectedKeyword.accept(self.currentSelected) + .compactMap { SearchScope.allCases[safe: $0] } + .withUnretained(self) + .subscribe(onNext: { owner, currentScope in + switch currentScope { + case .all: + owner.emptyView.editLabel( + title: "There are no villagers.".localized, + description: "Please check the network status.".localized + ) + case .liked: + owner.emptyView.editLabel( + title: "There are no villagers.".localized, + description: "Tap the villager's heart button and it will appear here.".localized + ) + case .residents: + owner.emptyView.editLabel( + title: "There are no villagers.".localized, + description: "Tap the villager's home button and it will appear here.".localized + ) + } + owner.searchController.searchBar.endEditing(true) + owner.selectedKeyword.accept(owner.currentSelected) }).disposed(by: disposeBag) selectedKeyword @@ -122,27 +186,26 @@ class VillagersViewController: UIViewController { systemName: isFiltering ? "arrow.up.arrow.down.circle.fill" : "arrow.up.arrow.down.circle" ) }).disposed(by: disposeBag) - - output.isLoading - .bind(to: self.activityIndicator.rx.isAnimating) - .disposed(by: disposeBag) } private func setUpViews() { view.backgroundColor = .acBackground setUpNavigationItem() setUpSearchController() - view.addSubviews(collectionView) + view.addSubviews(collectionView, emptyView) NSLayoutConstraint.activate([ - collectionView.heightAnchor.constraint(equalTo: view.heightAnchor), + collectionView.topAnchor.constraint(equalTo: view.topAnchor), collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor), collectionView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), - collectionView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor) + collectionView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor), + emptyView.centerXAnchor.constraint(equalTo: view.centerXAnchor), + emptyView.centerYAnchor.constraint(equalTo: view.centerYAnchor), + emptyView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor, constant: -40) ]) } private func setUpNavigationItem() { - self.navigationItem.title = "Villagers".localized + navigationItem.title = "Villagers".localized let moreButton = UIBarButtonItem( image: UIImage(systemName: "arrow.up.arrow.down.circle"), style: .plain, @@ -150,8 +213,8 @@ class VillagersViewController: UIViewController { action: nil ) moreButton.tintColor = .acNavigationBarTint - self.navigationItem.rightBarButtonItem = moreButton - self.navigationItem.rightBarButtonItem?.menu = createFilterMenu() + navigationItem.rightBarButtonItem = moreButton + navigationItem.rightBarButtonItem?.menu = createFilterMenu() } private func setUpSearchController() { @@ -167,13 +230,13 @@ class VillagersViewController: UIViewController { (Menu.species.rawValue.localized, Specie.allCases.map { $0.rawValue.localized }) ] - let actionHandler: (UIAction) -> Void = { action in + let actionHandler: (UIAction) -> Void = { [weak self] action in for menuItem in menuItems where menuItem.subTitle.contains(action.title) { let menu = Menu(rawValue: Menu.transform(menuItem.title) ?? "") ?? .all - self.currentSelected[menu] = action.title + self?.currentSelected[menu] = action.title } - self.currentSelected[Menu.all] = nil - self.navigationItem.rightBarButtonItem?.menu = self.createFilterMenu() + self?.currentSelected[Menu.all] = nil + self?.navigationItem.rightBarButtonItem?.menu = self?.createFilterMenu() } let items: [UIMenu] = menuItems .map { UIMenu(title: $0.title, subTitles: $0.subTitle, actionHandler: actionHandler) } @@ -188,9 +251,9 @@ class VillagersViewController: UIViewController { } } - let all = UIAction(title: Menu.all.rawValue.localized, handler: { _ in - self.currentSelected = [Menu.all: Menu.all.rawValue] - self.navigationItem.rightBarButtonItem?.menu = self.createFilterMenu() + let all = UIAction(title: Menu.all.rawValue.localized, handler: { [weak self] _ in + self?.currentSelected = [Menu.all: Menu.all.rawValue] + self?.navigationItem.rightBarButtonItem?.menu = self?.createFilterMenu() }) if currentSelected[Menu.all] != nil { all.state = .on diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewModels/VillagerDetailReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewModels/VillagerDetailReactor.swift new file mode 100644 index 00000000..0e8b182f --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewModels/VillagerDetailReactor.swift @@ -0,0 +1,100 @@ +// +// VillagerDetailViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/07/04. +// + +import Foundation +import ReactorKit + +final class VillagerDetailReactor: Reactor { + + enum Action { + case fetch + case like + case home + } + + enum Mutation { + case updateLike + case updateHouse + case setLike(_ isLiked: Bool) + case setHouse(_ isResident: Bool) + } + + struct State { + let villager: Villager + var isLiked: Bool? + var isResident: Bool? + } + + let initialState: State + private let likeStorage: VillagersLikeStorage + private let houseStorage: VillagersHouseStorage + private let villager: Villager + + init( + villager: Villager, + state: State, + likeStorage: VillagersLikeStorage = CoreDataVillagersLikeStorage(), + houseStorage: VillagersHouseStorage = CoreDataVillagersHouseStorage() + ) { + self.villager = villager + self.initialState = state + self.likeStorage = likeStorage + self.houseStorage = houseStorage + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let houseState = Items.shared.villagerHouseList + .take(1) + .withUnretained(self) + .map { owner, villagers in + villagers.contains(where: { $0.name == owner.villager.name }) + }.map { Mutation.setHouse($0) } + let likeState = Items.shared.villagerLikeList + .take(1) + .withUnretained(self) + .map { owner, villagers in + villagers.contains(where: { $0.name == owner.villager.name }) + }.map { Mutation.setLike($0) } + return .merge([ + houseState, + likeState + ]) + + case .like: + HapticManager.shared.impact(style: .medium) + Items.shared.updateVillagerLike(villager) + likeStorage.update(villager) + return .just(.updateLike) + + case .home: + HapticManager.shared.impact(style: .medium) + Items.shared.updateVillagerHouse(villager) + houseStorage.update(villager) + return .just(.updateHouse) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setLike(let isLiked): + newState.isLiked = isLiked + + case .setHouse(let isResident): + newState.isResident = isResident + + case .updateHouse: + newState.isResident = newState.isResident == true ? false : true + + case .updateLike: + newState.isLiked = newState.isLiked == true ? false : true + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewModels/VillagersCellReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewModels/VillagersCellReactor.swift new file mode 100644 index 00000000..5e6c9b7f --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewModels/VillagersCellReactor.swift @@ -0,0 +1,97 @@ +// +// VillagersCellViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/29. +// + +import Foundation +import ReactorKit + +final class VillagersCellReactor: Reactor { + + enum Action { + case fetch + case like + case home + } + + enum Mutation { + case updateLike + case updateHouse + case setLike(_ isLiked: Bool) + case setHouse(_ isResident: Bool) + } + + struct State { + var isLiked: Bool? + var isResident: Bool? + } + + let initialState: State + private let villager: Villager + private let likeStorage: VillagersLikeStorage + private let houseStorage: VillagersHouseStorage + + init( + state: State = State(), + villager: Villager, + likeStorage: VillagersLikeStorage = CoreDataVillagersLikeStorage(), + houseStorage: VillagersHouseStorage = CoreDataVillagersHouseStorage() + ) { + self.initialState = state + self.villager = villager + self.likeStorage = likeStorage + self.houseStorage = houseStorage + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let houseState = Items.shared.villagerHouseList + .take(1) + .withUnretained(self) + .map { owner, villagers in + villagers.contains(where: { $0.name == owner.villager.name }) + }.map { Mutation.setHouse($0) } + let likeState = Items.shared.villagerLikeList + .take(1) + .withUnretained(self) + .map { owner, villagers in + villagers.contains(where: { $0.name == owner.villager.name }) + }.map { Mutation.setLike($0) } + return .merge([ + houseState, + likeState + ]) + + case .like: + return .just(.updateLike) + + case .home: + return .just(.updateHouse) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setLike(let isLiked): + newState.isLiked = isLiked + + case .setHouse(let isResident): + newState.isResident = isResident + + case .updateHouse: + HapticManager.shared.impact(style: .medium) + Items.shared.updateVillagerHouse(villager) + houseStorage.update(villager) + + case .updateLike: + HapticManager.shared.impact(style: .medium) + Items.shared.updateVillagerLike(villager) + likeStorage.update(villager) + } + return newState + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewModels/VillagersReactor.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewModels/VillagersReactor.swift new file mode 100644 index 00000000..c9b7fda6 --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/ViewModels/VillagersReactor.swift @@ -0,0 +1,213 @@ +// +// VillagersViewModel.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/29. +// + +import Foundation +import ReactorKit + +final class VillagersReactor: Reactor { + + enum Action { + case fetch + case searchText(_ text: String) + case selectedScope(_ title: String) + case selectedMenu(keywords: [VillagersViewController.Menu: String]) + case selectedVillager(indexPath: IndexPath) + } + + enum Mutation { + case setVillagers(_ villagers: [Villager]) + case setAllVillagers(_ villagers: [Villager]) + case setLikeVillagers(_ villagers: [Villager]) + case setHouseVillagers(_ villagers: [Villager]) + case setLoadingState(_ isLoading: Bool) + case setScope(_ scope: VillagersViewController.SearchScope) + case transition(route: VillagersCoordinator.Route) + } + + struct State { + var villagers: [Villager] = [] + var isLoading: Bool = true + } + + let initialState: State + var coordinator: VillagersCoordinator? + + private var allVillagers: [Villager] = [] + private var likeVillagers: [Villager] = [] + private var houseVillagers: [Villager] = [] + private var currentScope: VillagersViewController.SearchScope = .all + private var currentKeywords: [VillagersViewController.Menu: String] = [:] + private var lastSearchKeyword: String = "" + + init(coordinator: VillagersCoordinator, state: State = State()) { + self.coordinator = coordinator + self.initialState = state + } + + func mutate(action: Action) -> Observable { + switch action { + case .fetch: + let allVillagers = Items.shared.villagerList + .filter { $0.isEmpty == false } + .map { Mutation.setAllVillagers($0) } + let likeVillagers = Items.shared.villagerLikeList.map { Mutation.setLikeVillagers($0) } + let houseVillagers = Items.shared.villagerHouseList.map { Mutation.setHouseVillagers($0) } + let loadingState = Items.shared.isLoading.map { Mutation.setLoadingState($0) } + return .merge([ + loadingState, + allVillagers, + likeVillagers, + houseVillagers + ]) + + case .searchText(let text): + lastSearchKeyword = text.lowercased() + guard text != "" else { + return currentVillagers() + .withUnretained(self) + .map { owner, villagers in + owner.filtered(villagers: villagers, keywords: owner.currentKeywords) + }.map { Mutation.setVillagers($0) } + } + return currentVillagers() + .withUnretained(self) + .map { owner, villagers in + owner.filtered( + villagers: owner.search(villagers: villagers, text: text.lowercased()), + keywords: owner.currentKeywords + ) + }.map { Mutation.setVillagers($0)} + + case .selectedScope(let title): + guard let currentScope = VillagersViewController.SearchScope.transform(title) + .flatMap({ VillagersViewController.SearchScope(rawValue: $0) }) else { + return Observable.empty() + } + return Observable.just(Mutation.setScope(currentScope)) + + case .selectedMenu(let keywords): + currentKeywords = keywords + return currentVillagers() + .withUnretained(self) + .map { owner, villagers in + owner.filtered( + villagers: owner.search(villagers: villagers, text: owner.lastSearchKeyword), + keywords: keywords + ) + }.map { Mutation.setVillagers($0) } + + case .selectedVillager(let indexPath): + guard let villager = currentState.villagers[safe: indexPath.item] else { + return Observable.empty() + } + return Observable.just(Mutation.transition(route: .detail(villager: villager))) + } + } + + func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .setLoadingState(let isLoading): + newState.isLoading = isLoading + + case .setVillagers(let villagers): + newState.villagers = search(villagers: villagers, text: lastSearchKeyword) + + case .setAllVillagers(let villagers): + if currentScope == .all { + newState.villagers = villagers + } + allVillagers = villagers + + case .setLikeVillagers(let villagers): + if currentScope == .liked { + newState.villagers = filtered( + villagers: search(villagers: villagers, text: lastSearchKeyword), + keywords: currentKeywords + ) + } + likeVillagers = villagers + + case .setHouseVillagers(let villagers): + if currentScope == .residents { + newState.villagers = filtered( + villagers: search(villagers: villagers, text: lastSearchKeyword), + keywords: currentKeywords + ) + } + houseVillagers = villagers + + case .setScope(let scope): + currentScope = scope + + case .transition(let route): + coordinator?.transition(for: route) + } + return newState + } + + private func currentVillagers() -> Observable<[Villager]> { + switch currentScope { + case .all: return .just(allVillagers) + case .liked: return .just(likeVillagers) + case .residents: return .just(houseVillagers) + } + } + + private func filtered( + villagers: [Villager], + keywords: [VillagersViewController.Menu: String] + ) -> [Villager] { + guard currentKeywords.isEmpty == false else { + return villagers + } + var filteredData = [Villager]() + currentKeywords = keywords + keywords + .sorted { $0.key.rawValue.count > $1.key.rawValue.count } + .forEach { (key, value) in + switch key { + case .personality: + let value = Personality.transform(localizedString: value) ?? "" + filteredData = villagers.filter { $0.personality == Personality(rawValue: value) } + + case .gender: + let value = Gender.transform(localizedString: value) ?? "" + filteredData = (filteredData.isEmpty ? villagers : filteredData) + .filter { $0.gender == Gender(rawValue: value) } + + case .type: + filteredData = (filteredData.isEmpty ? villagers : filteredData) + .filter { $0.subtype == Subtype(rawValue: value) } + + case .species: + let value = Specie.transform(localizedString: value) ?? "" + filteredData = (filteredData.isEmpty ? villagers : filteredData) + .filter { $0.species == Specie(rawValue: value) } + + case .all: filteredData = villagers + } + } + return filteredData + } + + private func search(villagers: [Villager], text: String) -> [Villager] { + guard lastSearchKeyword != "" else { + return villagers + } + return villagers + .filter { + let villagerName = $0.translations.localizedName() + let isChosungCheck = text.isChosung + if isChosungCheck { + return (villagerName.contains(text) || villagerName.chosung.contains(text)) + } else { + return villagerName.contains(text) + } + } + } +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Views/VillagerDetailView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Views/VillagerDetailView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Views/VillagerDetailView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Views/VillagerDetailView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Views/VillagerHouseView.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Views/VillagerHouseView.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Views/VillagerHouseView.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Views/VillagerHouseView.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Views/VillagersCell.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Views/VillagersCell.swift new file mode 100644 index 00000000..eba1cd2e --- /dev/null +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Views/VillagersCell.swift @@ -0,0 +1,78 @@ +// +// VillagersCell.swift +// Animal-Crossing-Wiki +// +// Created by Ari on 2022/06/29. +// + +import UIKit +import RxSwift +import RxCocoa + +class VillagersCell: UICollectionViewCell { + + private var disposeBag = DisposeBag() + + @IBOutlet weak var iconImage: UIImageView! + @IBOutlet weak var nameLabel: UILabel! + @IBOutlet weak var likeButton: UIButton! + @IBOutlet weak var houseButton: UIButton! + + override func awakeFromNib() { + super.awakeFromNib() + contentView.backgroundColor = .acSecondaryBackground + contentView.layer.cornerRadius = 14 + nameLabel.font = .preferredFont(for: .footnote, weight: .semibold) + likeButton.setImage(UIImage(systemName: "heart"), for: .normal) + houseButton.setImage(UIImage(systemName: "house"), for: .normal) + } + + override func prepareForReuse() { + super.prepareForReuse() + iconImage.kf.cancelDownloadTask() + likeButton.setImage(nil, for: .normal) + houseButton.setImage(nil, for: .normal) + disposeBag = DisposeBag() + } + + func setUp(_ villager: Villager) { + iconImage.setImage(with: villager.iconImage) + nameLabel.text = villager.translations.localizedName() + bind(reactor: VillagersCellReactor(villager: villager)) + } + + private func bind(reactor: VillagersCellReactor) { + Observable.just(VillagersCellReactor.Action.fetch) + .bind(to: reactor.action) + .disposed(by: disposeBag) + + likeButton.rx.tap + .map { VillagersCellReactor.Action.like } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + houseButton.rx.tap + .map { VillagersCellReactor.Action.home } + .subscribe(onNext: { action in + reactor.action.onNext(action) + }).disposed(by: disposeBag) + + reactor.state.map { $0.isLiked } + .compactMap { $0 } + .observe(on: MainScheduler.instance) + .withUnretained(self) + .subscribe(onNext: { owner, isLiked in + owner.likeButton.setImage(UIImage(systemName: isLiked ? "heart.fill" : "heart"), for: .normal) + }).disposed(by: disposeBag) + + reactor.state.map { $0.isResident } + .compactMap { $0 } + .observe(on: MainScheduler.instance) + .withUnretained(self) + .subscribe(onNext: { owner, isResident in + owner.houseButton.setImage(UIImage(systemName: isResident ? "house.fill" : "house"), for: .normal) + }).disposed(by: disposeBag) + } + +} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Views/VillagersCell.xib b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Views/VillagersCell.xib similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Views/VillagersCell.xib rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Presentation/Villagers/Views/VillagersCell.xib diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Utility/AboutItem.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/AboutItem.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Utility/AboutItem.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/AboutItem.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Utility/HapticManager.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/HapticManager.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Utility/HapticManager.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/HapticManager.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Utility/Items.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/Items.swift similarity index 91% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Utility/Items.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/Items.swift index df338d9d..35189b62 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Utility/Items.swift +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/Items.swift @@ -15,8 +15,6 @@ final class Items { // MARK: - Private private let network: APIProvider = DefaultAPIProvider() - private let villagersLikeStorage = CoreDataVillagersLikeStorage() - private let villagersHouseStorage = CoreDataVillagersHouseStorage() private let disposeBag = DisposeBag() private let networkGroup = DispatchGroup() @@ -31,6 +29,7 @@ final class Items { private let currentUserInfo = BehaviorRelay(value: nil) private let currentDailyTasks = BehaviorRelay<[DailyTask]>(value: []) private let userItems = BehaviorRelay<[Category: [Item]]>(value: [:]) + private let songs = BehaviorRelay<[Item]>(value: []) private(set) var materialsItemList: [String: Item] = [:] @@ -48,12 +47,7 @@ final class Items { } private func setUpUserCollection() { - CoreDataUserInfoStorage().fetchUserInfo() - .subscribe(onSuccess: { userInfo in - self.currentUserInfo.accept(userInfo) - }, onFailure: { error in - debugPrint(error) - }).disposed(by: disposeBag) + currentUserInfo.accept(CoreDataUserInfoStorage().fetchUserInfo()) CoreDataDailyTaskStorage().fetchTasks() .subscribe(onSuccess: { tasks in @@ -61,20 +55,9 @@ final class Items { }, onFailure: { error in debugPrint(error) }).disposed(by: disposeBag) - - CoreDataVillagersLikeStorage().fetch() - .subscribe(onSuccess: { villagers in - self.villagersLike.accept(villagers) - }, onFailure: { error in - debugPrint(error) - }).disposed(by: disposeBag) - - CoreDataVillagersHouseStorage().fetch() - .subscribe(onSuccess: { villagers in - self.villagersHouse.accept(villagers) - }, onFailure: { error in - debugPrint(error) - }).disposed(by: disposeBag) + + self.villagersLike.accept(CoreDataVillagersLikeStorage().fetch()) + self.villagersHouse.accept(CoreDataVillagersHouseStorage().fetch()) CoreDataItemsStorage().fetch() .subscribe(onSuccess: { items in @@ -96,6 +79,7 @@ final class Items { switch result { case .success(let response): let items = response.map { $0.toDomain() } + .sorted(by: { $0.translations.localizedName() < $1.translations.localizedName() }) self.villagers.accept(items) case .failure(let error): os_log( @@ -337,10 +321,10 @@ final class Items { group.leave() } group.enter() - network.request(MusicRequest()) { result in + network.request(SongsRequest()) { result in switch result { case .success(let response): - let items = response.map { $0.value.toDomain() } + let items = response.map { $0.toDomain() } .sorted(by: { $0.translations.localizedName() < $1.translations.localizedName() }) itemList[.songs] = items case .failure(let error): @@ -477,4 +461,37 @@ extension Items { .filter { $0.keyword.contains(keyword) } .sorted(by: {$0.category.rawValue < $1.category.rawValue }) } + + func reset() { + villagersLike.accept([]) + villagersHouse.accept([]) + let currentItems = userItems.value.map { $0.key } + var resetItem = userItems.value + currentItems.forEach { category in + resetItem[category] = [] + } + userItems.accept(resetItem) + currentUserInfo.accept(UserInfo()) + currentDailyTasks.accept(DailyTask.tasks) + } + + func allCheckItem(category: Category) { + var items = userItems.value + let allItems = categories.value[category] + var newItems: [Item] + if let currentItems = items[category] { + newItems = allItems?.filter { currentItems.contains($0) == false } ?? [] + } else { + newItems = allItems ?? [] + } + items[category, default: []].append(contentsOf: newItems) + userItems.accept(items) + } + + func resetCheckItem(category: Category) { + var items = userItems.value + items[category, default: []] = [] + userItems.accept(items) + } + } diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Utility/MusicPlayerManager.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/MusicPlayerManager.swift similarity index 100% rename from Animal-Crossing-Wiki/Animal-Crossing-Wiki/Utility/MusicPlayerManager.swift rename to Animal-Crossing-Wiki/Animal-Crossing-Wiki/Sources/Utility/MusicPlayerManager.swift diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewModels/VillagerDetailViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewModels/VillagerDetailViewModel.swift deleted file mode 100644 index 711ea128..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewModels/VillagerDetailViewModel.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// VillagerDetailViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/07/04. -// - -import Foundation -import RxSwift -import RxRelay - -final class VillagerDetailViewModel { - - private let likeStorage: VillagersLikeStorage - private let houseStorage: VillagersHouseStorage - private let villager: Villager - - init( - likeStorage: VillagersLikeStorage = CoreDataVillagersLikeStorage(), - houseStorage: VillagersHouseStorage = CoreDataVillagersHouseStorage(), - villager: Villager - ) { - self.likeStorage = likeStorage - self.houseStorage = houseStorage - self.villager = villager - } - - struct Input { - let didTapHeart: Observable - let didTapHouse: Observable - } - - struct Output { - let villager: Observable - let isLiked: Observable - let isResident: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let isLiked = BehaviorRelay(value: false) - let isResident = BehaviorRelay(value: false) - - Items.shared.villagerHouseList - .withUnretained(self) - .subscribe(onNext: { owner, villagers in - isResident.accept(villagers.contains(where: { $0.name == owner.villager.name })) - }).disposed(by: disposeBag) - - Items.shared.villagerLikeList - .withUnretained(self) - .subscribe(onNext: { owner, villagers in - isLiked.accept(villagers.contains(where: { $0.name == owner.villager.name })) - }).disposed(by: disposeBag) - - input.didTapHeart - .subscribe(onNext: { _ in - HapticManager.shared.impact(style: .medium) - Items.shared.updateVillagerLike(self.villager) - self.likeStorage.update(self.villager) - }).disposed(by: disposeBag) - - input.didTapHouse - .subscribe(onNext: { _ in - HapticManager.shared.impact(style: .medium) - Items.shared.updateVillagerHouse(self.villager) - self.houseStorage.update(self.villager) - }).disposed(by: disposeBag) - - return Output( - villager: Observable.just(villager), - isLiked: isLiked.asObservable(), - isResident: isResident.asObservable() - ) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewModels/VillagersCellViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewModels/VillagersCellViewModel.swift deleted file mode 100644 index 450184ec..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewModels/VillagersCellViewModel.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// VillagersCellViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/29. -// - -import Foundation -import RxSwift -import RxRelay - -final class VillagersCellViewModel { - - private let villager: Villager - private let likeStorage: VillagersLikeStorage - private let houseStorage: VillagersHouseStorage - - init( - villager: Villager, - likeStorage: VillagersLikeStorage = CoreDataVillagersLikeStorage(), - houseStorage: VillagersHouseStorage = CoreDataVillagersHouseStorage() - ) { - self.villager = villager - self.likeStorage = likeStorage - self.houseStorage = houseStorage - } - - struct Input { - let didTapHeart: Observable - let didTapHouse: Observable - } - - struct Output { - let isLiked: Observable - let isResident: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let isLiked = BehaviorRelay(value: false) - let isResident = BehaviorRelay(value: false) - - Items.shared.villagerHouseList - .subscribe(onNext: { villagers in - isResident.accept(villagers.contains(where: { $0.name == self.villager.name })) - }).disposed(by: disposeBag) - - Items.shared.villagerLikeList - .subscribe(onNext: { villagers in - isLiked.accept(villagers.contains(where: { $0.name == self.villager.name })) - }).disposed(by: disposeBag) - - input.didTapHeart - .withUnretained(self) - .subscribe(onNext: { owner, _ in - HapticManager.shared.impact(style: .medium) - Items.shared.updateVillagerLike(owner.villager) - owner.likeStorage.update(owner.villager) - }).disposed(by: disposeBag) - - input.didTapHouse - .withUnretained(self) - .subscribe(onNext: { owner, _ in - HapticManager.shared.impact(style: .medium) - Items.shared.updateVillagerHouse(owner.villager) - owner.houseStorage.update(owner.villager) - }).disposed(by: disposeBag) - - return Output( - isLiked: isLiked.asObservable(), - isResident: isResident.asObservable() - ) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewModels/VillagersViewModel.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewModels/VillagersViewModel.swift deleted file mode 100644 index b709a534..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/ViewModels/VillagersViewModel.swift +++ /dev/null @@ -1,170 +0,0 @@ -// -// VillagersViewModel.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/29. -// - -import Foundation -import RxSwift -import RxRelay - -final class VillagersViewModel { - - var coordinator: VillagersCoordinator? - - init(coordinator: VillagersCoordinator) { - self.coordinator = coordinator - } - - struct Input { - let searchBarText: Observable - let selectedScopeButton: Observable - let didSelectedMenuKeyword: Observable<[VillagersViewController.Menu: String]> - let villagerSelected: Observable - } - - struct Output { - let villagers: Observable<[Villager]> - let isLoading: Observable - } - - func transform(input: Input, disposeBag: DisposeBag) -> Output { - let indicationVillagers = BehaviorRelay<[Villager]>(value: []) - let currentTap = BehaviorRelay(value: .all) - var allVillagers = [Villager]() - var likeVillagers = [Villager]() - var houseVillagers = [Villager]() - let isLoading = BehaviorRelay(value: true) - - input.searchBarText - .compactMap { $0 } - .subscribe(onNext: { text in - guard text != "" else { - indicationVillagers.accept(allVillagers) - switch currentTap.value { - case .all: indicationVillagers.accept(allVillagers) - case .liked: indicationVillagers.accept(likeVillagers) - case .residents: indicationVillagers.accept(houseVillagers) - } - return - } - var filterVillagers = [Villager]() - switch currentTap.value { - case .all: filterVillagers = allVillagers - case .liked: filterVillagers = likeVillagers - case .residents: filterVillagers = houseVillagers - } - filterVillagers = filterVillagers - .filter { - let villagerName = $0.translations.localizedName() - let isChosungCheck = text.isChosung - if isChosungCheck { - return (villagerName.contains(text) || villagerName.chosung.contains(text)) - } else { - return villagerName.contains(text) - } - } - indicationVillagers.accept(filterVillagers) - }).disposed(by: disposeBag) - - input.selectedScopeButton - .compactMap { VillagersViewController.SearchScope.transform($0) } - .compactMap { VillagersViewController.SearchScope(rawValue: $0) } - .subscribe(onNext: { selectedScope in - currentTap.accept(selectedScope) - }).disposed(by: disposeBag) - - input.didSelectedMenuKeyword - .subscribe(onNext: { keywords in - var filteredVillagers = [Villager]() - switch currentTap.value { - case .all: filteredVillagers = allVillagers - case .liked: filteredVillagers = likeVillagers - case .residents: filteredVillagers = houseVillagers - } - var villagers = [Villager]() - keywords.sorted { $0.key.rawValue.count > $1.key.rawValue.count }.forEach { (key, value) in - switch key { - case .personality: - let value = Personality.transform(localizedString: value) ?? "" - let filteredData = filteredVillagers.filter { $0.personality == Personality(rawValue: value) } - villagers.append(contentsOf: filteredData) - case .gender: - let value = Gender.transform(localizedString: value) ?? "" - if villagers.isEmpty { - let filteredData = filteredVillagers.filter { $0.gender == Gender(rawValue: value) } - villagers.append(contentsOf: filteredData) - } else { - let filteredData = villagers.filter { $0.gender == Gender(rawValue: value) } - villagers = filteredData - } - case .type: - if villagers.isEmpty { - let filteredData = filteredVillagers.filter { $0.subtype == Subtype(rawValue: value) } - villagers.append(contentsOf: filteredData) - } else { - let filteredData = villagers.filter { $0.subtype == Subtype(rawValue: value) } - villagers = filteredData - - } - case .species: - let value = Specie.transform(localizedString: value) ?? "" - if villagers.isEmpty { - let filteredData = filteredVillagers.filter { $0.species == Specie(rawValue: value) } - villagers.append(contentsOf: filteredData) - } else { - let filteredData = villagers.filter { $0.species == Specie(rawValue: value) } - villagers = filteredData - } - case .all: villagers = filteredVillagers - } - } - indicationVillagers.accept(villagers) - }).disposed(by: disposeBag) - - input.villagerSelected - .compactMap { indicationVillagers.value[safe: $0.item] } - .subscribe(onNext: { villager in - self.coordinator?.transition(for: .detail(villager: villager)) - }).disposed(by: disposeBag) - - Items.shared.villagerList - .subscribe(onNext: { newVillagers in - let sortedVillagers = newVillagers - .sorted(by: { $0.translations.localizedName() < $1.translations.localizedName() }) - indicationVillagers.accept(sortedVillagers) - allVillagers = sortedVillagers - }).disposed(by: disposeBag) - - Items.shared.villagerLikeList - .subscribe(onNext: { villagers in - let sortedVillagers = villagers - .sorted(by: { $0.translations.localizedName() < $1.translations.localizedName() }) - likeVillagers = sortedVillagers - if currentTap.value == .liked { - indicationVillagers.accept(sortedVillagers) - } - }).disposed(by: disposeBag) - - Items.shared.villagerHouseList - .subscribe(onNext: { villagers in - let sortedVillagers = villagers - .sorted(by: { $0.translations.localizedName() < $1.translations.localizedName() }) - houseVillagers = sortedVillagers - if currentTap.value == .residents { - indicationVillagers.accept(sortedVillagers) - } - }).disposed(by: disposeBag) - - Items.shared.isLoading - .subscribe(onNext: { value in - isLoading.accept(value) - }).disposed(by: disposeBag) - - return Output( - villagers: indicationVillagers.asObservable(), - isLoading: isLoading.asObservable() - ) - } -} diff --git a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Views/VillagersCell.swift b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Views/VillagersCell.swift deleted file mode 100644 index 2a90ec0d..00000000 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/Villagers/Views/VillagersCell.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// VillagersCell.swift -// Animal-Crossing-Wiki -// -// Created by Ari on 2022/06/29. -// - -import UIKit -import RxSwift -import RxCocoa - -class VillagersCell: UICollectionViewCell { - - private var viewModel: VillagersCellViewModel! - private var disposeBag = DisposeBag() - - @IBOutlet weak var iconImage: UIImageView! - @IBOutlet weak var nameLabel: UILabel! - @IBOutlet weak var likeButton: UIButton! - @IBOutlet weak var houseButton: UIButton! - - override func awakeFromNib() { - super.awakeFromNib() - contentView.backgroundColor = .acSecondaryBackground - contentView.layer.cornerRadius = 14 - nameLabel.font = .preferredFont(for: .footnote, weight: .semibold) - } - - override func prepareForReuse() { - super.prepareForReuse() - iconImage.kf.cancelDownloadTask() - likeButton.setImage(nil, for: .normal) - houseButton.setImage(nil, for: .normal) - viewModel = nil - disposeBag = DisposeBag() - } - - func setUp(_ villager: Villager) { - iconImage.setImage(with: villager.iconImage) - nameLabel.text = villager.translations.localizedName() - viewModel = VillagersCellViewModel(villager: villager) - bind() - } - - private func bind() { - let input = VillagersCellViewModel.Input( - didTapHeart: likeButton.rx.tap.asObservable(), - didTapHouse: houseButton.rx.tap.asObservable() - ) - - let output = viewModel.transform(input: input, disposeBag: disposeBag) - - output.isLiked - .observe(on: MainScheduler.instance) - .subscribe(onNext: { isLiked in - if isLiked { - self.likeButton.setImage(UIImage(systemName: "heart.fill"), for: .normal) - } else { - self.likeButton.setImage(UIImage(systemName: "heart"), for: .normal) - } - }).disposed(by: disposeBag) - - output.isResident - .observe(on: MainScheduler.instance) - .subscribe(onNext: { isResident in - if isResident { - self.houseButton.setImage(UIImage(systemName: "house.fill"), for: .normal) - } else { - self.houseButton.setImage(UIImage(systemName: "house"), for: .normal) - } - }).disposed(by: disposeBag) - } - -} 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 61812e1f..1035b5ad 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/en.lproj/Localizable.strings +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/en.lproj/Localizable.strings @@ -30,6 +30,7 @@ "USER" = "USER"; "HEMISPHERE" = "HEMISPHERE"; "FRUIT" = "FRUIT"; +"REPUTATION" = "REPUTATION"; // MARK: - TodaysTasksView "Edit" = "Edit"; @@ -53,9 +54,13 @@ Find the villagers you have visited and tap the home icon on the villager's page "User name" = "User name"; "Hemisphere" = "Hemisphere"; "Starting fruit" = "Starting fruit"; +"Island Reputation" = "Island Reputation"; // MARK: - AppSettingView "System haptic" = "System haptic"; +"Data reset" = "Data reset"; +"Notice" = "Notice"; +"Are you sure you want to reset it?" = "Are you sure you want to reset it"; // MARK: - TaskEditViewController "Today's Tasks" = "Today's Tasks"; @@ -141,10 +146,16 @@ Find the villagers you have visited and tap the home icon on the villager's page "Month" = "Month"; "Name" = "Name"; "Sell" = "Sell"; +"All Select" = "All Select"; "Collected" = "Collected"; "Not collected" = "Not collected"; "descending" = "descending"; "ascending" = "ascending"; +"Item is empty." = "Item is empty."; +"There are no more items to collect." = "There are no more items to collect."; +"There are no results for your search." = "There are no results for your search."; +"Are you sure you want to check them all?" = "Are you sure you want to check them all?"; +"Are you sure you want to uncheck them all?" = "Are you sure you want to uncheck them all?"; // MARK: - CatalogViewController "Catalog" = "Catalog"; @@ -255,6 +266,10 @@ Find the villagers you have visited and tap the home icon on the villager's page "Residents" = "Residents"; "Search a villager" = "Search a villager"; "Villagers" = "Villagers"; +"There are no villagers." = "There are no villagers."; +"Please check the network status." = "Please check the network status."; +"Tap the villager's heart button and it will appear here." = "Tap the villager's heart button and it will appear here."; +"Tap the villager's home button and it will appear here." = "Tap the villager's home button and it will appear here." ; // MARK: - Personality "Big Sister" = "Big Sister"; 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 8892cad1..1d48bb20 100644 --- a/Animal-Crossing-Wiki/Animal-Crossing-Wiki/ko.lproj/Localizable.strings +++ b/Animal-Crossing-Wiki/Animal-Crossing-Wiki/ko.lproj/Localizable.strings @@ -30,6 +30,7 @@ "USER" = "주민 대표"; "HEMISPHERE" = "반구"; "FRUIT" = "과일"; +"REPUTATION" = "섬 평판"; // MARK: - TodaysTasksView "Edit" = "편집"; @@ -55,9 +56,13 @@ "User name" = "주민 대표 이름"; "Hemisphere" = "반구"; "Starting fruit" = "과일"; +"Island Reputation" = "섬 평판"; // MARK: - AppSettingView "System haptic" = "시스템 햅틱"; +"Data reset" = "수집 및 섬 데이터 초기화"; +"Notice" = "알림"; +"Are you sure you want to reset it?" = "정말 초기화하시겠습니까?\n(되돌릴 수 없습니다.)"; // MARK: - TaskEditViewController "Today's Tasks" = "오늘의 할일"; @@ -143,10 +148,16 @@ "Month" = "월별"; "Name" = "이름"; "Sell" = "판매가격"; +"All Select" = "모두 선택"; "Collected" = "획득"; "Not collected" = "미획득"; "descending" = "descending"; "ascending" = "ascending"; +"Item is empty." = "아이템이 비어있습니다."; +"There are no more items to collect." = "더 이상 수집할 아이템이 없습니다."; +"There are no results for your search." = "검색에 대한 결과가 없습니다."; +"Are you sure you want to check them all?" = "정말 모두 체크하시겠습니까?"; +"Are you sure you want to uncheck them all?" = "정말 모두 체크 해제 하시겠습니까?"; // MARK: - CatalogViewController "Catalog" = "카탈로그"; @@ -259,6 +270,10 @@ "Residents" = "내 섬 주민"; "Search a villager" = "주민을 검색해주세요. (초성도 가능)"; "Villagers" = "마을 주민"; +"There are no villagers." = "마을 주민이 없습니다."; +"Please check the network status." = "네트워크 상태를 확인해주세요."; +"Tap the villager's heart button and it will appear here." = "마을 주민의 하트 모양 버튼을 누르면 여기에 표시됩니다."; +"Tap the villager's home button and it will appear here." = "마을 주민의 집 모양 버튼을 누르면 여기에 표시됩니다." ; // MARK: - Personality "Big Sister" = "단순활발";