SendTrain/lib/database/seed.dart
2024-12-20 21:07:05 -05:00

157 lines
6.0 KiB
Dart

import 'dart:math';
import 'package:drift/drift.dart';
import 'package:sendtrain/database/database.dart';
Future<void> seedDb(AppDatabase database) async {
// 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)];
await database
.into(database.sessions)
.insert(SessionsCompanion.insert(
title: sessionValue[0],
content: sessionValue[1],
status: status,
date: Value(DateTime.now())))
.then((sessionId) async {
// activities things
for (int j = 0; j < random.nextInt(totalActivities); j++) {
await 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) async {
// session activity relationships
await 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++) {
await database
.into(database.actions)
.insert(ActionsCompanion.insert(
title: 'test action $k',
description: 'test action description $k',
set: ''))
.then((actionId) async {
// add activity action association
await 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)];
await database
.into(database.mediaItems)
.insert(MediaItemsCompanion.insert(
title: 'media title $l',
description: 'media description $l',
reference: mediaItem[0],
type: mediaItem[1]))
.then((mediaId) async {
await 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)];
await database
.into(database.mediaItems)
.insert(MediaItemsCompanion.insert(
title: 'media title $l',
description: 'media description $l',
reference: mediaItem[0],
type: mediaItem[1]))
.then((mediaId) async {
await 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)];
await database
.into(database.mediaItems)
.insert(MediaItemsCompanion.insert(
title: 'media title $l',
description: 'media description $l',
reference: mediaItem[0],
type: mediaItem[1]))
.then((mediaId) async {
await database.into(database.objectMediaItems).insert(
ObjectMediaItemsCompanion.insert(
objectId: sessionId,
mediaId: mediaId,
objectType: ObjectType.sessions));
});
}
});
}
}