From c0473054cdc308bc69085ddb7317870e6e96c137 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Fri, 15 Nov 2024 14:50:14 +0300 Subject: [PATCH] Adding backend selection in settings --- AutoCat.xcodeproj/project.pbxproj | 4 +-- .../SettingsScreen/SettingsScreen.swift | 11 +++++-- AutoCat/ru.lproj/Localizable.strings | 1 + .../Services/ApiService/ApiService.swift | 2 +- .../SettingsService/SettingsService.swift | 13 +++++--- .../SettingsServiceProtocol.swift | 2 +- .../UserDefaults+Settings.swift | 8 ++--- AutoCatCore/Utils/Constants.swift | 33 +++++++++++++------ AutoCatCoreTests/SettingsServiceTests.swift | 10 ++++-- 9 files changed, 57 insertions(+), 27 deletions(-) diff --git a/AutoCat.xcodeproj/project.pbxproj b/AutoCat.xcodeproj/project.pbxproj index 3f8d31b..cdf5fee 100644 --- a/AutoCat.xcodeproj/project.pbxproj +++ b/AutoCat.xcodeproj/project.pbxproj @@ -1665,7 +1665,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 138; + CURRENT_PROJECT_VERSION = 139; DEVELOPMENT_TEAM = 46DTTB8X4S; INFOPLIST_FILE = AutoCat/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = AutoCat; @@ -1692,7 +1692,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 138; + CURRENT_PROJECT_VERSION = 139; DEVELOPMENT_TEAM = 46DTTB8X4S; INFOPLIST_FILE = AutoCat/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = AutoCat; diff --git a/AutoCat/Screens/SettingsScreen/SettingsScreen.swift b/AutoCat/Screens/SettingsScreen/SettingsScreen.swift index 9ba7354..6ed0b97 100644 --- a/AutoCat/Screens/SettingsScreen/SettingsScreen.swift +++ b/AutoCat/Screens/SettingsScreen/SettingsScreen.swift @@ -38,6 +38,14 @@ struct SettingsScreen: View { } } + Section { + Picker("Server", selection: $viewModel.settingService.backend) { + ForEach(Constants.Backend.allCases, id: \.self) { backend in + Text(backend.name) + } + } + } + Section("Plate number recognition") { ToggleRowView(title: "Alternative order", description: "Recognize plate numbers in alternative form. For example 'ЕВА 123 777' instead of 'Е123ВА 777'", @@ -61,9 +69,6 @@ struct SettingsScreen: View { ToggleRowView(title: "Show debug info", description: nil, toggle: $viewModel.settingService.showDebugInfo) - ToggleRowView(title: "Use test backend", - description: nil, - toggle: $viewModel.settingService.useTestBackend) } } .navigationTitle("Settings") diff --git a/AutoCat/ru.lproj/Localizable.strings b/AutoCat/ru.lproj/Localizable.strings index 6f4a02c..e45d450 100644 --- a/AutoCat/ru.lproj/Localizable.strings +++ b/AutoCat/ru.lproj/Localizable.strings @@ -412,3 +412,4 @@ /* No comment provided by engineer. */ "ZIP (or OKTMO) code" = "Индекс (или ОКТМО)"; +"Server" = "Сервер"; diff --git a/AutoCatCore/Services/ApiService/ApiService.swift b/AutoCatCore/Services/ApiService/ApiService.swift index 6a1f2c7..75de870 100644 --- a/AutoCatCore/Services/ApiService/ApiService.swift +++ b/AutoCatCore/Services/ApiService/ApiService.swift @@ -20,7 +20,7 @@ public actor ApiService: ApiServiceProtocol { private func createRequest(api: String, method: String, body: B? = nil, params: [String:P]? = nil) async -> URLRequest? where B: Encodable, P: LosslessStringConvertible { - let baseUrl = await settingsService.useTestBackend ? Constants.baseUrlDebug : Constants.baseUrl + let baseUrl = await settingsService.backend.baseUrl guard var urlComponents = URLComponents(string: baseUrl + api) else { return nil } diff --git a/AutoCatCore/Services/SettingsService/SettingsService.swift b/AutoCatCore/Services/SettingsService/SettingsService.swift index 840dd8c..e392685 100644 --- a/AutoCatCore/Services/SettingsService/SettingsService.swift +++ b/AutoCatCore/Services/SettingsService/SettingsService.swift @@ -70,9 +70,14 @@ public final class SettingsService: SettingsServiceProtocol { } } - public var useTestBackend: Bool = false { + public var backend: Constants.Backend { + get { Constants.Backend(rawValue: backendString) ?? .de } + set { backendString = newValue.rawValue } + } + + public var backendString: String = Constants.Backend.de.rawValue { didSet { - defaults.useTestBackend = useTestBackend + defaults.backendString = backendString } } @@ -84,7 +89,7 @@ public final class SettingsService: SettingsServiceProtocol { observe(key: \.defaultRegion, for: \.defaultRegion) observe(key: \.recordBeep, for: \.recordBeep) observe(key: \.showDebugInfo, for: \.showDebugInfo) - observe(key: \.useTestBackend, for: \.useTestBackend) + observe(key: \.backendString, for: \.backendString) observe(key: \.user, for: \.userData) register(defaultValues: [ @@ -93,7 +98,7 @@ public final class SettingsService: SettingsServiceProtocol { .defaultRegion: "761", .recordBeep: false, .showDebugInfo: false, - .useTestBackend: false + .backendString: Constants.Backend.de.rawValue ]) } diff --git a/AutoCatCore/Services/SettingsService/SettingsServiceProtocol.swift b/AutoCatCore/Services/SettingsService/SettingsServiceProtocol.swift index c4b4ec1..84933cc 100644 --- a/AutoCatCore/Services/SettingsService/SettingsServiceProtocol.swift +++ b/AutoCatCore/Services/SettingsService/SettingsServiceProtocol.swift @@ -18,5 +18,5 @@ public protocol SettingsServiceProtocol { var defaultRegion: String { get set } var recordBeep: Bool { get set } var showDebugInfo: Bool { get set } - var useTestBackend: Bool { get set } + var backend: Constants.Backend { get set } } diff --git a/AutoCatCore/Services/SettingsService/UserDefaults+Settings.swift b/AutoCatCore/Services/SettingsService/UserDefaults+Settings.swift index 4e40757..751834d 100644 --- a/AutoCatCore/Services/SettingsService/UserDefaults+Settings.swift +++ b/AutoCatCore/Services/SettingsService/UserDefaults+Settings.swift @@ -16,7 +16,7 @@ enum SettingsKey: String { case defaultRegion case recordBeep case showDebugInfo - case useTestBackend + case backendString } extension UserDefaults { @@ -62,9 +62,9 @@ extension UserDefaults { set { set(value: newValue, for: .showDebugInfo) } } - @objc dynamic var useTestBackend: Bool { - get { bool(for: .useTestBackend) } - set { set(value: newValue, for: .useTestBackend) } + @objc dynamic var backendString: String { + get { string(for: .backendString, defaultValue: Constants.Backend.de.rawValue) } + set { set(value: newValue, for: .backendString) } } @objc dynamic var user: Data? { diff --git a/AutoCatCore/Utils/Constants.swift b/AutoCatCore/Utils/Constants.swift index 056869d..9012911 100644 --- a/AutoCatCore/Utils/Constants.swift +++ b/AutoCatCore/Utils/Constants.swift @@ -1,17 +1,30 @@ import Foundation public enum Constants { - public static var baseUrl: String { - #if DEBUG - return "http://127.0.0.1:3000/" - //return "http://192.168.1.67:3000/" - //return "https://vps.aliencat.pro:8443/" - #else - return "https://vps.aliencat.pro:8443/" - #endif - } - public static var baseUrlDebug = "http://192.168.1.2:3000/" + public enum Backend: String, CaseIterable { + + case de = "https://vps.aliencat.pro/" + case ru = "https://vps2.aliencat.pro/" + case debug = "http://192.168.1.2:3000/" + + public var name: String { + switch self { + case .de: "DE" + case .ru: "RU" + case .debug: "Debug" + } + } + + public var baseUrl: String { + + #if DEBUG + "http://127.0.0.1:3000/" + #else + rawValue + #endif + } + } public static let pnLettersMap: [Character: Character] = [ "А": "A", "В": "B", "Е": "E", "К": "K", "М": "M", "Н": "H", "О": "O", "Р": "P", "С": "C", "Т": "T", "У": "Y", "Х": "X" diff --git a/AutoCatCoreTests/SettingsServiceTests.swift b/AutoCatCoreTests/SettingsServiceTests.swift index ee51f37..64b8d28 100644 --- a/AutoCatCoreTests/SettingsServiceTests.swift +++ b/AutoCatCoreTests/SettingsServiceTests.swift @@ -68,6 +68,14 @@ struct SettingsServiceTests { #expect(user.token == testUser.token) } + @Test("Save base url", .serialized, arguments: Constants.Backend.allCases) + func saveBaseUrl(value: Constants.Backend) { + + settingsService.backend = value + + #expect(defaults.string(forKey: SettingsKey.backendString.rawValue) == value.rawValue) + } + @Test("Save settings", .serialized, arguments: [true, false]) func saveSettings(value: Bool) { @@ -76,13 +84,11 @@ struct SettingsServiceTests { settingsService.defaultRegion = testRegion settingsService.recordBeep = value settingsService.showDebugInfo = value - settingsService.useTestBackend = value #expect(defaults.bool(forKey: SettingsKey.recognizeAlternativeOrder.rawValue) == value) #expect(defaults.bool(forKey: SettingsKey.recognizeShortenedNumbers.rawValue) == value) #expect(defaults.string(forKey: SettingsKey.defaultRegion.rawValue) == testRegion) #expect(defaults.bool(forKey: SettingsKey.recordBeep.rawValue) == value) #expect(defaults.bool(forKey: SettingsKey.showDebugInfo.rawValue) == value) - #expect(defaults.bool(forKey: SettingsKey.useTestBackend.rawValue) == value) } }