Implementing DtoConvertible for SwiftData models

This commit is contained in:
Selim Mustafaev 2025-06-10 21:00:20 +03:00
parent 4037dd9617
commit df15a154be
13 changed files with 406 additions and 0 deletions

View File

@ -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)
)
}
}

View File

@ -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
)
}
}

View File

@ -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
)
}
}

View File

@ -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
)
}
}

View File

@ -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
)
}
}

View File

@ -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
)
}
}

View File

@ -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
)
}
}

View File

@ -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
)
}
}

View File

@ -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))
}
}

View File

@ -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
)
}
}

View File

@ -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
)
}
}

View File

@ -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
)
}
}

View File

@ -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
)
}
}