Skip to content

Commit

Permalink
Start migrating pacings repository
Browse files Browse the repository at this point in the history
  • Loading branch information
frederikstonge committed Jan 26, 2025
1 parent af70402 commit 29e52ef
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 4 deletions.
1 change: 1 addition & 0 deletions drift_schemas/mon_pacing/drift_schema_v1.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions lib/bootstrapper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ class Bootstrapper extends StatelessWidget {
create: (repositoryContext) => _createOrGetOverride(
() => PacingsRepository(
databaseRepository: repositoryContext.read<LegacyDatabaseRepository>(),
appDatabase: repositoryContext.read<AppDatabase>(),
),
),
),
Expand Down
19 changes: 19 additions & 0 deletions lib/models/improvisation_model.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:dart_mappable/dart_mappable.dart';
import 'package:isar/isar.dart';

import '../repositories/app_database.dart';
import 'improvisation_type.dart';

part 'improvisation_model.mapper.dart';
Expand Down Expand Up @@ -34,4 +35,22 @@ class ImprovisationModel with ImprovisationModelMappable {
this.integrationEntityId,
this.integrationAdditionalData,
});

factory ImprovisationModel.fromEntity(
ImprovisationEntityData improvisation,
) {
return ImprovisationModel(
id: improvisation.id,
type: improvisation.type,
category: improvisation.category,
theme: improvisation.theme,
durationsInSeconds: improvisation.durationsInSeconds,
performers: improvisation.performers,
notes: improvisation.notes,
timeBufferInSeconds: improvisation.timeBufferInSeconds,
huddleTimerInSeconds: improvisation.huddleTimerInSeconds,
integrationEntityId: improvisation.integrationEntityId,
integrationAdditionalData: improvisation.integrationAdditionalData,
);
}
}
20 changes: 20 additions & 0 deletions lib/models/pacing_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import 'package:dart_mappable/dart_mappable.dart';
import 'package:isar/isar.dart';

import '../repositories/app_database.dart';
import 'improvisation_model.dart';
import 'improvisation_type.dart';

Expand Down Expand Up @@ -42,4 +43,23 @@ class PacingModel with PacingModelMappable {
List<String> get categories => improvisations.where((e) => e.category.isNotEmpty).map((e) => e.category).toList();

List<String> get themes => improvisations.where((e) => e.theme.isNotEmpty).map((e) => e.theme).toList();

factory PacingModel.fromEntity(
PacingEntityData pacing,
List<ImprovisationEntityData> improvisations,
List<TagEntityData> tags,
) {
return PacingModel(
id: pacing.id,
name: pacing.name,
createdDate: pacing.createdDate,
modifiedDate: pacing.modifiedDate,
improvisations: improvisations.map((e) => ImprovisationModel.fromEntity(e)).toList(),
defaultNumberOfTeams: pacing.defaultNumberOfTeams,
tags: tags.map((e) => e.name).toList(),
integrationId: pacing.integrationId,
integrationEntityId: pacing.integrationEntityId,
integrationAdditionalData: pacing.integrationAdditionalData,
);
}
}
37 changes: 33 additions & 4 deletions lib/repositories/pacings_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ import 'package:isar/isar.dart';

import '../extensions/iterable_extensions.dart';
import '../models/pacing_model.dart';
import 'app_database.dart';
import 'legacy_database_repository.dart';

class PacingsRepository {
final LegacyDatabaseRepository databaseRepository;
final AppDatabase appDatabase;

const PacingsRepository({
required this.databaseRepository,
required this.appDatabase,
});

Future<PacingModel> add(PacingModel entity) async {
Expand All @@ -32,13 +35,39 @@ class PacingsRepository {
}

Future<PacingModel?> get(int id) async {
final db = await databaseRepository.database;
return await db.pacingModels.getAsync(id);
final response = await appDatabase.managers.pacingEntity
.withReferences((p) => p(improvisationEntityRefs: true))
.filter((p) => p.id.equals(id))
.getSingleOrNull();

final pacing = response?.$1;
final improvisations = response?.$2.improvisationEntityRefs.prefetchedData;

final pacingTags = await response?.$2.pacingTagEntityRefs.withReferences((p) => p(tag: true)).get();
final tags = pacingTags?.map((t) => t.$2.tag.prefetchedData).selectMany<TagEntityData>((t) => t ?? []);

if (pacing == null || improvisations == null || tags == null) return null;
return PacingModel.fromEntity(pacing, improvisations, tags.toList());
}

Future<List<PacingModel>> getList(int skip, int take) async {
final db = await databaseRepository.database;
return await db.pacingModels.where().sortByCreatedDateDesc().findAllAsync(offset: skip, limit: take);
final List<PacingModel> pacings = [];
final response = await appDatabase.managers.pacingEntity
.withReferences((p) => p(improvisationEntityRefs: true))
.orderBy((p) => p.createdDate.desc())
.get(offset: skip, limit: take);

for (final pacingResponse in response) {
final pacing = pacingResponse.$1;
final improvisations = pacingResponse.$2.improvisationEntityRefs.prefetchedData ?? [];

final pacingTags = await pacingResponse.$2.pacingTagEntityRefs.withReferences((p) => p(tag: true)).get();
final tags = pacingTags.map((t) => t.$2.tag.prefetchedData).selectMany<TagEntityData>((t) => t ?? []);

pacings.add(PacingModel.fromEntity(pacing, improvisations, tags.toList()));
}

return pacings;
}

Future<List<PacingModel>> search(String search, List<String> selectedTags) async {
Expand Down

0 comments on commit 29e52ef

Please sign in to comment.