Skip to content

Commit 4222cc2

Browse files
committed
Refactoring SJM part 7 (only test errors have remained, and an error with Individual Default Competittion Score Creator
1 parent 827db28 commit 4222cc2

File tree

40 files changed

+422
-804
lines changed

40 files changed

+422
-804
lines changed

lib/core/career_mode/career_mode_utils/subteam_appointments/overall/overall_appointments_algorithm.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:sj_manager/features/database_editor/domain/entities/jumper/jumper_db_record.dart';
2-
import 'package:sj_manager/core/core_classes/country_team/country_team_db_record.dart';
32
import 'package:sj_manager/features/career_mode/subfeatures/subteams/domain/entities/subteam.dart';
43
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/simulation_team/country_team.dart';
54

lib/core/general_utils/ids_repository.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ class IdsRepository<ID extends Object> {
3535
}
3636

3737
ID id(dynamic item) {
38-
final id = maybeIdOf(item);
38+
final id = maybeId(item);
3939
if (id == null) {
4040
throw StateError('Ids repo does not contain the item ($item)');
4141
}
4242
return id;
4343
}
4444

45-
ID? maybeIdOf(dynamic item) {
45+
ID? maybeId(dynamic item) {
4646
return _items.entries.firstWhereOrNull((entry) => entry.value.item == item)?.key;
4747
}
4848

@@ -74,7 +74,7 @@ class IdsRepository<ID extends Object> {
7474
}
7575

7676
ID removeByItem({required dynamic item}) {
77-
final id = maybeIdOf(item);
77+
final id = maybeId(item);
7878
if (id == null) {
7979
throw StateError(
8080
'Cannot remove an item $item, because it does not even exist in the repo');
@@ -85,7 +85,7 @@ class IdsRepository<ID extends Object> {
8585

8686
void register(dynamic item, {required ID id}) {
8787
if (containsItem(item)) {
88-
final existingId = maybeIdOf(item)!;
88+
final existingId = maybeId(item)!;
8989
_items[existingId]!.count++;
9090
_orderedIds[existingId] = true;
9191
} else {
@@ -122,7 +122,7 @@ class IdsRepository<ID extends Object> {
122122
}
123123

124124
bool containsItem(dynamic item) {
125-
return maybeIdOf(item) != null;
125+
return maybeId(item) != null;
126126
}
127127

128128
List<dynamic> getOrderedItems() {

lib/core/general_utils/json/simulation_db_loading/competition_round_rules_loader.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import 'package:sj_manager/to_embrace/competition/rules/utils/jump_score_creator
1515
import 'package:sj_manager/to_embrace/competition/rules/utils/wind_averager/wind_averager.dart';
1616
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/calendar/standings/score/typedefs.dart';
1717
import 'package:sj_manager/features/database_editor/domain/entities/jumper/jumper_db_record.dart';
18-
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/simulation_team/simulation_team.dart';
1918
import 'package:sj_manager/core/general_utils/ids_repository.dart';
2019

2120
class CompetitionRoundRulesParser
@@ -94,7 +93,7 @@ class CompetitionRoundRulesParser
9493
);
9594
}
9695

97-
FutureOr<DefaultCompetitionRoundRules<SimulationTeam>> _loadTeam(Json json) async {
96+
FutureOr<DefaultCompetitionRoundRules> _loadTeam(Json json) async {
9897
final entitiesLimitJson = json['limit'];
9998
EntitiesLimit? entitiesLimit;
10099
if (entitiesLimitJson != null) {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import 'dart:async';
2+
3+
import 'package:sj_manager/core/core_classes/sex.dart';
4+
import 'package:sj_manager/core/general_utils/json/countries.dart';
5+
import 'package:sj_manager/core/general_utils/json/simulation_db_loading/simulation_db_part_loader.dart';
6+
import 'package:sj_manager/core/general_utils/json/json_types.dart';
7+
import 'package:sj_manager/core/psyche/level_of_consciousness.dart';
8+
import 'package:sj_manager/core/general_utils/ids_repository.dart';
9+
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/jumper/reports/jumper_reports.dart';
10+
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/jumper/simulation_jumper.dart';
11+
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/jumper/stats/jumper_stats.dart';
12+
13+
class SimulationJumperLoader implements SimulationDbPartParser<SimulationJumper> {
14+
const SimulationJumperLoader({
15+
required this.idsRepository,
16+
required this.countryLoader,
17+
});
18+
19+
final IdsRepository idsRepository;
20+
final JsonCountryLoader countryLoader;
21+
22+
@override
23+
Future<SimulationJumper> parse(Json json) async {
24+
return SimulationJumper(
25+
dateOfBirth: DateTime.parse(json['dateOfBirth']),
26+
name: json['name'],
27+
surname: json['surname'],
28+
country: await countryLoader.load(json['countryCode']),
29+
countryTeam: idsRepository.get(json['countryTeamId']),
30+
subteam: idsRepository.get(json['subteamId']),
31+
sex: Sex.values.singleWhere((sex) => sex.name == json['sex']),
32+
takeoffQuality: json['takeoffQuality'],
33+
flightQuality: json['flightQuality'],
34+
landingQuality: json['landingQuality'],
35+
trainingConfig: json['trainingConfig'],
36+
form: json['form'],
37+
jumpsConsistency: json['jumpsConsistency'],
38+
morale: json['morale'],
39+
fatigue: json['fatigue'],
40+
levelOfConsciousness: LevelOfConsciousness.fromJson(json['levelOfConsciousness']),
41+
reports: JumperReports.fromJson(json['reports']),
42+
stats: JumperStats.fromJson(json['stats']),
43+
);
44+
}
45+
}

lib/core/general_utils/json/simulation_db_loading/simulation_team_loader.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import 'package:sj_manager/features/simulations/domain/entities/simulation/datab
88
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/simulation_team/country_team.dart';
99
import 'package:sj_manager/features/career_mode/subfeatures/subteams/domain/entities/subteam_type.dart';
1010
import 'package:sj_manager/features/career_mode/subfeatures/subteams/domain/entities/subteam.dart';
11+
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/simulation_team/personal_coach_team.dart';
1112
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/simulation_team/simulation_team.dart';
1213
import 'package:sj_manager/core/general_utils/ids_repository.dart';
14+
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/simulation_team/team_reports.dart';
1315

1416
class SimulationTeamLoader implements SimulationDbPartParser<SimulationTeam> {
1517
const SimulationTeamLoader({
@@ -26,6 +28,7 @@ class SimulationTeamLoader implements SimulationDbPartParser<SimulationTeam> {
2628
return switch (type) {
2729
'country_team' => await _parseCountryTeam(json),
2830
'subteam' => await _parseSubteam(json),
31+
'personal_coach_team' => await _parsePersonalCoachTeam(json),
2932
_ => throw ArgumentError('(Team parsing): An invalid team\'s type ($type)'),
3033
};
3134
}
@@ -60,4 +63,16 @@ class SimulationTeamLoader implements SimulationDbPartParser<SimulationTeam> {
6063
limit: json['limit'],
6164
);
6265
}
66+
67+
Future<PersonalCoachTeam> _parsePersonalCoachTeam(Json json) async {
68+
final jumperIds = json['jumpers'] as List;
69+
final jumpers = jumperIds.map((id) {
70+
return idsRepository.get(id) as SimulationJumper;
71+
}).toList();
72+
73+
return PersonalCoachTeam(
74+
jumpers: jumpers,
75+
reports: TeamReports.fromJson(json['reports']),
76+
);
77+
}
6378
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:sj_manager/core/general_utils/json/simulation_db_saving/simulation_db_part_serializer.dart';
2+
import 'package:sj_manager/core/general_utils/json/json_types.dart';
3+
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/simulation_team/simulation_team.dart';
4+
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/specific_teams/competition_team.dart';
5+
import 'package:sj_manager/core/general_utils/ids_repository.dart';
6+
7+
class CompetitionTeamSerializer implements SimulationDbPartSerializer<CompetitionTeam> {
8+
const CompetitionTeamSerializer({
9+
required this.idsRepository,
10+
required this.teamSerializer,
11+
});
12+
13+
final IdsRepository idsRepository;
14+
final SimulationDbPartSerializer<SimulationTeam> teamSerializer;
15+
16+
@override
17+
Json serialize(CompetitionTeam team) {
18+
return {
19+
'parentTeam': teamSerializer.serialize(team.parentTeam),
20+
'jumpers': team.jumpers.map(idsRepository.id).toList(),
21+
};
22+
}
23+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import 'dart:async';
2+
3+
import 'package:sj_manager/core/general_utils/json/simulation_db_saving/simulation_db_part_serializer.dart';
4+
import 'package:sj_manager/core/general_utils/json/json_types.dart';
5+
import 'package:sj_manager/features/career_mode/subfeatures/actions/domain/entities/simulation_action.dart';
6+
7+
class SimulationActionSerializer implements SimulationDbPartSerializer<SimulationAction> {
8+
const SimulationActionSerializer();
9+
10+
@override
11+
FutureOr<Json> serialize(SimulationAction action) {
12+
return {
13+
'type': action.type,
14+
'deadline': action.deadline?.toString(),
15+
'isCompleted': action.isCompleted,
16+
};
17+
}
18+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import 'dart:async';
2+
3+
import 'package:sj_manager/core/general_utils/ids_repository.dart';
4+
import 'package:sj_manager/core/general_utils/json/simulation_db_saving/simulation_db_part_serializer.dart';
5+
import 'package:sj_manager/core/general_utils/json/json_types.dart';
6+
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/jumper/simulation_jumper.dart';
7+
8+
class SimulationJumperSerializer implements SimulationDbPartSerializer<SimulationJumper> {
9+
const SimulationJumperSerializer({
10+
required this.idsRepository,
11+
});
12+
13+
final IdsRepository idsRepository;
14+
15+
@override
16+
FutureOr<Json> serialize(SimulationJumper jumper) {
17+
return {
18+
'dateOfBirth': jumper.dateOfBirth,
19+
'name': jumper.name,
20+
'surname': jumper.surname,
21+
'countryCode': jumper.country.code,
22+
'countryTeamId': idsRepository.id(jumper.countryTeam),
23+
'subteamId': idsRepository.maybeId(jumper.subteam),
24+
'sex': jumper.sex.name,
25+
'takeoffQuality': jumper.takeoffQuality,
26+
'flightQuality': jumper.flightQuality,
27+
'landingQuality': jumper.landingQuality,
28+
'trainingConfig': jumper.trainingConfig?.toJson(),
29+
'form': jumper.form,
30+
'jumpsConsistency': jumper.jumpsConsistency,
31+
'morale': jumper.morale,
32+
'fatigue': jumper.fatigue,
33+
'levelOfConsciousness': jumper.levelOfConsciousness.toJson(),
34+
'reports': jumper.reports.toJson(),
35+
'stats': jumper.stats.toJson(),
36+
};
37+
}
38+
}

lib/core/general_utils/json/simulation_db_saving/team_serializer.dart

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import 'package:sj_manager/core/general_utils/json/simulation_db_saving/simulation_db_part_serializer.dart';
22
import 'package:sj_manager/core/general_utils/json/json_types.dart';
33
import 'package:sj_manager/core/general_utils/json/utils/enums.dart';
4-
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/specific_teams/competition_team.dart';
5-
import 'package:sj_manager/core/core_classes/country_team/country_team_db_record.dart';
4+
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/simulation_team/country_team.dart';
65
import 'package:sj_manager/features/career_mode/subfeatures/subteams/domain/entities/subteam.dart';
76
import 'package:sj_manager/features/simulations/domain/entities/simulation/database/team/simulation_team/simulation_team.dart';
87
import 'package:sj_manager/core/general_utils/ids_repository.dart';
@@ -16,49 +15,21 @@ class TeamSerializer implements SimulationDbPartSerializer<SimulationTeam> {
1615

1716
@override
1817
Json serialize(SimulationTeam team) {
19-
if (team is CountryTeamDbRecord) {
18+
if (team is CountryTeam) {
2019
return _serializeCountryTeam(team);
21-
} else if (team is CompetitionTeam) {
22-
return _serializeCompetitionTeam(team);
2320
} else if (team is Subteam) {
2421
return _serializeSubteam(team);
2522
} else {
2623
throw ArgumentError('Cannot serialize a team of type ${team.runtimeType}');
2724
}
2825
}
2926

30-
Json _serializeCountryTeam(CountryTeamDbRecord team) {
31-
final subteamsJson =
32-
team.facts.subteams.map((subteamType) => subteamType.name).toList();
27+
Json _serializeCountryTeam(CountryTeam team) {
3328
return {
3429
'type': 'country_team',
3530
'sex': sexEnumMap[team.sex],
3631
'countryCode': team.country.code,
37-
'facts': {
38-
'subteams': subteamsJson,
39-
'stars': team.facts.stars,
40-
'record': team.facts.record != null
41-
? {
42-
'jumperNameAndSurname': team.facts.record!.jumperNameAndSurname,
43-
'distance': team.facts.record!.distance,
44-
}
45-
: null,
46-
'limitInSubteam': team.facts.limitInSubteam.map(
47-
(subteamType, limit) => MapEntry(
48-
subteamType.name,
49-
limit,
50-
),
51-
),
52-
},
53-
};
54-
}
55-
56-
Json _serializeCompetitionTeam(CompetitionTeam team) {
57-
final jumpersJson = team.jumpers.map((jumper) => idsRepository.id(jumper)).toList();
58-
return {
59-
'type': 'competition_team',
60-
'parentTeam': serialize(team),
61-
'jumpers': jumpersJson,
32+
'subteams': team.subteams.map((subteam) => serialize(team)),
6233
};
6334
}
6435

lib/core/psyche/level_of_consciousness.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:sj_manager/core/general_utils/json/json_types.dart';
2+
13
enum LevelOfConsciousnessLabels {
24
shame, // Wstyd
35
guilt, // Wina
@@ -58,6 +60,16 @@ class LevelOfConsciousness {
5860
bool isEqualTo(LevelOfConsciousness other) =>
5961
logarithmicValue == other.logarithmicValue;
6062

63+
Json toJson() {
64+
return {
65+
'logValue': logarithmicValue,
66+
};
67+
}
68+
69+
static LevelOfConsciousness fromJson(Json json) {
70+
return LevelOfConsciousness(json['logValue']);
71+
}
72+
6173
@override
6274
String toString() {
6375
return 'A level of consciousness with logarithmic value of $logarithmicValue';

lib/features/career_mode/presentation/pages/jumpers_page/__jumpers_page.dart

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,10 @@ class _JumpersListView extends StatelessWidget {
152152

153153
@override
154154
Widget build(BuildContext context) {
155-
final database = context.watch<SimulationDatabase>();
156-
final helper = SimulationDatabaseHelper(database: database);
157-
final jumpers = database.jumpers.where((jumper) => jumper.sex == selectedSex.toSex());
155+
final managerState = context.watch<ManagerCubit>().state as ManagerDefault;
156+
final jumpersState = context.watch<JumpersCubit>().state as JumpersDefault;
157+
final jumpers =
158+
jumpersState.jumpers.where((jumper) => jumper.sex == selectedSex.toSex());
158159
final filter = NameSurnameFilter<SimulationJumper>(text: searchText);
159160
final filteredJumpers = filter(jumpers);
160161

@@ -168,7 +169,11 @@ class _JumpersListView extends StatelessWidget {
168169
itemCount: filteredJumpers.length,
169170
itemBuilder: (context, index) {
170171
final jumper = filteredJumpers.elementAt(index);
171-
final jumperIsTrainee = helper.managerJumpers.contains(jumper);
172+
bool jumperIsTrainee = false;
173+
if (managerState.team != null) {
174+
final myTeamState = context.read<MyTeamCubit>().state as MyTeamDefault;
175+
jumperIsTrainee = myTeamState.trainees.contains(jumper);
176+
}
172177
return JumperSimpleListTile(
173178
jumper: jumper,
174179
subtitle: JumperSimpleListTileSubtitle.levelDescription,

lib/features/career_mode/presentation/pages/main_page/__current_date_card.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class _CurrentDateCard extends StatelessWidget {
55

66
@override
77
Widget build(BuildContext context) {
8-
final database = context.watch<SimulationDatabase>();
8+
final simulationState = context.watch<SimulationCubit>().state as SimulationDefault;
99
final textStyle = Theme.of(context).textTheme.bodyMedium!;
1010

1111
return DecoratedBox(
@@ -21,11 +21,11 @@ class _CurrentDateCard extends StatelessWidget {
2121
children: [
2222
const Spacer(),
2323
Text(
24-
DateFormat('EEE, d MMMM').format(database.currentDate),
24+
DateFormat('EEE, d MMMM').format(simulationState.currentDate),
2525
style: textStyle.copyWith(fontWeight: FontWeight.w500),
2626
),
2727
Text(
28-
DateFormat('yyyy').format(database.currentDate),
28+
DateFormat('yyyy').format(simulationState.currentDate),
2929
style: textStyle,
3030
),
3131
const Spacer(),

lib/features/career_mode/presentation/pages/main_page/__upcoming_simulation_action_card.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ class _UpcomingSimulationActionCard extends StatelessWidget {
1515

1616
@override
1717
Widget build(BuildContext context) {
18-
final database = context.watch<SimulationDatabase>();
18+
final simulationState = context.watch<SimulationCubit>().state as SimulationDefault;
1919
final translator = translate(context);
2020
final actionText = switch (actionType) {
2121
SimulationActionType.settingUpTraining => translator.settingUpTraining,
2222
SimulationActionType.settingUpSubteams => translator.settingUpSubteams,
2323
};
2424
final dateText = sjmDeadlineDateDescription(
2525
context: context,
26-
currentDate: database.currentDate,
26+
currentDate: simulationState.currentDate,
2727
targetDate: deadline,
2828
);
2929
final textColor = important

0 commit comments

Comments
 (0)