From df15a154be5a997e9003aa9580c9c4a1c03a5256 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Tue, 10 Jun 2025 21:00:20 +0300 Subject: [PATCH] Implementing DtoConvertible for SwiftData models --- .../Models/SwiftData/SDAudioRecord.swift | 27 +++++++ .../Models/SwiftData/SDDebugInfo.swift | 46 +++++++++++ AutoCatCore/Models/SwiftData/SDOsago.swift | 37 +++++++++ AutoCatCore/Models/SwiftData/SDVehicle.swift | 81 +++++++++++++++++++ .../Models/SwiftData/SDVehicleAd.swift | 33 ++++++++ .../Models/SwiftData/SDVehicleBrand.swift | 16 ++++ .../Models/SwiftData/SDVehicleEngine.swift | 25 ++++++ .../Models/SwiftData/SDVehicleEvent.swift | 29 +++++++ .../Models/SwiftData/SDVehicleModel.swift | 13 +++ .../Models/SwiftData/SDVehicleName.swift | 19 +++++ .../Models/SwiftData/SDVehicleNote.swift | 20 +++++ .../SwiftData/SDVehicleOwnershipPeriod.swift | 37 +++++++++ .../Models/SwiftData/SDVehiclePhoto.swift | 23 ++++++ 13 files changed, 406 insertions(+) diff --git a/AutoCatCore/Models/SwiftData/SDAudioRecord.swift b/AutoCatCore/Models/SwiftData/SDAudioRecord.swift index 967cf14..f8a2651 100644 --- a/AutoCatCore/Models/SwiftData/SDAudioRecord.swift +++ b/AutoCatCore/Models/SwiftData/SDAudioRecord.swift @@ -39,3 +39,30 @@ final class SDAudioRecord { self.event = event } } + +extension SDAudioRecord: DtoConvertible { + + public var dto: AudioRecordDto { + + AudioRecordDto( + path: path, + number: number, + raw: rawText, + addedDate: addedDate, + duration: duration, + event: event?.dto + ) + } + + public convenience init(dto: AudioRecordDto) { + + self.init( + path: dto.path, + number: dto.number, + rawText: dto.rawText, + addedDate: dto.addedDate, + duration: dto.duration, + event: SDVehicleEvent(dto: dto.event) + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDDebugInfo.swift b/AutoCatCore/Models/SwiftData/SDDebugInfo.swift index ffcb6b8..3936f42 100644 --- a/AutoCatCore/Models/SwiftData/SDDebugInfo.swift +++ b/AutoCatCore/Models/SwiftData/SDDebugInfo.swift @@ -45,3 +45,49 @@ final class SDDebugInfoEntry { self.status = status } } + +extension SDDebugInfo: DtoConvertible { + + public var dto: DebugInfoDto { + + DebugInfoDto( + autocod: autocod?.dto, + vin01vin: vin01vin?.dto, + vin01base: vin01base?.dto, + vin01history: vin01history?.dto, + nomerogram: nomerogram?.dto + ) + } + + public convenience init(dto: DebugInfoDto) { + + self.init( + autocod: SDDebugInfoEntry(dto: dto.autocod), + vin01vin: SDDebugInfoEntry(dto: dto.vin01vin), + vin01base: SDDebugInfoEntry(dto: dto.vin01base), + vin01history: SDDebugInfoEntry(dto: dto.vin01history), + nomerogram: SDDebugInfoEntry(dto: dto.nomerogram) + ) + } +} + +extension SDDebugInfoEntry: DtoConvertible { + + public var dto: DebugInfoEntryDto { + + DebugInfoEntryDto( + fields: fields, + error: error, + status: DebugInfoStatus(rawValue: status) ?? .success + ) + } + + public convenience init(dto: DebugInfoEntryDto) { + + self.init( + fields: dto.fields, + error: dto.error, + status: dto.status.rawValue + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDOsago.swift b/AutoCatCore/Models/SwiftData/SDOsago.swift index b67704f..fd29fd0 100644 --- a/AutoCatCore/Models/SwiftData/SDOsago.swift +++ b/AutoCatCore/Models/SwiftData/SDOsago.swift @@ -50,3 +50,40 @@ final class SDOsago { self.birthday = birthday } } + +extension SDOsago: DtoConvertible { + + public var dto: OsagoDto { + + OsagoDto( + date: date, + number: number, + vin: vin, + plateNumber: plateNumber, + name: name, + status: status, + restrictions: restrictions, + insurant: insurant, + owner: owner, + usageRegion: usageRegion, + birthday: birthday + ) + } + + public convenience init(dto: OsagoDto) { + + self.init( + date: dto.date, + number: dto.number, + vin: dto.vin, + plateNumber: dto.plateNumber, + name: dto.name, + status: dto.status, + restrictions: dto.restrictions, + insurant: dto.insurant, + owner: dto.owner, + usageRegion: dto.usageRegion, + birthday: dto.birthday + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehicle.swift b/AutoCatCore/Models/SwiftData/SDVehicle.swift index c138e6f..ad18b62 100644 --- a/AutoCatCore/Models/SwiftData/SDVehicle.swift +++ b/AutoCatCore/Models/SwiftData/SDVehicle.swift @@ -116,3 +116,84 @@ final class SDVehicle { self.synchronized = synchronized } } + +extension SDVehicle: DtoConvertible { + + var shallowDto: VehicleDto { + + var vehicle = VehicleDto() + vehicle.number = self.number + vehicle.currentNumber = self.currentNumber + vehicle.addedDate = self.addedDate + vehicle.updatedDate = self.updatedDate + vehicle.brand = self.brand?.dto + vehicle.synchronized = self.synchronized + + vehicle.notes = notes.map(\.dto) + vehicle.events = events.map(\.dto).sorted { $0.date > $1.date } + + return vehicle + } + + var dto: VehicleDto { + + var vehicle = VehicleDto() + vehicle.brand = brand?.dto + vehicle.model = model?.dto + vehicle.color = color + vehicle.year = year + vehicle.category = category + vehicle.engine = engine?.dto + vehicle.number = number + vehicle.currentNumber = currentNumber + vehicle.vin1 = vin1 + vehicle.vin2 = vin2 + vehicle.sts = sts + vehicle.pts = pts + vehicle.isRightWheel = isRightWheel + vehicle.isJapanese = isJapanese + vehicle.addedDate = addedDate + vehicle.updatedDate = updatedDate + vehicle.addedBy = addedBy + vehicle.photos = photos.map(\.dto) + vehicle.ownershipPeriods = ownershipPeriods.map(\.dto) + vehicle.events = events.map(\.dto) + vehicle.osagoContracts = osagoContracts.map(\.dto) + vehicle.ads = ads.map(\.dto) + vehicle.notes = notes.map(\.dto) + vehicle.debugInfo = debugInfo?.dto + vehicle.synchronized = synchronized + return vehicle + } + + convenience init(dto: VehicleDto) { + + self.init( + brand: SDVehicleBrand(dto: dto.brand), + model: SDVehicleModel(dto: dto.model), + color: dto.color, + year: dto.year, + category: dto.category, + engine: SDVehicleEngine(dto: dto.engine), + number: dto.number, + currentNumber: dto.currentNumber, + vin1: dto.vin1, + vin2: dto.vin2, + sts: dto.sts, + pts: dto.pts, + isRightWheel: dto.isRightWheel, + isJapanese: dto.isJapanese, + addedDate: dto.addedDate, + updatedDate: dto.updatedDate, + addedBy: dto.addedBy, + photos: dto.photos.map(SDVehiclePhoto.init), + ownershipPeriods: dto.ownershipPeriods.map(SDVehicleOwnershipPeriod.init), + events: dto.events.map(SDVehicleEvent.init), + osagoContracts: dto.osagoContracts.map(SDOsago.init), + ads: dto.ads.map(SDVehicleAd.init), + notes: dto.notes.map(SDVehicleNote.init), + debugInfo: SDDebugInfo(dto: dto.debugInfo), + synchronized: dto.synchronized + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehicleAd.swift b/AutoCatCore/Models/SwiftData/SDVehicleAd.swift index 25a4771..20b8039 100644 --- a/AutoCatCore/Models/SwiftData/SDVehicleAd.swift +++ b/AutoCatCore/Models/SwiftData/SDVehicleAd.swift @@ -44,3 +44,36 @@ final class SDVehicleAd { self.photos = photos } } + +extension SDVehicleAd: DtoConvertible { + + public var dto: VehicleAdDto { + + VehicleAdDto( + id: id, + url: url, + price: price, + date: date, + mileage: mileage, + region: region, + city: city, + adDescription: adDescription, + photos: photos + ) + } + + public convenience init(dto: VehicleAdDto) { + + self.init( + id: dto.id, + url: dto.url, + price: dto.price, + date: dto.date, + mileage: dto.mileage, + region: dto.region, + city: dto.city, + adDescription: dto.adDescription, + photos: dto.photos + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehicleBrand.swift b/AutoCatCore/Models/SwiftData/SDVehicleBrand.swift index 018cf03..c9e0ddb 100644 --- a/AutoCatCore/Models/SwiftData/SDVehicleBrand.swift +++ b/AutoCatCore/Models/SwiftData/SDVehicleBrand.swift @@ -20,3 +20,19 @@ final class SDVehicleBrand { self.logo = logo } } + +extension SDVehicleBrand: DtoConvertible { + + var dto: VehicleBrandDto { + + VehicleBrandDto(name: name?.dto, logo: logo) + } + + convenience init(dto: VehicleBrandDto) { + + self.init( + name: SDVehicleName(dto: dto.name), + logo: dto.logo + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehicleEngine.swift b/AutoCatCore/Models/SwiftData/SDVehicleEngine.swift index 879f3cc..f996607 100644 --- a/AutoCatCore/Models/SwiftData/SDVehicleEngine.swift +++ b/AutoCatCore/Models/SwiftData/SDVehicleEngine.swift @@ -31,3 +31,28 @@ final class SDVehicleEngine { self.fuelType = fuelType } } + +extension SDVehicleEngine: DtoConvertible { + + var dto: VehicleEngineDto { + + VehicleEngineDto( + number: number, + volume: volume, + powerHp: powerHp, + powerKw: powerKw, + fuelType: fuelType + ) + } + + convenience init(dto: VehicleEngineDto) { + + self.init( + number: dto.number, + volume: dto.volume, + powerHp: dto.powerHp, + powerKw: dto.powerKw, + fuelType: dto.fuelType + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehicleEvent.swift b/AutoCatCore/Models/SwiftData/SDVehicleEvent.swift index 4b7b364..cd2ead9 100644 --- a/AutoCatCore/Models/SwiftData/SDVehicleEvent.swift +++ b/AutoCatCore/Models/SwiftData/SDVehicleEvent.swift @@ -37,3 +37,32 @@ final class SDVehicleEvent { self.addedBy = addedBy } } + +extension SDVehicleEvent: DtoConvertible { + + public var dto: VehicleEventDto { + + var dto = VehicleEventDto( + lat: latitude, + lon: longitude, + addedBy: addedBy + ) + + dto.id = id + dto.date = date + dto.address = address + return dto + } + + public convenience init(dto: VehicleEventDto) { + + self.init( + id: dto.id, + date: dto.date, + latitude: dto.latitude, + longitude: dto.longitude, + address: dto.address, + addedBy: dto.addedBy + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehicleModel.swift b/AutoCatCore/Models/SwiftData/SDVehicleModel.swift index 8fef1ed..611ca14 100644 --- a/AutoCatCore/Models/SwiftData/SDVehicleModel.swift +++ b/AutoCatCore/Models/SwiftData/SDVehicleModel.swift @@ -18,3 +18,16 @@ final class SDVehicleModel { self.name = name } } + +extension SDVehicleModel: DtoConvertible { + + var dto: VehicleModelDto { + + VehicleModelDto(name: name?.dto) + } + + convenience init(dto: VehicleModelDto) { + + self.init(name: SDVehicleName(dto: dto.name)) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehicleName.swift b/AutoCatCore/Models/SwiftData/SDVehicleName.swift index 0f16a28..55f50ec 100644 --- a/AutoCatCore/Models/SwiftData/SDVehicleName.swift +++ b/AutoCatCore/Models/SwiftData/SDVehicleName.swift @@ -19,3 +19,22 @@ final class SDVehicleName { self.normalized = normalized } } + +extension SDVehicleName: DtoConvertible { + + var dto: VehicleNameDto { + + VehicleNameDto( + original: original, + normalized: normalized + ) + } + + convenience init(dto: VehicleNameDto) { + + self.init( + original: dto.original, + normalized: dto.normalized + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehicleNote.swift b/AutoCatCore/Models/SwiftData/SDVehicleNote.swift index 627fb96..eef3eef 100644 --- a/AutoCatCore/Models/SwiftData/SDVehicleNote.swift +++ b/AutoCatCore/Models/SwiftData/SDVehicleNote.swift @@ -31,3 +31,23 @@ final class SDVehicleNote { self.text = text } } + +extension SDVehicleNote: DtoConvertible { + + public var dto: VehicleNoteDto { + var dto = VehicleNoteDto(text: text, user: user) + dto.id = id + dto.date = date + return dto + } + + public convenience init(dto: VehicleNoteDto) { + + self.init( + id: dto.id, + user: dto.user, + date: dto.date, + text: dto.text + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehicleOwnershipPeriod.swift b/AutoCatCore/Models/SwiftData/SDVehicleOwnershipPeriod.swift index 8546edb..4a4880b 100644 --- a/AutoCatCore/Models/SwiftData/SDVehicleOwnershipPeriod.swift +++ b/AutoCatCore/Models/SwiftData/SDVehicleOwnershipPeriod.swift @@ -49,3 +49,40 @@ final class SDVehicleOwnershipPeriod { self.inn = inn } } + +extension SDVehicleOwnershipPeriod: DtoConvertible { + + public var dto: VehicleOwnershipPeriodDto { + + VehicleOwnershipPeriodDto( + lastOperation: lastOperation, + ownerType: ownerType, + from: from, + to: to, + region: region, + registrationRegion: registrationRegion, + locality: locality, + code: code, + street: street, + building: building, + inn: inn + ) + } + + convenience public init(dto: VehicleOwnershipPeriodDto) { + + self.init( + lastOperation: dto.lastOperation, + ownerType: dto.ownerType, + from: dto.from, + to: dto.to, + region: dto.region, + registrationRegion: dto.registrationRegion, + locality: dto.locality, + code: dto.code, + street: dto.street, + building: dto.building, + inn: dto.inn + ) + } +} diff --git a/AutoCatCore/Models/SwiftData/SDVehiclePhoto.swift b/AutoCatCore/Models/SwiftData/SDVehiclePhoto.swift index cd7c472..b110039 100644 --- a/AutoCatCore/Models/SwiftData/SDVehiclePhoto.swift +++ b/AutoCatCore/Models/SwiftData/SDVehiclePhoto.swift @@ -29,3 +29,26 @@ final class SDVehiclePhoto { self.url = url } } + +extension SDVehiclePhoto: DtoConvertible { + + public var dto: VehiclePhotoDto { + + VehiclePhotoDto( + brand: brand, + model: model, + date: date, + url: url + ) + } + + public convenience init(dto: VehiclePhotoDto) { + + self.init( + brand: dto.brand, + model: dto.model, + date: dto.date, + url: dto.url + ) + } +}