Skip to content

Rename components to use cases. #2445

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions compass_app/app/lib/config/dependencies.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,22 @@ import '../data/repositories/destination/destination_repository_remote.dart';
import '../data/repositories/itinerary_config/itinerary_config_repository.dart';
import '../data/repositories/itinerary_config/itinerary_config_repository_memory.dart';
import '../data/services/api/api_client.dart';
import '../domain/components/booking/booking_create_component.dart';
import '../domain/components/booking/booking_share_component.dart';
import '../domain/use_cases/booking/booking_create_use_case.dart';
import '../domain/use_cases/booking/booking_share_use_case.dart';

/// Shared providers for all configurations.
List<SingleChildWidget> _sharedProviders = [
Provider(
lazy: true,
create: (context) => BookingCreateComponent(
create: (context) => BookingCreateUseCase(
destinationRepository: context.read(),
activityRepository: context.read(),
bookingRepository: context.read(),
),
),
Provider(
lazy: true,
create: (context) => BookingShareComponent.withSharePlus(),
create: (context) => BookingShareUseCase.withSharePlus(),
),
];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ import '../../models/booking/booking.dart';
import '../../models/destination/destination.dart';
import '../../models/itinerary_config/itinerary_config.dart';

/// Component for creating [Booking] objects from [ItineraryConfig].
/// UseCase for creating [Booking] objects from [ItineraryConfig].
///
/// Fetches [Destination] and [Activity] objects from repositories,
/// checks if dates are set and creates a [Booking] object.
class BookingCreateComponent {
BookingCreateComponent({
class BookingCreateUseCase {
BookingCreateUseCase({
required DestinationRepository destinationRepository,
required ActivityRepository activityRepository,
required BookingRepository bookingRepository,
Expand All @@ -25,7 +25,7 @@ class BookingCreateComponent {
final DestinationRepository _destinationRepository;
final ActivityRepository _activityRepository;
final BookingRepository _bookingRepository;
final _log = Logger('BookingComponent');
final _log = Logger('BookingCreateUseCase');

/// Create [Booking] from a stored [ItineraryConfig]
Future<Result<Booking>> createFrom(ItineraryConfig itineraryConfig) async {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,20 @@ import '../../models/booking/booking.dart';

typedef ShareFunction = Future<void> Function(String text);

/// Component for sharing a booking.
class BookingShareComponent {
BookingShareComponent._(this._share);
/// UseCase for sharing a booking.
class BookingShareUseCase {
BookingShareUseCase._(this._share);

/// Create a [BookingShareComponent] that uses `share_plus` package.
factory BookingShareComponent.withSharePlus() =>
BookingShareComponent._(Share.share);
/// Create a [BookingShareUseCase] that uses `share_plus` package.
factory BookingShareUseCase.withSharePlus() =>
BookingShareUseCase._(Share.share);

/// Create a [BookingShareComponent] with a custom share function.
factory BookingShareComponent.custom(ShareFunction share) =>
BookingShareComponent._(share);
/// Create a [BookingShareUseCase] with a custom share function.
factory BookingShareUseCase.custom(ShareFunction share) =>
BookingShareUseCase._(share);

final ShareFunction _share;
final _log = Logger('BookingShareComponent');
final _log = Logger('BookingShareUseCase');

Future<Result<void>> shareBooking(Booking booking) async {
final text = 'Trip to ${booking.destination.name}\n'
Expand Down
8 changes: 4 additions & 4 deletions compass_app/app/lib/routing/router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ GoRouter router(
builder: (context, state) {
final viewModel = BookingViewModel(
itineraryConfigRepository: context.read(),
bookingComponent: context.read(),
shareComponent: context.read(),
createBookingUseCase: context.read(),
shareBookingUseCase: context.read(),
bookingRepository: context.read(),
);

Expand All @@ -109,8 +109,8 @@ GoRouter router(
final id = int.parse(state.pathParameters['id']!);
final viewModel = BookingViewModel(
itineraryConfigRepository: context.read(),
bookingComponent: context.read(),
shareComponent: context.read(),
createBookingUseCase: context.read(),
shareBookingUseCase: context.read(),
bookingRepository: context.read(),
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@ class LogoutViewModel {
LogoutViewModel({
required AuthRepository authRepository,
required ItineraryConfigRepository itineraryConfigRepository,
}) : _authLogoutComponent = authRepository,
}) : _authLogoutRepository = authRepository,
_itineraryConfigRepository = itineraryConfigRepository {
logout = Command0(_logout);
}
final AuthRepository _authLogoutComponent;
final AuthRepository _authLogoutRepository;
final ItineraryConfigRepository _itineraryConfigRepository;
late Command0 logout;

Future<Result> _logout() async {
var result = await _authLogoutComponent.logout();
var result = await _authLogoutRepository.logout();
switch (result) {
case Ok<void>():
// clear stored itinerary config
Expand Down
20 changes: 10 additions & 10 deletions compass_app/app/lib/ui/booking/view_models/booking_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,26 @@ import '../../../domain/models/booking/booking.dart';
import '../../../domain/models/itinerary_config/itinerary_config.dart';
import '../../../utils/command.dart';
import '../../../utils/result.dart';
import '../../../domain/components/booking/booking_create_component.dart';
import '../../../domain/components/booking/booking_share_component.dart';
import '../../../domain/use_cases/booking/booking_create_use_case.dart';
import '../../../domain/use_cases/booking/booking_share_use_case.dart';

class BookingViewModel extends ChangeNotifier {
BookingViewModel({
required BookingCreateComponent bookingComponent,
required BookingShareComponent shareComponent,
required BookingCreateUseCase createBookingUseCase,
required BookingShareUseCase shareBookingUseCase,
required ItineraryConfigRepository itineraryConfigRepository,
required BookingRepository bookingRepository,
}) : _createComponent = bookingComponent,
_shareComponent = shareComponent,
}) : _createUseCase = createBookingUseCase,
_shareUseCase = shareBookingUseCase,
_itineraryConfigRepository = itineraryConfigRepository,
_bookingRepository = bookingRepository {
createBooking = Command0(_createBooking);
shareBooking = Command0(() => _shareComponent.shareBooking(_booking!));
shareBooking = Command0(() => _shareUseCase.shareBooking(_booking!));
loadBooking = Command1(_load);
}

final BookingCreateComponent _createComponent;
final BookingShareComponent _shareComponent;
final BookingCreateUseCase _createUseCase;
final BookingShareUseCase _shareUseCase;
final ItineraryConfigRepository _itineraryConfigRepository;
final BookingRepository _bookingRepository;
final _log = Logger('BookingViewModel');
Expand All @@ -51,7 +51,7 @@ class BookingViewModel extends ChangeNotifier {
switch (itineraryConfig) {
case Ok<ItineraryConfig>():
_log.fine('Loaded stored ItineraryConfig');
final result = await _createComponent.createFrom(itineraryConfig.value);
final result = await _createUseCase.createFrom(itineraryConfig.value);
switch (result) {
case Ok<Booking>():
_log.fine('Created Booking');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:compass_app/domain/components/booking/booking_create_component.dart';
import 'package:compass_app/domain/use_cases/booking/booking_create_use_case.dart';
import 'package:compass_app/domain/models/itinerary_config/itinerary_config.dart';
import 'package:flutter_test/flutter_test.dart';

Expand All @@ -10,15 +10,15 @@ import '../../../../testing/models/booking.dart';
import '../../../../testing/models/destination.dart';

void main() {
group('BookingCreateComponent tests', () {
group('BookingCreateUseCase tests', () {
test('Create booking', () async {
final component = BookingCreateComponent(
final useCase = BookingCreateUseCase(
activityRepository: FakeActivityRepository(),
destinationRepository: FakeDestinationRepository(),
bookingRepository: FakeBookingRepository(),
);

final booking = await component.createFrom(
final booking = await useCase.createFrom(
ItineraryConfig(
startDate: DateTime(2024, 01, 01),
endDate: DateTime(2024, 02, 12),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import 'package:compass_app/domain/components/booking/booking_share_component.dart';
import 'package:compass_app/domain/use_cases/booking/booking_share_use_case.dart';
import 'package:compass_app/domain/models/booking/booking.dart';
import 'package:flutter_test/flutter_test.dart';

import '../../../../testing/models/activity.dart';
import '../../../../testing/models/destination.dart';

void main() {
group('BookingShareComponent tests', () {
group('BookingShareUseCase tests', () {
test('Share booking', () async {
String? sharedText;
final component = BookingShareComponent.custom((text) async {
final useCase = BookingShareUseCase.custom((text) async {
sharedText = text;
});
final booking = Booking(
Expand All @@ -18,7 +18,7 @@ void main() {
destination: kDestination1,
activity: [kActivity],
);
await component.shareBooking(booking);
await useCase.shareBooking(booking);
expect(
sharedText,
'Trip to name1\n'
Expand Down
8 changes: 4 additions & 4 deletions compass_app/app/test/ui/booking/booking_screen_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:compass_app/domain/components/booking/booking_create_component.dart';
import 'package:compass_app/domain/components/booking/booking_share_component.dart';
import 'package:compass_app/domain/use_cases/booking/booking_create_use_case.dart';
import 'package:compass_app/domain/use_cases/booking/booking_share_use_case.dart';
import 'package:compass_app/domain/models/itinerary_config/itinerary_config.dart';
import 'package:compass_app/ui/booking/view_models/booking_viewmodel.dart';
import 'package:compass_app/ui/booking/widgets/booking_screen.dart';
Expand Down Expand Up @@ -37,12 +37,12 @@ void main() {
activities: [kActivity.ref],
),
),
bookingComponent: BookingCreateComponent(
createBookingUseCase: BookingCreateUseCase(
activityRepository: FakeActivityRepository(),
destinationRepository: FakeDestinationRepository(),
bookingRepository: bookingRepository,
),
shareComponent: BookingShareComponent.custom((text) async {
shareBookingUseCase: BookingShareUseCase.custom((text) async {
shared = true;
}),
bookingRepository: bookingRepository,
Expand Down