Skip to content

Commit ff79cc6

Browse files
authored
Merge pull request #11 from CoderJava/refactor/pisahkan-bloc-cron-track-dan-timer-dan-sync-manual
Refactor - Pisahkan business logic antara cron track dan sync manual
2 parents 94161ff + a03f869 commit ff79cc6

21 files changed

Lines changed: 601 additions & 362 deletions
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import 'dart:async';
2+
3+
import 'package:bloc/bloc.dart';
4+
import 'package:bloc_concurrency/bloc_concurrency.dart';
5+
import 'package:dipantau_desktop_client/core/util/helper.dart';
6+
import 'package:dipantau_desktop_client/feature/data/model/create_track/bulk_create_track_data_body.dart';
7+
import 'package:dipantau_desktop_client/feature/data/model/create_track/bulk_create_track_image_body.dart';
8+
import 'package:dipantau_desktop_client/feature/domain/usecase/bulk_create_track_data/bulk_create_track_data.dart';
9+
import 'package:dipantau_desktop_client/feature/domain/usecase/bulk_create_track_image/bulk_create_track_image.dart';
10+
11+
part 'cron_tracking_event.dart';
12+
13+
part 'cron_tracking_state.dart';
14+
15+
class CronTrackingBloc extends Bloc<CronTrackingEvent, CronTrackingState> {
16+
final Helper helper;
17+
final BulkCreateTrackData bulkCreateTrackData;
18+
final BulkCreateTrackImage bulkCreateTrackImage;
19+
20+
CronTrackingBloc({
21+
required this.helper,
22+
required this.bulkCreateTrackData,
23+
required this.bulkCreateTrackImage,
24+
}) : super(InitialCronTrackingState()) {
25+
on<RunCronTrackingEvent>(_onRunCronTrackingEvent, transformer: restartable());
26+
}
27+
28+
FutureOr<void> _onRunCronTrackingEvent(
29+
RunCronTrackingEvent event,
30+
Emitter<CronTrackingState> emit,
31+
) async {
32+
final bodyData = event.bodyData;
33+
final ids = <int>[];
34+
if (bodyData != null) {
35+
final result = await bulkCreateTrackData(
36+
ParamsBulkCreateTrackData(
37+
body: bodyData,
38+
),
39+
);
40+
if (result.response != null) {
41+
ids.addAll(bodyData.data.where((element) => element.id != null).map((e) => e.id!));
42+
}
43+
}
44+
45+
final bodyImage = event.bodyImage;
46+
final files = <String>[];
47+
if (bodyImage != null) {
48+
final result = await bulkCreateTrackImage(
49+
ParamsBulkCreateTrackImage(
50+
body: bodyImage,
51+
),
52+
);
53+
if (result.response != null) {
54+
files.addAll(bodyImage.files);
55+
}
56+
}
57+
emit(
58+
SuccessRunCronTrackingState(
59+
ids: ids,
60+
files: files,
61+
),
62+
);
63+
}
64+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
part of 'cron_tracking_bloc.dart';
2+
3+
abstract class CronTrackingEvent {}
4+
5+
class RunCronTrackingEvent extends CronTrackingEvent {
6+
final BulkCreateTrackDataBody? bodyData;
7+
final BulkCreateTrackImageBody? bodyImage;
8+
9+
RunCronTrackingEvent({
10+
required this.bodyData,
11+
required this.bodyImage,
12+
});
13+
14+
@override
15+
String toString() {
16+
return 'RunCronTrackingEvent{bodyData: $bodyData, bodyImage: $bodyImage}';
17+
}
18+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
part of 'cron_tracking_bloc.dart';
2+
3+
abstract class CronTrackingState {}
4+
5+
class InitialCronTrackingState extends CronTrackingState {}
6+
7+
class LoadingCronTrackingState extends CronTrackingState {}
8+
9+
class FailureCronTrackingState extends CronTrackingState {
10+
final String errorMessage;
11+
12+
FailureCronTrackingState({
13+
required this.errorMessage,
14+
});
15+
16+
@override
17+
String toString() {
18+
return 'FailureCronTrackingState{errorMessage: $errorMessage}';
19+
}
20+
}
21+
22+
class SuccessRunCronTrackingState extends CronTrackingState {
23+
final List<int> ids;
24+
final List<String> files;
25+
26+
SuccessRunCronTrackingState({
27+
required this.ids,
28+
required this.files,
29+
});
30+
31+
@override
32+
String toString() {
33+
return 'SuccessRunCronTrackingState{ids: $ids, files: $files}';
34+
}
35+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import 'dart:async';
2+
3+
import 'package:bloc/bloc.dart';
4+
import 'package:bloc_concurrency/bloc_concurrency.dart';
5+
import 'package:dipantau_desktop_client/core/util/helper.dart';
6+
import 'package:dipantau_desktop_client/feature/data/model/create_track/bulk_create_track_data_body.dart';
7+
import 'package:dipantau_desktop_client/feature/domain/usecase/bulk_create_track_data/bulk_create_track_data.dart';
8+
9+
part 'sync_manual_event.dart';
10+
11+
part 'sync_manual_state.dart';
12+
13+
class SyncManualBloc extends Bloc<SyncManualEvent, SyncManualState> {
14+
final Helper helper;
15+
final BulkCreateTrackData bulkCreateTrackData;
16+
17+
SyncManualBloc({
18+
required this.helper,
19+
required this.bulkCreateTrackData,
20+
}) : super(InitialSyncManualState()) {
21+
on<RunSyncManualEvent>(_onRunSyncManualEvent, transformer: restartable());
22+
}
23+
24+
FutureOr<void> _onRunSyncManualEvent(
25+
RunSyncManualEvent event,
26+
Emitter<SyncManualState> emit,
27+
) async {
28+
emit(LoadingSyncManualState());
29+
await Future.delayed(const Duration(milliseconds: 2500));
30+
final (:response, :failure) = await bulkCreateTrackData(
31+
ParamsBulkCreateTrackData(
32+
body: event.body,
33+
),
34+
);
35+
if (response != null) {
36+
emit(SuccessRunSyncManualState());
37+
return;
38+
}
39+
40+
final errorMessage = helper.getErrorMessageFromFailure(failure);
41+
emit(FailureSyncManualState(errorMessage: errorMessage));
42+
}
43+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
part of 'sync_manual_bloc.dart';
2+
3+
abstract class SyncManualEvent {}
4+
5+
class RunSyncManualEvent extends SyncManualEvent {
6+
final BulkCreateTrackDataBody body;
7+
8+
RunSyncManualEvent({required this.body});
9+
10+
@override
11+
String toString() {
12+
return 'RunSyncManualEvent{body: $body}';
13+
}
14+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
part of 'sync_manual_bloc.dart';
2+
3+
abstract class SyncManualState {}
4+
5+
class InitialSyncManualState extends SyncManualState {}
6+
7+
class LoadingSyncManualState extends SyncManualState {}
8+
9+
class FailureSyncManualState extends SyncManualState {
10+
final String errorMessage;
11+
12+
FailureSyncManualState({required this.errorMessage});
13+
14+
@override
15+
String toString() {
16+
return 'FailureSyncManualState{errorMessage: $errorMessage}';
17+
}
18+
}
19+
20+
class SuccessRunSyncManualState extends SyncManualState {}

lib/feature/presentation/bloc/tracking/tracking_bloc.dart

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@ import 'dart:async';
33
import 'package:bloc/bloc.dart';
44
import 'package:bloc_concurrency/bloc_concurrency.dart';
55
import 'package:dipantau_desktop_client/core/util/helper.dart';
6-
import 'package:dipantau_desktop_client/feature/data/model/create_track/bulk_create_track_data_body.dart';
7-
import 'package:dipantau_desktop_client/feature/data/model/create_track/bulk_create_track_image_body.dart';
86
import 'package:dipantau_desktop_client/feature/data/model/create_track/create_track_body.dart';
9-
import 'package:dipantau_desktop_client/feature/domain/usecase/bulk_create_track_data/bulk_create_track_data.dart';
10-
import 'package:dipantau_desktop_client/feature/domain/usecase/bulk_create_track_image/bulk_create_track_image.dart';
117
import 'package:dipantau_desktop_client/feature/domain/usecase/create_track/create_track.dart';
128

139
part 'tracking_event.dart';
@@ -16,21 +12,13 @@ part 'tracking_state.dart';
1612

1713
class TrackingBloc extends Bloc<TrackingEvent, TrackingState> {
1814
final CreateTrack createTrack;
19-
final BulkCreateTrackData bulkCreateTrackData;
2015
final Helper helper;
21-
final BulkCreateTrackImage bulkCreateTrackImage;
2216

2317
TrackingBloc({
2418
required this.createTrack,
25-
required this.bulkCreateTrackData,
2619
required this.helper,
27-
required this.bulkCreateTrackImage,
2820
}) : super(InitialTrackingState()) {
2921
on<CreateTimeTrackingEvent>(_onCreateTimeTrackingEvent, transformer: sequential());
30-
31-
on<SyncManualTrackingEvent>(_onSyncManualTrackingEvent, transformer: sequential());
32-
33-
on<CronTrackingEvent>(_onCronTrackingEvent, transformer: sequential());
3422
}
3523

3624
FutureOr<void> _onCreateTimeTrackingEvent(
@@ -54,57 +42,4 @@ class TrackingBloc extends Bloc<TrackingEvent, TrackingState> {
5442
final errorMessage = helper.getErrorMessageFromFailure(failure);
5543
emit(FailureTrackingState(errorMessage: errorMessage));
5644
}
57-
58-
FutureOr<void> _onSyncManualTrackingEvent(
59-
SyncManualTrackingEvent event,
60-
Emitter<TrackingState> emit,
61-
) async {
62-
emit(LoadingTrackingState());
63-
await Future.delayed(const Duration(milliseconds: 2500));
64-
final (:response, :failure) = await bulkCreateTrackData(ParamsBulkCreateTrackData(body: event.body));
65-
if (response != null) {
66-
emit(SuccessSyncManualTrackingState());
67-
return;
68-
}
69-
70-
final errorMessage = helper.getErrorMessageFromFailure(failure);
71-
emit(FailureTrackingState(errorMessage: errorMessage));
72-
}
73-
74-
FutureOr<void> _onCronTrackingEvent(
75-
CronTrackingEvent event,
76-
Emitter<TrackingState> emit,
77-
) async {
78-
final bodyData = event.bodyData;
79-
final ids = <int>[];
80-
if (bodyData != null) {
81-
final result = await bulkCreateTrackData(
82-
ParamsBulkCreateTrackData(
83-
body: bodyData,
84-
),
85-
);
86-
if (result.response != null) {
87-
ids.addAll(bodyData.data.where((element) => element.id != null).map((e) => e.id!));
88-
}
89-
}
90-
91-
final bodyImage = event.bodyImage;
92-
final files = <String>[];
93-
if (bodyImage != null) {
94-
final result = await bulkCreateTrackImage(
95-
ParamsBulkCreateTrackImage(
96-
body: bodyImage,
97-
),
98-
);
99-
if (result.response != null) {
100-
files.addAll(bodyImage.files);
101-
}
102-
}
103-
emit(
104-
SuccessCronTrackingState(
105-
ids: ids,
106-
files: files,
107-
),
108-
);
109-
}
11045
}

lib/feature/presentation/bloc/tracking/tracking_event.dart

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,4 @@ class CreateTimeTrackingEvent extends TrackingEvent {
1717
String toString() {
1818
return 'CreateTimeTrackingEvent{body: $body, trackEntityId: $trackEntityId}';
1919
}
20-
}
21-
22-
class SyncManualTrackingEvent extends TrackingEvent {
23-
final BulkCreateTrackDataBody body;
24-
25-
SyncManualTrackingEvent({required this.body});
26-
27-
@override
28-
String toString() {
29-
return 'SyncManualTrackingEvent{body: $body}';
30-
}
31-
}
32-
33-
class CronTrackingEvent extends TrackingEvent {
34-
final BulkCreateTrackDataBody? bodyData;
35-
final BulkCreateTrackImageBody? bodyImage;
36-
37-
CronTrackingEvent({
38-
required this.bodyData,
39-
required this.bodyImage,
40-
});
41-
42-
@override
43-
String toString() {
44-
return 'CronTrackingEvent{bodyData: $bodyData, bodyImage: $bodyImage}';
45-
}
46-
}
20+
}

lib/feature/presentation/bloc/tracking/tracking_state.dart

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,4 @@ class SuccessCreateTimeTrackingState extends TrackingState {
3232
String toString() {
3333
return 'SuccessCreateTimeTrackingState{files: $files, trackEntityId: $trackEntityId}';
3434
}
35-
}
36-
37-
class SuccessSyncManualTrackingState extends TrackingState {}
38-
39-
class SuccessCronTrackingState extends TrackingState {
40-
final List<int> ids;
41-
final List<String> files;
42-
43-
SuccessCronTrackingState({
44-
required this.ids,
45-
required this.files,
46-
});
47-
48-
@override
49-
String toString() {
50-
return 'SuccessCronTrackingState{ids: $ids, files: $files}';
51-
}
52-
}
35+
}

0 commit comments

Comments
 (0)