// // SDVehicle.swift // AutoCatCore // // Created by Selim Mustafaev on 10.06.2025. // Copyright © 2025 Selim Mustafaev. All rights reserved. // import Foundation import SwiftData @Model final class SDVehicle { @Attribute(.unique) var number: String var brand: VehicleBrandDto? var model: VehicleModelDto? var color: String? var year: Int var category: String? var engine: VehicleEngineDto? var currentNumber: String? var vin1: String? var vin2: String? var sts: String? var pts: String? var isRightWheel: Bool? var isJapanese: Bool? var addedDate: TimeInterval var updatedDate: TimeInterval var addedBy: String var photos: [VehiclePhotoDto] var ownershipPeriods: [VehicleOwnershipPeriodDto] var events: [VehicleEventDto] var osagoContracts: [OsagoDto] var ads: [VehicleAdDto] var notes: [VehicleNoteDto] var debugInfo: DebugInfoDto? var synchronized: Bool init( brand: VehicleBrandDto? = nil, model: VehicleModelDto? = nil, color: String? = nil, year: Int, category: String? = nil, engine: VehicleEngineDto? = nil, number: String, currentNumber: String? = nil, vin1: String? = nil, vin2: String? = nil, sts: String? = nil, pts: String? = nil, isRightWheel: Bool? = nil, isJapanese: Bool? = nil, addedDate: TimeInterval, updatedDate: TimeInterval, addedBy: String, photos: [VehiclePhotoDto], ownershipPeriods: [VehicleOwnershipPeriodDto], events: [VehicleEventDto], osagoContracts: [OsagoDto], ads: [VehicleAdDto], notes: [VehicleNoteDto], debugInfo: DebugInfoDto? = nil, synchronized: Bool ) { self.brand = brand self.model = model self.color = color self.year = year self.category = category self.engine = engine self.number = number self.currentNumber = currentNumber self.vin1 = vin1 self.vin2 = vin2 self.sts = sts self.pts = pts self.isRightWheel = isRightWheel self.isJapanese = isJapanese self.addedDate = addedDate self.updatedDate = updatedDate self.addedBy = addedBy self.photos = photos self.ownershipPeriods = ownershipPeriods self.events = events self.osagoContracts = osagoContracts self.ads = ads self.notes = notes self.debugInfo = debugInfo 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 vehicle.synchronized = self.synchronized vehicle.notes = notes vehicle.events = events.sorted { $0.date > $1.date } return vehicle } var dto: VehicleDto { var vehicle = VehicleDto() vehicle.brand = brand vehicle.model = model vehicle.color = color vehicle.year = year vehicle.category = category vehicle.engine = engine 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 vehicle.ownershipPeriods = ownershipPeriods vehicle.events = events vehicle.osagoContracts = osagoContracts vehicle.ads = ads vehicle.notes = notes vehicle.debugInfo = debugInfo vehicle.synchronized = synchronized return vehicle } convenience init(dto: VehicleDto) { self.init( brand: dto.brand, model: dto.model, color: dto.color, year: dto.year, category: dto.category, engine: 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, ownershipPeriods: dto.ownershipPeriods, events: dto.events, osagoContracts: dto.osagoContracts, ads: dto.ads, notes: dto.notes, debugInfo: dto.debugInfo, synchronized: dto.synchronized ) } }