diff --git a/lib/database/tables.dart b/lib/database/tables.dart index 2a1d70a..4410576 100644 --- a/lib/database/tables.dart +++ b/lib/database/tables.dart @@ -2,10 +2,7 @@ import 'package:drift/drift.dart'; class Rides extends Table { IntColumn get id => integer().autoIncrement()(); - /// Stable MotorCloud identity. Generated once when a ride is created and - /// preserved across local database IDs, reinstalls/restores, and sync retries. - /// Uniqueness is enforced by the database migration/index rather than the - /// generated Drift declaration so older generated code remains upgrade-safe. + /// Stable MotorCloud identity preserved across local IDs, reinstalls, and sync retries. TextColumn get cloudRideId => text().nullable()(); DateTimeColumn get startTime => dateTime()(); DateTimeColumn get endTime => dateTime().nullable()(); @@ -147,7 +144,66 @@ class FieldTestSummaries extends Table { RealColumn get validPercentage => real().withDefault(const Constant(0.0))(); RealColumn get suspectPercentage => real().withDefault(const Constant(0.0))(); RealColumn get rejectedPercentage => real().withDefault(const Constant(0.0))(); - RealColumn get rideQualityScore => real().withDefault(const Constant(100.0))(); - TextColumn get rideQualityRating => text().withDefault(const Constant('EXCELLENT'))(); - TextColumn get summaryJson => text().nullable()(); + IntColumn get gpsFixCount => integer().withDefault(const Constant(0))(); + IntColumn get gpsStaleEventCount => integer().withDefault(const Constant(0))(); + IntColumn get gpsJumpRejectCount => integer().withDefault(const Constant(0))(); + IntColumn get maxGpsAgeMs => integer().nullable()(); + RealColumn get averageGpsAccuracy => real().nullable()(); + RealColumn get worstGpsAccuracy => real().nullable()(); + IntColumn get telemetryGapCount => integer().withDefault(const Constant(0))(); + IntColumn get maxTelemetryGapMs => integer().nullable()(); + IntColumn get imuSaturationCount => integer().withDefault(const Constant(0))(); + RealColumn get maxSpeedMph => real().nullable()(); + RealColumn get maxLeanAngle => real().nullable()(); + RealColumn get maxLongitudinalG => real().nullable()(); + RealColumn get maxLateralG => real().nullable()(); + IntColumn get accelerationEventCount => integer().withDefault(const Constant(0))(); + IntColumn get brakingEventCount => integer().withDefault(const Constant(0))(); + IntColumn get zeroTo60Count => integer().withDefault(const Constant(0))(); + IntColumn get zeroTo100Count => integer().withDefault(const Constant(0))(); + RealColumn get bestZeroTo60 => real().nullable()(); + RealColumn get bestZeroTo100 => real().nullable()(); + IntColumn get databaseSamplesWritten => integer().withDefault(const Constant(0))(); + IntColumn get databaseSamplesLost => integer().withDefault(const Constant(0))(); + IntColumn get eventCount => integer().withDefault(const Constant(0))(); + RealColumn get overallConfidence => real().nullable()(); + IntColumn get rideQualityScore => integer().withDefault(const Constant(0))(); + TextColumn get rideQualityRating => text().withDefault(const Constant('INVALID'))(); + BoolColumn get wasRecoveredAfterCrash => boolean().withDefault(const Constant(false))(); + BoolColumn get wasInterrupted => boolean().withDefault(const Constant(false))(); + TextColumn get exportIntegrity => text().nullable()(); +} + +class FieldTestGpsRecords extends Table { + IntColumn get id => integer().autoIncrement()(); + IntColumn get sessionId => integer().references(FieldTestSessions, #id)(); + DateTimeColumn get timestamp => dateTime()(); + RealColumn get latitude => real()(); + RealColumn get longitude => real()(); + RealColumn get altitude => real().nullable()(); + RealColumn get rawSpeed => real().nullable()(); + RealColumn get filteredSpeed => real().nullable()(); + RealColumn get heading => real().nullable()(); + RealColumn get accuracy => real().nullable()(); + TextColumn get gpsHealth => text()(); + BoolColumn get accepted => boolean()(); + TextColumn get rejectionReason => text().nullable()(); +} + +class FieldTestImuRecords extends Table { + IntColumn get id => integer().autoIncrement()(); + IntColumn get sessionId => integer().references(FieldTestSessions, #id)(); + DateTimeColumn get timestamp => dateTime()(); + RealColumn get accelerometerX => real().nullable()(); + RealColumn get accelerometerY => real().nullable()(); + RealColumn get accelerometerZ => real().nullable()(); + RealColumn get gyroX => real().nullable()(); + RealColumn get gyroY => real().nullable()(); + RealColumn get gyroZ => real().nullable()(); + RealColumn get roll => real().nullable()(); + RealColumn get pitch => real().nullable()(); + RealColumn get longitudinalG => real().nullable()(); + RealColumn get lateralG => real().nullable()(); + RealColumn get filteredLongitudinalG => real().nullable()(); + RealColumn get filteredLateralG => real().nullable()(); }