Skip to content

Commit

Permalink
hive support
Browse files Browse the repository at this point in the history
  • Loading branch information
1grzyb1 committed Mar 17, 2024
1 parent 9cecd4c commit 709be0c
Show file tree
Hide file tree
Showing 7 changed files with 148 additions and 37 deletions.
80 changes: 49 additions & 31 deletions lib/data/db/hive/hive_data_adapter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,56 +10,61 @@ import 'package:odyssey_mobile/data/db/hive/models/info.dart';
import 'package:odyssey_mobile/data/db/hive/models/info_group.dart';
import 'package:odyssey_mobile/data/db/hive/models/performance.dart';
import 'package:odyssey_mobile/data/db/hive/models/performance_group.dart';
import 'package:odyssey_mobile/data/db/hive/models/sponsor.dart';
import 'package:odyssey_mobile/data/db/hive/models/stage.dart';
import 'package:odyssey_mobile/data/other/divisions.dart';

import '../../api/models/sponsor.dart';

// Adapt for multiple cities
abstract class HiveDataAdapter {
static List<CityDataHiveModel> convertCityData({
required List<CityModelApi> cityModels,
required List<InfoModelApi> infoModels,
required List<InfoCategoryModelApi> infoCategories,
required List<PerformanceHiveModel> performanceModels,
required List<StageModelApi> stageModels,
required List<ProblemModelApi> problemModels,
required List<int> previousFavIds,
required Box<PerformanceHiveModel> performanceBox,
required List<List<SponsorModelApi>> sponsors
}) {
static List<CityDataHiveModel> convertCityData(
{required List<CityModelApi> cityModels,
required List<InfoModelApi> infoModels,
required List<InfoCategoryModelApi> infoCategories,
required List<PerformanceHiveModel> performanceModels,
required List<StageModelApi> stageModels,
required List<ProblemModelApi> problemModels,
required List<int> previousFavIds,
required Box<PerformanceHiveModel> performanceBox,
required List<List<SponsorModelApi>> sponsors}) {
final List<CityDataHiveModel> citiesDb = [];
for (final city in cityModels) {
citiesDb.add(CityDataHiveModel(
cityId: city.id,
cityName: city.name,
infoGroups: _convertInfoCategories(infoCategories, infoModels),
performanceGroups: convertPerformanceGroups(
performances: performanceModels,
problems: problemModels,
stages: stageModels,
previousFavIds: previousFavIds,
performanceBox: performanceBox),
stages: convertStages(stageModels),
sponsors: sponsors
));
cityId: city.id,
cityName: city.name,
infoGroups: _convertInfoCategories(infoCategories, infoModels),
performanceGroups: convertPerformanceGroups(
performances: performanceModels,
problems: problemModels,
stages: stageModels,
previousFavIds: previousFavIds,
performanceBox: performanceBox),
stages: convertStages(stageModels),
sponsorModel: convertSponsors(sponsors)));
}
return citiesDb;
}

static List<InfoGroupHiveModel> _convertInfoCategories(
List<InfoCategoryModelApi> infoCategoryModels, List<InfoModelApi> infoModels) {
List<InfoCategoryModelApi> infoCategoryModels,
List<InfoModelApi> infoModels) {
final List<InfoGroupHiveModel> infoGroups = [];
for (final infoCategory in infoCategoryModels) {
infoGroups.add(InfoGroupHiveModel(infoCategory.id, infoCategory.name,
_convertInfo(infoModels.where((e) => e.category == infoCategory.id))));
infoGroups.add(InfoGroupHiveModel(
infoCategory.id,
infoCategory.name,
_convertInfo(
infoModels.where((e) => e.category == infoCategory.id))));
}
return infoGroups;
}

static List<InfoHiveModel> _convertInfo(Iterable<InfoModelApi> apiModels) => apiModels
.map((e) => InfoHiveModel(e.category, e.infoName, e.infoText, e.sortNumber))
.toList();
static List<InfoHiveModel> _convertInfo(Iterable<InfoModelApi> apiModels) =>
apiModels
.map((e) =>
InfoHiveModel(e.category, e.infoName, e.infoText, e.sortNumber))
.toList();

static List<StageHiveModel> convertStages(List<StageModelApi> apiModels) =>
apiModels.map((e) => StageHiveModel(e.name, e.number)).toList();
Expand Down Expand Up @@ -99,8 +104,8 @@ abstract class HiveDataAdapter {
part: part,
league: league,
day: day,
performancesHiveList:
HiveList(performanceBox, objects: filteredPerformances.toList())));
performancesHiveList: HiveList(performanceBox,
objects: filteredPerformances.toList())));
++groupId;
}
}
Expand All @@ -127,4 +132,17 @@ abstract class HiveDataAdapter {
stage: e.stage,
team: e.team,
isFavourite: previousFavIds.contains(e.id)));

static List<SponsorHiveModel> convertSponsors(
List<List<SponsorModelApi>> sponsors) {
List<SponsorHiveModel> sponsorsModelDbList = [];

for (List<SponsorModelApi> sponsorListApi in sponsors) {
for (SponsorModelApi s in sponsorListApi) {
sponsorsModelDbList.add(SponsorHiveModel(s.id, s.row, s.column));
}
}

return sponsorsModelDbList;
}
}
2 changes: 2 additions & 0 deletions lib/data/db/hive/hive_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import 'package:odyssey_mobile/data/db/hive/models/info_group.dart';
import 'package:odyssey_mobile/data/db/hive/models/performance.dart';
import 'package:odyssey_mobile/data/db/hive/models/performance_group.dart';
import 'package:odyssey_mobile/data/db/hive/models/problem.dart';
import 'package:odyssey_mobile/data/db/hive/models/sponsor.dart';
import 'package:odyssey_mobile/data/db/hive/models/stage.dart';
import 'package:odyssey_mobile/domain/entities/performance.dart';
import 'package:odyssey_mobile/domain/entities/schedule_category_entity.dart';
Expand All @@ -37,6 +38,7 @@ class HiveDbService extends DbService {
Hive.registerAdapter(PerformanceHiveModelAdapter());
Hive.registerAdapter(ProblemHiveModelAdapter());
Hive.registerAdapter(StageHiveModelAdapter());
Hive.registerAdapter(SponsorHiveModelAdapter());
await Hive.initFlutter();

_box = await Hive.openBox('finalsBox', compactionStrategy: (entries, deletedEntries) {
Expand Down
29 changes: 27 additions & 2 deletions lib/data/db/hive/models/city_data.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:hive_flutter/hive_flutter.dart';
import 'package:odyssey_mobile/data/db/hive/models/info_group.dart';
import 'package:odyssey_mobile/data/db/hive/models/performance_group.dart';
import 'package:odyssey_mobile/data/db/hive/models/sponsor.dart';
import 'package:odyssey_mobile/data/db/hive/models/stage.dart';

import 'package:odyssey_mobile/domain/entities/city_data.dart';
Expand All @@ -17,7 +18,7 @@ class CityDataHiveModel extends CityData with HiveObjectMixin {
required this.infoGroups,
required this.performanceGroups,
required this.stages,
required this.sponsors,
required this.sponsorModel,
});

@override
Expand All @@ -41,6 +42,30 @@ class CityDataHiveModel extends CityData with HiveObjectMixin {
final List<StageHiveModel> stages;

@HiveField(5)
final List<SponsorHiveModel> sponsorModel;

@override
final List<List<SponsorModelApi>> sponsors;
get sponsors => getSponsors();

List<List<SponsorModelApi>> getSponsors() {
final Map<int, List<SponsorHiveModel>> groupedByRow = {};

for (final sponsorModelDb in sponsorModel.toList()) {
final row = sponsorModelDb.row;
groupedByRow.putIfAbsent(row, () => []).add(sponsorModelDb);
}

return groupedByRow.entries.map((entry) {
final sortedByColumn = entry.value
..sort((a, b) => a.column.compareTo(b.column));
return sortedByColumn
.map((sponsorModelDb) => SponsorModelApi(
id: sponsorModelDb.id,
row: sponsorModelDb.row,
column: sponsorModelDb.column,
))
.toList();
}).toList()
..sort((a, b) => a[0].row.compareTo(b[0].row));
}
}
6 changes: 2 additions & 4 deletions lib/data/db/hive/models/city_data.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions lib/data/db/hive/models/sponsor.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'package:hive_flutter/hive_flutter.dart';

part 'sponsor.g.dart';

@HiveType(typeId: 7)
class SponsorHiveModel {
@HiveField(0)
final int id;
@HiveField(1)
final int row;
@HiveField(2)
final int column;

SponsorHiveModel(this.id, this.row, this.column);
}
47 changes: 47 additions & 0 deletions lib/data/db/hive/models/sponsor.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions lib/domain/entities/sponsor.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
abstract class SponsorEntity {

int get id;
int get row;
int get column;
}

0 comments on commit 709be0c

Please sign in to comment.