From 3cc2ef2101ad18d23482111f64c659bf06ee22a6 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Sun, 19 Jan 2025 17:26:22 +0300 Subject: [PATCH] Adding stubs for VehicleService --- AutoCat.xcodeproj/project.pbxproj | 16 +++++++++++++ AutoCat/Controllers/MainTabController.swift | 10 ++++---- AutoCat/SceneDelegate.swift | 2 ++ .../HistoryScreen/HistoryCoordinator.swift | 5 ++-- .../HistoryScreen/HistoryViewModel.swift | 9 +++++++ .../VehicleService/VehicleService.swift | 24 +++++++++++++++++++ .../VehicleServiceProtocol.swift | 13 ++++++++++ 7 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 AutoCatCore/Services/VehicleService/VehicleService.swift create mode 100644 AutoCatCore/Services/VehicleService/VehicleServiceProtocol.swift diff --git a/AutoCat.xcodeproj/project.pbxproj b/AutoCat.xcodeproj/project.pbxproj index 9a618da..160fcca 100644 --- a/AutoCat.xcodeproj/project.pbxproj +++ b/AutoCat.xcodeproj/project.pbxproj @@ -148,6 +148,8 @@ 7AB4E42C2D397D8E0006D052 /* VehicleCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB4E42B2D397D8E0006D052 /* VehicleCellView.swift */; }; 7AB4E4332D3C21C00006D052 /* FileManagerExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB4E4322D3C21C00006D052 /* FileManagerExt.swift */; }; 7AB4E4382D3D0C5C0006D052 /* VehiclesArchive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB4E4372D3D0C5C0006D052 /* VehiclesArchive.swift */; }; + 7AB4E43B2D3D3F4F0006D052 /* VehicleServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB4E43A2D3D3F4F0006D052 /* VehicleServiceProtocol.swift */; }; + 7AB4E43D2D3D3F7A0006D052 /* VehicleService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB4E43C2D3D3F7A0006D052 /* VehicleService.swift */; }; 7AB5871D2C42C1CF00FA7B66 /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7AB5871C2C42C1CF00FA7B66 /* RealmSwift */; }; 7AB587322C42D38E00FA7B66 /* StorageServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB587312C42D38E00FA7B66 /* StorageServiceProtocol.swift */; }; 7AB587342C42D3FA00FA7B66 /* StorageService+Notes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB587332C42D3FA00FA7B66 /* StorageService+Notes.swift */; }; @@ -421,6 +423,8 @@ 7AB4E42B2D397D8E0006D052 /* VehicleCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleCellView.swift; sourceTree = ""; }; 7AB4E4322D3C21C00006D052 /* FileManagerExt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManagerExt.swift; sourceTree = ""; }; 7AB4E4372D3D0C5C0006D052 /* VehiclesArchive.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehiclesArchive.swift; sourceTree = ""; }; + 7AB4E43A2D3D3F4F0006D052 /* VehicleServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleServiceProtocol.swift; sourceTree = ""; }; + 7AB4E43C2D3D3F7A0006D052 /* VehicleService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleService.swift; sourceTree = ""; }; 7AB562B9249C9E9B00473D53 /* VehicleRegion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleRegion.swift; sourceTree = ""; }; 7AB587222C42D27F00FA7B66 /* AutoCatTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AutoCatTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 7AB587312C42D38E00FA7B66 /* StorageServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageServiceProtocol.swift; sourceTree = ""; }; @@ -765,6 +769,7 @@ 7A45FB362C2706D000618694 /* Services */ = { isa = PBXGroup; children = ( + 7AB4E4392D3D3F390006D052 /* VehicleService */, 7A06E0B12C707DD7005731AC /* SettingsService */, 7A60D24B2C5A9D2700D13F7B /* LocationService */, 7AB5873D2C42FF4000FA7B66 /* ApiService */, @@ -952,6 +957,15 @@ path = ACImageSlider; sourceTree = ""; }; + 7AB4E4392D3D3F390006D052 /* VehicleService */ = { + isa = PBXGroup; + children = ( + 7AB4E43A2D3D3F4F0006D052 /* VehicleServiceProtocol.swift */, + 7AB4E43C2D3D3F7A0006D052 /* VehicleService.swift */, + ); + path = VehicleService; + sourceTree = ""; + }; 7AB587302C42D35900FA7B66 /* StorageService */ = { isa = PBXGroup; children = ( @@ -1450,6 +1464,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7AB4E43D2D3D3F7A0006D052 /* VehicleService.swift in Sources */, 7A5D84C22C1AE5C900C2209B /* VehicleModel.swift in Sources */, 7A5D84B92C1AD3C200C2209B /* DtoConvertible.swift in Sources */, 7AF6D2182677C1680086EA64 /* VehicleAd.swift in Sources */, @@ -1490,6 +1505,7 @@ 7AB4E4332D3C21C00006D052 /* FileManagerExt.swift in Sources */, 7AB587322C42D38E00FA7B66 /* StorageServiceProtocol.swift in Sources */, 7A3E12D72C7B42B700EE710D /* UserDefaults+Settings.swift in Sources */, + 7AB4E43B2D3D3F4F0006D052 /* VehicleServiceProtocol.swift in Sources */, 7AA514E02D0B75B3001CAC50 /* StorageService+Events.swift in Sources */, 7A64A2222C19E99E00284124 /* DebugInfoDto.swift in Sources */, 7A5D84BC2C1AD81000C2209B /* VehicleOwnershipPeriod.swift in Sources */, diff --git a/AutoCat/Controllers/MainTabController.swift b/AutoCat/Controllers/MainTabController.swift index c3a811b..cad977e 100644 --- a/AutoCat/Controllers/MainTabController.swift +++ b/AutoCat/Controllers/MainTabController.swift @@ -5,6 +5,7 @@ import AutoCatCore class MainTabController: UITabBarController, UITabBarControllerDelegate { var settingsCoordinator: SettingsCoordinator? + var historyViewModel: HistoryViewModel? override func viewDidLoad() { super.viewDidLoad() @@ -30,10 +31,11 @@ class MainTabController: UITabBarController, UITabBarControllerDelegate { func setupHistoryTab() { let coordinator = HistoryCoordinator() - let controller = coordinator.start() + let (controller, viewModel) = coordinator.start() controller.tabBarItem = UITabBarItem(title: NSLocalizedString("History", comment: ""), image: UIImage(systemName: "clock.arrow.circlepath"), tag: 0) viewControllers?[0] = controller + historyViewModel = viewModel } func addSettings() async { @@ -53,9 +55,7 @@ class MainTabController: UITabBarController, UITabBarControllerDelegate { } func showCheckPuller() { - guard let checkNav = viewControllers?.first as? UINavigationController, - let checkController = checkNav.viewControllers.first as? CheckController - else { + guard let historyViewModel else { return } @@ -74,7 +74,7 @@ class MainTabController: UITabBarController, UITabBarControllerDelegate { newNumberController.onCheck = { number in SwiftEntryKit.dismiss { self.selectedIndex = 0 - checkController.checkTapped(number: number) + Task { await historyViewModel.checkNewNumber(number) } } } diff --git a/AutoCat/SceneDelegate.swift b/AutoCat/SceneDelegate.swift index 3d8b0be..39a08ad 100644 --- a/AutoCat/SceneDelegate.swift +++ b/AutoCat/SceneDelegate.swift @@ -55,6 +55,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { container.register(StorageServiceProtocol.self, instance: try await StorageService(settingsService: settingsService)) + + container.register(VehicleServiceProtocol.self, instance: VehicleService()) } func setupRootController(scene: UIScene) { diff --git a/AutoCat/Screens/HistoryScreen/HistoryCoordinator.swift b/AutoCat/Screens/HistoryScreen/HistoryCoordinator.swift index 021410b..6b001e4 100644 --- a/AutoCat/Screens/HistoryScreen/HistoryCoordinator.swift +++ b/AutoCat/Screens/HistoryScreen/HistoryCoordinator.swift @@ -15,12 +15,13 @@ final class HistoryCoordinator { var navController: UINavigationController? - func start() -> UIViewController { + func start() -> (UIViewController, HistoryViewModel) { let resolver = ServiceContainer.shared let viewModel = HistoryViewModel( apiService: resolver.resolve(ApiServiceProtocol.self), storageService: resolver.resolve(StorageServiceProtocol.self), + vehicleService: resolver.resolve(VehicleServiceProtocol.self), coordinator: self ) @@ -30,7 +31,7 @@ final class HistoryCoordinator { let navController = UINavigationController(rootViewController: controller) self.navController = navController - return navController + return (navController, viewModel) } func openReport(vehicle: VehicleDto) async { diff --git a/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift b/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift index 08483f1..ce01ac4 100644 --- a/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift +++ b/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift @@ -15,6 +15,7 @@ final class HistoryViewModel: ACHudContainer { let apiService: ApiServiceProtocol let storageService: StorageServiceProtocol + let vehicleService: VehicleServiceProtocol let coordinator: HistoryCoordinator? var hud: ACHud? @@ -45,10 +46,12 @@ final class HistoryViewModel: ACHudContainer { init(apiService: ApiServiceProtocol, storageService: StorageServiceProtocol, + vehicleService: VehicleServiceProtocol, coordinator: HistoryCoordinator) { self.apiService = apiService self.storageService = storageService + self.vehicleService = vehicleService self.coordinator = coordinator Task { await loadVehicles() } @@ -104,4 +107,10 @@ final class HistoryViewModel: ACHudContainer { } } } + + func checkNewNumber(_ number: String) async { + await wrapWithToast { [weak self] in + try await self?.vehicleService.checkAndStore(number: number) + } + } } diff --git a/AutoCatCore/Services/VehicleService/VehicleService.swift b/AutoCatCore/Services/VehicleService/VehicleService.swift new file mode 100644 index 0000000..1d8db9e --- /dev/null +++ b/AutoCatCore/Services/VehicleService/VehicleService.swift @@ -0,0 +1,24 @@ +// +// VehicleService.swift +// AutoCatCore +// +// Created by Selim Mustafaev on 19.01.2025. +// Copyright © 2025 Selim Mustafaev. All rights reserved. +// + +public final class VehicleService { + + public init() {} +} + +extension VehicleService: VehicleServiceProtocol { + + public func check(number: String) async throws -> VehicleDto { + + VehicleDto() + } + + public func checkAndStore(number: String) async throws { + + } +} diff --git a/AutoCatCore/Services/VehicleService/VehicleServiceProtocol.swift b/AutoCatCore/Services/VehicleService/VehicleServiceProtocol.swift new file mode 100644 index 0000000..c9d2639 --- /dev/null +++ b/AutoCatCore/Services/VehicleService/VehicleServiceProtocol.swift @@ -0,0 +1,13 @@ +// +// VehicleServiceProtocol.swift +// AutoCatCore +// +// Created by Selim Mustafaev on 19.01.2025. +// Copyright © 2025 Selim Mustafaev. All rights reserved. +// + +public protocol VehicleServiceProtocol: Sendable { + + func check(number: String) async throws -> VehicleDto + func checkAndStore(number: String) async throws +}