Initial commit for first version of project

This commit is contained in:
Dennis Nemec
2026-09-02 20:54:36 +02:00
parent 3d9f1ab6bc
commit 992bb32025
56 changed files with 5139 additions and 31 deletions

View 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()
}
}