Initial commit for first version of project
This commit is contained in:
67
GasTankAR/Views/TankAR/ARProjectPersisting.swift
Normal file
67
GasTankAR/Views/TankAR/ARProjectPersisting.swift
Normal file
@ -0,0 +1,67 @@
|
||||
//
|
||||
// ARProjectPersisting.swift
|
||||
// GasTankAR
|
||||
//
|
||||
// Created by Dennis Nemec on 26.08.26.
|
||||
//
|
||||
|
||||
import ARKit
|
||||
import CoreLocation
|
||||
import SwiftData
|
||||
|
||||
/// Abstraktion der Projekt-Persistenz für den AR-Modus (Dependency Inversion):
|
||||
/// Der Controller kennt so kein SwiftData und ist unit-testbar.
|
||||
@MainActor
|
||||
protocol ARProjectPersisting: AnyObject {
|
||||
var tank: Tank { get }
|
||||
var worldMap: ARWorldMap? { get }
|
||||
var tankTransform: [Float]? { get }
|
||||
|
||||
func saveWorldMap(_ data: Data)
|
||||
func saveTankTransform(_ transform: [Float])
|
||||
func clearTankTransform()
|
||||
func savePhoto(_ imageData: Data, date: Date, coordinate: CLLocationCoordinate2D?)
|
||||
}
|
||||
|
||||
/// SwiftData-Adapter: verbindet das `Project`-Model mit dem `ARProjectPersisting`-Protokoll.
|
||||
@MainActor
|
||||
final class ProjectPersistenceAdapter: ARProjectPersisting {
|
||||
private let project: Project
|
||||
private let modelContext: ModelContext
|
||||
|
||||
init(project: Project, modelContext: ModelContext) {
|
||||
self.project = project
|
||||
self.modelContext = modelContext
|
||||
}
|
||||
|
||||
var tank: Tank { project.tank }
|
||||
var worldMap: ARWorldMap? { project.worldMap }
|
||||
var tankTransform: [Float]? { project.tankTransform }
|
||||
|
||||
func saveWorldMap(_ data: Data) {
|
||||
project.worldMapData = data
|
||||
try? modelContext.save()
|
||||
}
|
||||
|
||||
func saveTankTransform(_ transform: [Float]) {
|
||||
project.tankTransform = transform
|
||||
try? modelContext.save()
|
||||
}
|
||||
|
||||
func clearTankTransform() {
|
||||
project.tankTransform = nil
|
||||
try? modelContext.save()
|
||||
}
|
||||
|
||||
func savePhoto(_ imageData: Data, date: Date, coordinate: CLLocationCoordinate2D?) {
|
||||
let photo = ProjectPhoto(
|
||||
creationDate: date,
|
||||
imageData: imageData,
|
||||
latitude: coordinate?.latitude,
|
||||
longitude: coordinate?.longitude,
|
||||
project: project
|
||||
)
|
||||
modelContext.insert(photo)
|
||||
try? modelContext.save()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user