down with daos, mild refactoring, moving to pulling from real data
This commit is contained in:
35
lib/database/daos/activities_dao.dart
Normal file
35
lib/database/daos/activities_dao.dart
Normal file
@ -0,0 +1,35 @@
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:sendtrain/database/database.dart';
|
||||
|
||||
part 'activities_dao.g.dart';
|
||||
|
||||
@DriftAccessor(tables: [Activities])
|
||||
class ActivitiesDao extends DatabaseAccessor<AppDatabase> with _$ActivitiesDaoMixin {
|
||||
ActivitiesDao(super.db);
|
||||
|
||||
Future<List<Activity>> all() async {
|
||||
return await select(activities).get();
|
||||
}
|
||||
|
||||
Future<List<Activity>> find(int id) async {
|
||||
return await (select(activities)..where((activity) => activity.id.equals(id) )).get();
|
||||
}
|
||||
|
||||
Future<List<Activity>> sessionActivities(int id) async {
|
||||
final result = select(db.sessionActivities).join(
|
||||
[
|
||||
innerJoin(
|
||||
db.activities,
|
||||
db.activities.id
|
||||
.equalsExp(db.sessionActivities.activityId),
|
||||
),
|
||||
],
|
||||
)..where(db.sessionActivities.sessionId.equals(id));
|
||||
|
||||
final activities = (await result.get())
|
||||
.map((e) => e.readTable(db.activities))
|
||||
.toList();
|
||||
|
||||
return activities;
|
||||
}
|
||||
}
|
8
lib/database/daos/activities_dao.g.dart
Normal file
8
lib/database/daos/activities_dao.g.dart
Normal file
@ -0,0 +1,8 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'activities_dao.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
mixin _$ActivitiesDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||
$ActivitiesTable get activities => attachedDatabase.activities;
|
||||
}
|
37
lib/database/daos/media_items_dao.dart
Normal file
37
lib/database/daos/media_items_dao.dart
Normal file
@ -0,0 +1,37 @@
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:sendtrain/database/database.dart';
|
||||
|
||||
part 'media_items_dao.g.dart';
|
||||
|
||||
@DriftAccessor(tables: [MediaItems])
|
||||
class MediaItemsDao extends DatabaseAccessor<AppDatabase> with _$MediaItemsDaoMixin {
|
||||
MediaItemsDao(super.db);
|
||||
|
||||
Future<List<MediaItem>> all() async {
|
||||
return await select(mediaItems).get();
|
||||
}
|
||||
|
||||
Future<List<MediaItem>> find(int id) async {
|
||||
return await (select(mediaItems)..where((mediaItem) => mediaItem.id.equals(id) )).get();
|
||||
}
|
||||
|
||||
Future<List<MediaItem>> mediaItemsFromSession(Session session) async {
|
||||
final result = select(db.objectMediaItems).join(
|
||||
[
|
||||
innerJoin(
|
||||
db.mediaItems,
|
||||
db.mediaItems.id.equalsExp(db.objectMediaItems.mediaId),
|
||||
),
|
||||
],
|
||||
)
|
||||
..where(
|
||||
db.objectMediaItems.objectType.equals(ObjectType.sessions.name))
|
||||
..where(db.objectMediaItems.objectId.equals(session.id));
|
||||
|
||||
final mediaItems = (await result.get())
|
||||
.map((e) => e.readTable(db.mediaItems))
|
||||
.toList();
|
||||
|
||||
return mediaItems;
|
||||
}
|
||||
}
|
8
lib/database/daos/media_items_dao.g.dart
Normal file
8
lib/database/daos/media_items_dao.g.dart
Normal file
@ -0,0 +1,8 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'media_items_dao.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
mixin _$MediaItemsDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||
$MediaItemsTable get mediaItems => attachedDatabase.mediaItems;
|
||||
}
|
24
lib/database/daos/session_activities_dao.dart
Normal file
24
lib/database/daos/session_activities_dao.dart
Normal file
@ -0,0 +1,24 @@
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:sendtrain/database/database.dart';
|
||||
|
||||
part 'session_activities_dao.g.dart';
|
||||
|
||||
@DriftAccessor(tables: [SessionActivities])
|
||||
class SessionActivitiesDao extends DatabaseAccessor<AppDatabase> with _$SessionActivitiesDaoMixin {
|
||||
SessionActivitiesDao(super.db);
|
||||
|
||||
Future<List<SessionActivity>> all() async {
|
||||
return await select(sessionActivities).get();
|
||||
}
|
||||
|
||||
Future<List<SessionActivity>> find(int id) async {
|
||||
return await (select(sessionActivities)..where((sessionActivity) => sessionActivity.id.equals(id) )).get();
|
||||
}
|
||||
|
||||
Future<List<SessionActivity>> sessionActivitiesBySessionId(int id) async {
|
||||
final result = db.managers.sessionActivities
|
||||
.filter((sessionActivity) => sessionActivity.sessionId.id(id));
|
||||
|
||||
return result.get();
|
||||
}
|
||||
}
|
11
lib/database/daos/session_activities_dao.g.dart
Normal file
11
lib/database/daos/session_activities_dao.g.dart
Normal file
@ -0,0 +1,11 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'session_activities_dao.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
mixin _$SessionActivitiesDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||
$SessionsTable get sessions => attachedDatabase.sessions;
|
||||
$ActivitiesTable get activities => attachedDatabase.activities;
|
||||
$SessionActivitiesTable get sessionActivities =>
|
||||
attachedDatabase.sessionActivities;
|
||||
}
|
17
lib/database/daos/sessions_dao.dart
Normal file
17
lib/database/daos/sessions_dao.dart
Normal file
@ -0,0 +1,17 @@
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:sendtrain/database/database.dart';
|
||||
|
||||
part 'sessions_dao.g.dart';
|
||||
|
||||
@DriftAccessor(tables: [Sessions])
|
||||
class SessionsDao extends DatabaseAccessor<AppDatabase> with _$SessionsDaoMixin {
|
||||
SessionsDao(super.db);
|
||||
|
||||
Future<List<Session>> all() async {
|
||||
return await select(sessions).get();
|
||||
}
|
||||
|
||||
Future<List<Session>> find(int id) async {
|
||||
return await (select(sessions)..where((session) => session.id.equals(id) )).get();
|
||||
}
|
||||
}
|
8
lib/database/daos/sessions_dao.g.dart
Normal file
8
lib/database/daos/sessions_dao.g.dart
Normal file
@ -0,0 +1,8 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'sessions_dao.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
mixin _$SessionsDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||
$SessionsTable get sessions => attachedDatabase.sessions;
|
||||
}
|
133
lib/database/database.dart
Normal file
133
lib/database/database.dart
Normal file
@ -0,0 +1,133 @@
|
||||
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<SessionStatus>()();
|
||||
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<ActivityType>()();
|
||||
TextColumn get description => text().named('body')();
|
||||
TextColumn get category => textEnum<ActivityCategories>()();
|
||||
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<ObjectType>()();
|
||||
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<MediaType>()();
|
||||
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');
|
||||
}
|
||||
}
|
4404
lib/database/database.g.dart
Normal file
4404
lib/database/database.g.dart
Normal file
File diff suppressed because it is too large
Load Diff
160
lib/database/seed.dart
Normal file
160
lib/database/seed.dart
Normal file
@ -0,0 +1,160 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:sendtrain/database/database.dart';
|
||||
|
||||
void seedDb() {
|
||||
final database = AppDatabase();
|
||||
|
||||
// seed data setup
|
||||
final List<List> sessionValues = [
|
||||
[
|
||||
'Projecting @ Climbers Rock',
|
||||
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||
],
|
||||
[
|
||||
'Moonboard @ Boardroom',
|
||||
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||
],
|
||||
[
|
||||
'Off-Wall Training',
|
||||
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||
],
|
||||
[
|
||||
'Climbing Outdoors',
|
||||
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||
],
|
||||
[
|
||||
'Volume Session @ Gravity',
|
||||
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||
],
|
||||
];
|
||||
|
||||
final List<List> mediaItems = [
|
||||
[
|
||||
'https://www.climbing.com/wp-content/uploads/2022/06/campus-board-e1655470701154.jpeg',
|
||||
MediaType.image
|
||||
],
|
||||
['BgheYcxhrsw', MediaType.youtube]
|
||||
];
|
||||
|
||||
final int totalSessions = 15;
|
||||
final int totalActivities = 6;
|
||||
final int totalActions = 5;
|
||||
final int totalMedia = 5;
|
||||
final random = Random();
|
||||
|
||||
// seed loop
|
||||
for (int i = 0; i < totalSessions; i++) {
|
||||
// session things
|
||||
var status = SessionStatus.completed;
|
||||
if (i == 0) status = SessionStatus.started;
|
||||
if (i == 1) status = SessionStatus.pending;
|
||||
|
||||
final sessionValue =
|
||||
sessionValues[random.nextInt(sessionValues.length)];
|
||||
database
|
||||
.into(database.sessions)
|
||||
.insert(SessionsCompanion.insert(
|
||||
title: sessionValue[0],
|
||||
content: sessionValue[1],
|
||||
status: status,
|
||||
date: Value(DateTime.now())))
|
||||
.then((sessionId) {
|
||||
// activities things
|
||||
for (int j = 0; j < random.nextInt(totalActivities); j++) {
|
||||
database
|
||||
.into(database.activities)
|
||||
.insert(ActivitiesCompanion.insert(
|
||||
title: "test activity $j",
|
||||
type: ActivityType
|
||||
.values[random.nextInt(ActivityType.values.length)],
|
||||
description: "test training activity $j",
|
||||
category: ActivityCategories.values[
|
||||
random.nextInt(ActivityCategories.values.length)]))
|
||||
.then((activityId) {
|
||||
// session activity relationships
|
||||
database
|
||||
.into(database.sessionActivities)
|
||||
.insert(SessionActivitiesCompanion.insert(
|
||||
sessionId: sessionId,
|
||||
activityId: activityId,
|
||||
results: Value("results json, will need to test"),
|
||||
achievements: Value("comma, seperated, items"),
|
||||
));
|
||||
|
||||
// actions
|
||||
for (int k = 0; k < random.nextInt(totalActions); k++) {
|
||||
database
|
||||
.into(database.actions)
|
||||
.insert(ActionsCompanion.insert(
|
||||
title: 'test action $k',
|
||||
description: 'test action description $k',
|
||||
set: ''))
|
||||
.then((actionId) {
|
||||
// add activity action association
|
||||
database.into(database.activityActions).insert(
|
||||
ActivityActionsCompanion.insert(
|
||||
activityId: activityId, actionId: actionId));
|
||||
|
||||
for (int l = 0; l < random.nextInt(totalMedia); l++) {
|
||||
final mediaItem =
|
||||
mediaItems[random.nextInt(mediaItems.length)];
|
||||
database
|
||||
.into(database.mediaItems)
|
||||
.insert(MediaItemsCompanion.insert(
|
||||
title: 'media title $l',
|
||||
description: 'media description $l',
|
||||
reference: mediaItem[0],
|
||||
type: mediaItem[1]))
|
||||
.then((mediaId) {
|
||||
database.into(database.objectMediaItems).insert(
|
||||
ObjectMediaItemsCompanion.insert(
|
||||
objectId: actionId,
|
||||
mediaId: mediaId,
|
||||
objectType: ObjectType.actions));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (int l = 0; l < random.nextInt(totalMedia); l++) {
|
||||
final mediaItem = mediaItems[random.nextInt(mediaItems.length)];
|
||||
database
|
||||
.into(database.mediaItems)
|
||||
.insert(MediaItemsCompanion.insert(
|
||||
title: 'media title $l',
|
||||
description: 'media description $l',
|
||||
reference: mediaItem[0],
|
||||
type: mediaItem[1]))
|
||||
.then((mediaId) {
|
||||
database.into(database.objectMediaItems).insert(
|
||||
ObjectMediaItemsCompanion.insert(
|
||||
objectId: activityId,
|
||||
mediaId: mediaId,
|
||||
objectType: ObjectType.activities));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (int l = 0; l < random.nextInt(totalMedia); l++) {
|
||||
final mediaItem = mediaItems[random.nextInt(mediaItems.length)];
|
||||
database
|
||||
.into(database.mediaItems)
|
||||
.insert(MediaItemsCompanion.insert(
|
||||
title: 'media title $l',
|
||||
description: 'media description $l',
|
||||
reference: mediaItem[0],
|
||||
type: mediaItem[1]))
|
||||
.then((mediaId) {
|
||||
database.into(database.objectMediaItems).insert(
|
||||
ObjectMediaItemsCompanion.insert(
|
||||
objectId: sessionId,
|
||||
mediaId: mediaId,
|
||||
objectType: ObjectType.sessions));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user