210 lines
11 KiB
Dart
210 lines
11 KiB
Dart
import 'package:drift/drift.dart';
|
|
|
|
class Rides extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
/// 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()();
|
|
RealColumn get distanceMiles => real().withDefault(const Constant(0.0))();
|
|
RealColumn get topSpeedMph => real().withDefault(const Constant(0.0))();
|
|
RealColumn get maxLeanLeft => real().withDefault(const Constant(0.0))();
|
|
RealColumn get maxLeanRight => real().withDefault(const Constant(0.0))();
|
|
RealColumn get maxAccelG => real().withDefault(const Constant(0.0))();
|
|
RealColumn get maxBrakingG => real().withDefault(const Constant(0.0))();
|
|
RealColumn get best0to60Ms => real().nullable()();
|
|
RealColumn get best0to100Ms => real().nullable()();
|
|
RealColumn get distance => real().withDefault(const Constant(0.0))();
|
|
IntColumn get movingTime => integer().withDefault(const Constant(0))();
|
|
IntColumn get stoppedTime => integer().withDefault(const Constant(0))();
|
|
RealColumn get averageSpeed => 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 elevationLoss => real().withDefault(const Constant(0.0))();
|
|
IntColumn get motorcycleId => integer().nullable()();
|
|
IntColumn get motorcycleYear => integer().nullable()();
|
|
TextColumn get motorcycleMake => text().nullable()();
|
|
TextColumn get motorcycleModel => text().nullable()();
|
|
TextColumn get motorcycleVariant => text().nullable()();
|
|
}
|
|
|
|
class TelemetrySamples extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
IntColumn get rideId => integer().references(Rides, #id)();
|
|
DateTimeColumn get timestamp => dateTime()();
|
|
RealColumn get latitude => real().nullable()();
|
|
RealColumn get longitude => real().nullable()();
|
|
RealColumn get altitude => real().nullable()();
|
|
RealColumn get speed => real().nullable()();
|
|
RealColumn get heading => real().nullable()();
|
|
RealColumn get gpsAccuracy => real().nullable()();
|
|
RealColumn get leanAngle => real().nullable()();
|
|
RealColumn get pitchAngle => real().nullable()();
|
|
RealColumn get accelX => real().nullable()();
|
|
RealColumn get accelY => real().nullable()();
|
|
RealColumn get accelZ => real().nullable()();
|
|
RealColumn get longitudinalG => real().nullable()();
|
|
RealColumn get lateralG => real().nullable()();
|
|
}
|
|
|
|
class RideEvents extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
IntColumn get rideId => integer().references(Rides, #id)();
|
|
DateTimeColumn get timestamp => dateTime()();
|
|
TextColumn get eventType => text()();
|
|
RealColumn get value => real()();
|
|
RealColumn get latitude => real().nullable()();
|
|
RealColumn get longitude => real().nullable()();
|
|
}
|
|
|
|
class PerformanceRuns extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
IntColumn get rideId => integer().references(Rides, #id).nullable()();
|
|
TextColumn get type => text()();
|
|
RealColumn get timeMs => real()();
|
|
RealColumn get topSpeedReached => real()();
|
|
DateTimeColumn get timestamp => dateTime()();
|
|
}
|
|
|
|
class GarageMotorcycles extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
IntColumn get year => integer()();
|
|
TextColumn get makeId => text()();
|
|
TextColumn get makeName => text()();
|
|
TextColumn get modelId => text()();
|
|
TextColumn get modelName => text()();
|
|
TextColumn get variantId => text().nullable()();
|
|
TextColumn get variantName => text().nullable()();
|
|
TextColumn get nickname => text().nullable()();
|
|
BoolColumn get isDefault => boolean().withDefault(const Constant(false))();
|
|
DateTimeColumn get dateAdded => dateTime()();
|
|
DateTimeColumn get lastUpdated => dateTime()();
|
|
TextColumn get specificationJson => text().nullable()();
|
|
}
|
|
|
|
class FieldTestSessions extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
IntColumn get rideId => integer().nullable().references(Rides, #id)();
|
|
DateTimeColumn get startedAt => dateTime()();
|
|
DateTimeColumn get endedAt => dateTime().nullable()();
|
|
TextColumn get appVersion => text().withDefault(const Constant('1.0.0'))();
|
|
TextColumn get buildNumber => text().withDefault(const Constant('1'))();
|
|
TextColumn get androidVersion => text().withDefault(const Constant('Android'))();
|
|
TextColumn get deviceModel => text().withDefault(const Constant('Generic'))();
|
|
IntColumn get motorcycleId => integer().nullable()();
|
|
IntColumn get motorcycleYear => integer().nullable()();
|
|
TextColumn get motorcycleMake => text().nullable()();
|
|
TextColumn get motorcycleModel => text().nullable()();
|
|
RealColumn get calibrationRollOffset => real().withDefault(const Constant(0.0))();
|
|
RealColumn get calibrationPitchOffset => real().withDefault(const Constant(0.0))();
|
|
IntColumn get totalEvents => integer().withDefault(const Constant(0))();
|
|
IntColumn get anomalyCount => integer().withDefault(const Constant(0))();
|
|
BoolColumn get completed => boolean().withDefault(const Constant(false))();
|
|
TextColumn get healthSummaryJson => text().nullable()();
|
|
DateTimeColumn get createdAt => dateTime()();
|
|
}
|
|
|
|
@TableIndex(name: 'field_test_events_ride_id_idx', columns: {#rideId})
|
|
@TableIndex(name: 'field_test_events_timestamp_idx', columns: {#timestamp})
|
|
@TableIndex(name: 'field_test_events_event_type_idx', columns: {#eventType})
|
|
@TableIndex(name: 'field_test_events_severity_idx', columns: {#severity})
|
|
class FieldTestEvents extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
IntColumn get rideId => integer().nullable().references(Rides, #id)();
|
|
IntColumn get sessionId => integer().nullable().references(FieldTestSessions, #id)();
|
|
DateTimeColumn get timestamp => dateTime()();
|
|
TextColumn get eventType => text()();
|
|
TextColumn get severity => text()();
|
|
TextColumn get message => text()();
|
|
DateTimeColumn get telemetryTimestamp => dateTime().nullable()();
|
|
IntColumn get gpsAgeMs => integer().nullable()();
|
|
RealColumn get speed => real().nullable()();
|
|
RealColumn get latitude => real().nullable()();
|
|
RealColumn get longitude => real().nullable()();
|
|
RealColumn get gpsAccuracy => real().nullable()();
|
|
RealColumn get leanAngle => real().nullable()();
|
|
RealColumn get longitudinalG => real().nullable()();
|
|
RealColumn get lateralG => real().nullable()();
|
|
RealColumn get overallConfidence => real().nullable()();
|
|
TextColumn get metadata => text().nullable()();
|
|
TextColumn get dataJson => text().nullable()();
|
|
}
|
|
|
|
@TableIndex(name: 'field_test_summaries_ride_id_idx', columns: {#rideId})
|
|
class FieldTestSummaries extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
IntColumn get rideId => integer().references(Rides, #id)();
|
|
DateTimeColumn get startTime => dateTime()();
|
|
DateTimeColumn get endTime => dateTime().nullable()();
|
|
IntColumn get durationSeconds => integer().withDefault(const Constant(0))();
|
|
IntColumn get totalSamples => integer().withDefault(const Constant(0))();
|
|
IntColumn get validSamples => integer().withDefault(const Constant(0))();
|
|
IntColumn get suspectSamples => integer().withDefault(const Constant(0))();
|
|
IntColumn get rejectedSamples => integer().withDefault(const Constant(0))();
|
|
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))();
|
|
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()();
|
|
}
|