Add stable cloud ride identity to local rides
This commit is contained in:
parent
24a7967125
commit
a77f92eed0
|
|
@ -2,6 +2,9 @@ import 'package:drift/drift.dart';
|
||||||
|
|
||||||
class Rides extends Table {
|
class Rides extends Table {
|
||||||
IntColumn get id => integer().autoIncrement()();
|
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.
|
||||||
|
TextColumn get cloudRideId => text().nullable().unique()();
|
||||||
DateTimeColumn get startTime => dateTime()();
|
DateTimeColumn get startTime => dateTime()();
|
||||||
DateTimeColumn get endTime => dateTime().nullable()();
|
DateTimeColumn get endTime => dateTime().nullable()();
|
||||||
RealColumn get distanceMiles => real().withDefault(const Constant(0.0))();
|
RealColumn get distanceMiles => real().withDefault(const Constant(0.0))();
|
||||||
|
|
@ -13,16 +16,14 @@ class Rides extends Table {
|
||||||
RealColumn get best0to60Ms => real().nullable()();
|
RealColumn get best0to60Ms => real().nullable()();
|
||||||
RealColumn get best0to100Ms => real().nullable()();
|
RealColumn get best0to100Ms => real().nullable()();
|
||||||
|
|
||||||
// Phase 2 additions
|
RealColumn get distance => real().withDefault(const Constant(0.0))();
|
||||||
RealColumn get distance => real().withDefault(const Constant(0.0))(); // Total distance (e.g., meters)
|
IntColumn get movingTime => integer().withDefault(const Constant(0))();
|
||||||
IntColumn get movingTime => integer().withDefault(const Constant(0))(); // seconds
|
IntColumn get stoppedTime => integer().withDefault(const Constant(0))();
|
||||||
IntColumn get stoppedTime => integer().withDefault(const Constant(0))(); // seconds
|
|
||||||
RealColumn get averageSpeed => real().withDefault(const Constant(0.0))();
|
RealColumn get averageSpeed => real().withDefault(const Constant(0.0))();
|
||||||
RealColumn get topSpeed => real().withDefault(const Constant(0.0))();
|
RealColumn get topSpeed => real().withDefault(const Constant(0.0))();
|
||||||
RealColumn get elevationGain => real().withDefault(const Constant(0.0))();
|
RealColumn get elevationGain => real().withDefault(const Constant(0.0))();
|
||||||
RealColumn get elevationLoss => real().withDefault(const Constant(0.0))();
|
RealColumn get elevationLoss => real().withDefault(const Constant(0.0))();
|
||||||
|
|
||||||
// Phase 3 additions: Motorcycle association
|
|
||||||
IntColumn get motorcycleId => integer().nullable()();
|
IntColumn get motorcycleId => integer().nullable()();
|
||||||
IntColumn get motorcycleYear => integer().nullable()();
|
IntColumn get motorcycleYear => integer().nullable()();
|
||||||
TextColumn get motorcycleMake => text().nullable()();
|
TextColumn get motorcycleMake => text().nullable()();
|
||||||
|
|
@ -34,14 +35,12 @@ class TelemetrySamples extends Table {
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
IntColumn get rideId => integer().references(Rides, #id)();
|
IntColumn get rideId => integer().references(Rides, #id)();
|
||||||
DateTimeColumn get timestamp => dateTime()();
|
DateTimeColumn get timestamp => dateTime()();
|
||||||
|
|
||||||
RealColumn get latitude => real().nullable()();
|
RealColumn get latitude => real().nullable()();
|
||||||
RealColumn get longitude => real().nullable()();
|
RealColumn get longitude => real().nullable()();
|
||||||
RealColumn get altitude => real().nullable()();
|
RealColumn get altitude => real().nullable()();
|
||||||
RealColumn get speed => real().nullable()(); // MPH
|
RealColumn get speed => real().nullable()();
|
||||||
RealColumn get heading => real().nullable()();
|
RealColumn get heading => real().nullable()();
|
||||||
RealColumn get gpsAccuracy => real().nullable()();
|
RealColumn get gpsAccuracy => real().nullable()();
|
||||||
|
|
||||||
RealColumn get leanAngle => real().nullable()();
|
RealColumn get leanAngle => real().nullable()();
|
||||||
RealColumn get pitchAngle => real().nullable()();
|
RealColumn get pitchAngle => real().nullable()();
|
||||||
RealColumn get accelX => real().nullable()();
|
RealColumn get accelX => real().nullable()();
|
||||||
|
|
@ -55,7 +54,7 @@ class RideEvents extends Table {
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
IntColumn get rideId => integer().references(Rides, #id)();
|
IntColumn get rideId => integer().references(Rides, #id)();
|
||||||
DateTimeColumn get timestamp => dateTime()();
|
DateTimeColumn get timestamp => dateTime()();
|
||||||
TextColumn get eventType => text()(); // e.g. "Hard Braking", "Extreme Corner"
|
TextColumn get eventType => text()();
|
||||||
RealColumn get value => real()();
|
RealColumn get value => real()();
|
||||||
RealColumn get latitude => real().nullable()();
|
RealColumn get latitude => real().nullable()();
|
||||||
RealColumn get longitude => real().nullable()();
|
RealColumn get longitude => real().nullable()();
|
||||||
|
|
@ -64,7 +63,7 @@ class RideEvents extends Table {
|
||||||
class PerformanceRuns extends Table {
|
class PerformanceRuns extends Table {
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
IntColumn get rideId => integer().references(Rides, #id).nullable()();
|
IntColumn get rideId => integer().references(Rides, #id).nullable()();
|
||||||
TextColumn get type => text()(); // "0-60" or "0-100"
|
TextColumn get type => text()();
|
||||||
RealColumn get timeMs => real()();
|
RealColumn get timeMs => real()();
|
||||||
RealColumn get topSpeedReached => real()();
|
RealColumn get topSpeedReached => real()();
|
||||||
DateTimeColumn get timestamp => dateTime()();
|
DateTimeColumn get timestamp => dateTime()();
|
||||||
|
|
@ -148,66 +147,7 @@ class FieldTestSummaries extends Table {
|
||||||
RealColumn get validPercentage => real().withDefault(const Constant(0.0))();
|
RealColumn get validPercentage => real().withDefault(const Constant(0.0))();
|
||||||
RealColumn get suspectPercentage => 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 rejectedPercentage => real().withDefault(const Constant(0.0))();
|
||||||
IntColumn get gpsFixCount => integer().withDefault(const Constant(0))();
|
RealColumn get rideQualityScore => real().withDefault(const Constant(100.0))();
|
||||||
IntColumn get gpsStaleEventCount => integer().withDefault(const Constant(0))();
|
TextColumn get rideQualityRating => text().withDefault(const Constant('EXCELLENT'))();
|
||||||
IntColumn get gpsJumpRejectCount => integer().withDefault(const Constant(0))();
|
TextColumn get summaryJson => text().nullable()();
|
||||||
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()();
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue