Skip to content
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

[compass_app] Standardize on Result factories rather than constructors #2538

Merged
merged 1 commit into from
Dec 5, 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
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ class AuthRepositoryDev extends AuthRepository {
required String email,
required String password,
}) async {
return Result.ok(null);
return const Result.ok(null);
}

/// Logout is always successful in dev scenarios
@override
Future<Result<void>> logout() async {
return Result.ok(null);
return const Result.ok(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class BookingRepositoryLocal implements BookingRepository {
// Bookings created come without id, we need to assign one
final bookingWithId = booking.copyWith(id: _sequentialId++);
_bookings.add(bookingWithId);
return Result.ok(null);
return const Result.ok(null);
}

@override
Expand Down Expand Up @@ -92,6 +92,6 @@ class BookingRepositoryLocal implements BookingRepository {
@override
Future<Result<void>> delete(int id) async {
_bookings.removeWhere((booking) => booking.id == id);
return Result.ok(null);
return const Result.ok(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ class ItineraryConfigRepositoryMemory implements ItineraryConfigRepository {
ItineraryConfig itineraryConfig,
) async {
_itineraryConfig = itineraryConfig;
return Result.ok(true);
return const Result.ok(true);
}
}
18 changes: 9 additions & 9 deletions compass_app/app/lib/data/services/api/api_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class ApiClient {
return Result.ok(
json.map((element) => Continent.fromJson(element)).toList());
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -74,7 +74,7 @@ class ApiClient {
return Result.ok(
json.map((element) => Destination.fromJson(element)).toList());
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -97,7 +97,7 @@ class ApiClient {
json.map((element) => Activity.fromJson(element)).toList();
return Result.ok(activities);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -119,7 +119,7 @@ class ApiClient {
json.map((element) => BookingApiModel.fromJson(element)).toList();
return Result.ok(bookings);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -139,7 +139,7 @@ class ApiClient {
final booking = BookingApiModel.fromJson(jsonDecode(stringData));
return Result.ok(booking);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -160,7 +160,7 @@ class ApiClient {
final booking = BookingApiModel.fromJson(jsonDecode(stringData));
return Result.ok(booking);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -180,7 +180,7 @@ class ApiClient {
final user = UserApiModel.fromJson(jsonDecode(stringData));
return Result.ok(user);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -197,9 +197,9 @@ class ApiClient {
final response = await request.close();
// Response 204 "No Content", delete was successful
if (response.statusCode == 204) {
return Result.ok(null);
return const Result.ok(null);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand Down
2 changes: 1 addition & 1 deletion compass_app/app/lib/data/services/api/auth_api_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class AuthApiClient {
final stringData = await response.transform(utf8.decoder).join();
return Result.ok(LoginResponse.fromJson(jsonDecode(stringData)));
} else {
return Result.error(const HttpException("Login error"));
return const Result.error(HttpException("Login error"));
}
} on Exception catch (error) {
return Result.error(error);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class SharedPreferencesService {
_log.finer('Replaced token');
await sharedPreferences.setString(_tokenKey, token);
}
return Result.ok(null);
return const Result.ok(null);
} on Exception catch (e) {
_log.warning('Failed to set token', e);
return Result.error(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ class BookingCreateUseCase {
case Ok<List<Destination>>():
final destination = result.value
.firstWhere((destination) => destination.ref == destinationRef);
return Ok(destination);
return Result.ok(destination);
case Error<List<Destination>>():
return Result.error(result.error);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class BookingShareUseCase {
try {
await _share(text);
_log.fine('Shared booking');
return Result.ok(null);
return const Result.ok(null);
} on Exception catch (error) {
_log.severe('Failed to share booking', error);
return Result.error(error);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class BookingViewModel extends ChangeNotifier {
_log.fine('Created Booking');
_booking = result.value;
notifyListeners();
return Result.ok(null);
return const Result.ok(null);
case Error<Booking>():
_log.warning('Booking error: ${result.error}');
notifyListeners();
Expand Down
12 changes: 6 additions & 6 deletions compass_app/app/lib/utils/result.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
sealed class Result<T> {
const Result();

/// Creates an instance of Result containing a value
factory Result.ok(T value) => Ok(value);
/// Creates a successful [Result], completed with the specified [value].
const factory Result.ok(T value) = Ok._;

/// Create an instance of Result containing an error
factory Result.error(Exception error) => Error(error);
/// Creates an error [Result], completed with the specified [error].
const factory Result.error(Exception error) = Error._;

/// Convenience method to cast to Ok
Ok<T> get asOk => this as Ok<T>;
Expand All @@ -33,7 +33,7 @@ sealed class Result<T> {

/// Subclass of Result for values
final class Ok<T> extends Result<T> {
const Ok(this.value);
const Ok._(this.value);

/// Returned value in result
final T value;
Expand All @@ -44,7 +44,7 @@ final class Ok<T> extends Result<T> {

/// Subclass of Result for errors
final class Error<T> extends Result<T> {
const Error(this.error);
const Error._(this.error);

/// Returned error in result
final Exception error;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class FakeAuthApiClient implements AuthApiClient {
@override
Future<Result<LoginResponse>> login(LoginRequest loginRequest) async {
if (loginRequest.email == 'EMAIL' && loginRequest.password == 'PASSWORD') {
return Result.ok(const LoginResponse(token: 'TOKEN', userId: '123'));
return const Result.ok(LoginResponse(token: 'TOKEN', userId: '123'));
}
return Result.error(Exception('ERROR!'));
}
Expand Down
Loading