MotorSignal-App/lib/database/tables.dart

154 lines
7.1 KiB
Dart

import 'package:drift/drift.dart';
class Rides extends Table {
IntColumn get id => integer().autoIncrement()();
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()();
// Phase 2 additions
RealColumn get distance => real().withDefault(const Constant(0.0))(); // Total distance (e.g., meters)
IntColumn get movingTime => integer().withDefault(const Constant(0))(); // seconds
IntColumn get stoppedTime => integer().withDefault(const Constant(0))(); // seconds
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))();
// Phase 3 additions: Motorcycle association
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()(); // MPH
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()(); // e.g. "Hard Braking", "Extreme Corner"
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()(); // "0-60" or "0-100"
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()();
}
class FieldTestEvents extends Table {
IntColumn get id => integer().autoIncrement()();
IntColumn get sessionId => integer().references(FieldTestSessions, #id)();
DateTimeColumn get timestamp => dateTime()();
TextColumn get eventType => text()();
TextColumn get severity => text()();
TextColumn get message => text()();
TextColumn get dataJson => 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()();
}