AutoCat2/AutoCatCore/Models/Vehicle.swift

113 lines
3.6 KiB
Swift

import Foundation
import CoreData
import DifferenceKit
public struct Vehicle: Decodable {
public let number: String
public let currentNumber: String?
public let brand: VBrand?
public let model: VModel?
public let addedDate: TimeInterval
public let updatedDate: TimeInterval
public let color: String?
public let year: Int64?
public let category: String?
public let vin1: String?
public let vin2: String?
public let sts: String?
public let pts: String?
public let isRightWheel: Bool?
public let isJapanese: Bool?
public let addedBy: String?
public let engine: VEngine?
public let photos: [VPhoto]?
public let ownershipPeriods: [VOwnershipPeriod]?
public let events: [VEvent]?
public let osagoContracts: [VOsago]?
public let ads: [VAd]?
public let notes: [VNote]?
public let debugInfo: DebugInfo?
}
extension CDVehicle: Dated {
public var updatedAt: Date {
Date(timeIntervalSince1970: updatedDate)
}
public var addedAt: Date {
Date(timeIntervalSince1970: addedDate)
}
}
extension CDVehicle: Differentiable {
public var differenceIdentifier: String { number! }
public func isContentEqual(to source: CDVehicle) -> Bool {
return number == source.number &&
addedDate == source.addedDate &&
updatedDate == source.updatedDate
}
}
extension CDVehicle {
convenience init(vehicle: Vehicle, context: NSManagedObjectContext) {
self.init(context: context)
self.number = vehicle.number
self.currentNumber = vehicle.currentNumber
self.addedDate = vehicle.addedDate/1000
self.updatedDate = vehicle.updatedDate/1000
self.color = vehicle.color
self.brand = CDVBrand(vbrand: vehicle.brand, context: context)
self.model = CDVModel(model: vehicle.model, context: context)
self.year = vehicle.year ?? 0
self.category = category
self.vin1 = vehicle.vin1
self.vin2 = vehicle.vin2
self.sts = vehicle.sts
self.pts = vehicle.pts
self.isRightWheel = vehicle.isRightWheel ?? false
self.isJapanese = vehicle.isJapanese ?? false
self.addedBy = vehicle.addedBy
self.synchronized = true
self.engine = CDVEngine(model: vehicle.engine, context: context)
let photos = vehicle.photos?.map { CDVPhoto(model: $0, context: context) } ?? []
self.photos = NSSet(array: photos)
let ownershipPeriods = vehicle.ownershipPeriods?.map { CDVOwnershipPeriod(model: $0, context: context) } ?? []
self.ownershipPeriods = NSSet(array: ownershipPeriods)
let events = vehicle.events?.map { CDVEvent(model: $0, context: context) } ?? []
self.events = NSSet(array: events)
let osagoContracts = vehicle.osagoContracts?.map { CDVOsago(model: $0, context: context) } ?? []
self.osagoContracts = NSSet(array: osagoContracts)
let ads = vehicle.ads?.map { CDVAd(model: $0, context: context) } ?? []
self.ads = NSSet(array: ads)
let notes = vehicle.notes?.map { CDVNote(model: $0, context: context) } ?? []
self.notes = NSSet(array: notes)
self.debugInfo = CDDebugInfo(model: vehicle.debugInfo, context: context)
}
public var unrecognized: Bool {
return self.brand == nil
}
public var outdated: Bool {
if let current = self.currentNumber {
return current != self.number
} else {
return false
}
}
}