AutoCat/AutoCatCore/Models/SwiftData/SDVehicle.swift

178 lines
5.0 KiB
Swift

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