import 'package:drift/drift.dart'; import 'package:drift_flutter/drift_flutter.dart'; import 'package:sendtrain/database/daos/activities_dao.dart'; import 'package:sendtrain/database/daos/sessions_dao.dart'; part 'database.g.dart'; enum SessionStatus { pending, started, completed, missed } class Sessions extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get title => text().withLength(min: 3, max: 32)(); TextColumn get content => text().named('body')(); TextColumn get status => textEnum()(); DateTimeColumn get date => dateTime().nullable()(); DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))(); } class SessionActivities extends Table { IntColumn get id => integer().autoIncrement()(); IntColumn get sessionId => integer().references(Sessions, #id)(); IntColumn get activityId => integer().references(Activities, #id)(); TextColumn get results => text().nullable()(); TextColumn get achievements => text().nullable()(); DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))(); } enum ActivityCategories { fundamentals, conditioning, advanced, custom, pro } enum ActivityType { strength, power, conditioning, hypertrophy, endurance, stability, mobility, flexibility, rehabilitation, technical } class Activities extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get title => text().withLength(min: 3, max: 32)(); TextColumn get type => textEnum()(); TextColumn get description => text().named('body')(); TextColumn get category => textEnum()(); DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))(); } class ActivityActions extends Table { IntColumn get id => integer().autoIncrement()(); IntColumn get activityId => integer().references(Activities, #id)(); IntColumn get actionId => integer().references(Actions, #id)(); DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))(); } class Actions extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get title => text().withLength(min: 3, max: 32)(); TextColumn get description => text().named('body')(); TextColumn get set => text()(); DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))(); } enum ObjectType { actions, activities, sessions, } class ObjectMediaItems extends Table { IntColumn get id => integer().autoIncrement()(); IntColumn get objectId => integer()(); TextColumn get objectType => textEnum()(); IntColumn get mediaId => integer().references(MediaItems, #id)(); DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))(); } enum MediaType { youtube, image } class MediaItems extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get title => text().withLength(min: 3, max: 32)(); TextColumn get description => text().named('body')(); TextColumn get reference => text().withLength(min: 3, max: 256)(); TextColumn get type => textEnum()(); DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))(); } @DriftDatabase(tables: [ Sessions, SessionActivities, Activities, ActivityActions, Actions, ObjectMediaItems, MediaItems ], daos: [ SessionsDao, ActivitiesDao, MediaItems ]) class AppDatabase extends _$AppDatabase { // After generating code, this class needs to define a `schemaVersion` getter // and a constructor telling drift where the database should be stored. // These are described in the getting started guide: https://drift.simonbinder.eu/setup/ AppDatabase() : super(_openConnection()); @override int get schemaVersion => 1; static QueryExecutor _openConnection() { // `driftDatabase` from `package:drift_flutter` stores the database in // `getApplicationDocumentsDirectory()`. return driftDatabase(name: 'sendtrain'); } }