6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 151081d0

AuthorEdmir Suljic<esu@dwarf.dk>
Date2025-05-22 13:50:11 +0200
Refactored booking details for fetching different endpoint on booking details page

Changed files

.../lib/booking_details/bloc/booking_details_bloc.dart         |  9 +++++++++
 .../lib/booking_details/booking_details_repository.dart        |  1 +
 comwell_key_app/lib/my_booking/my_booking_page.dart            |  2 ++
 .../lib/pregistration/bloc/preregistration_cubit.dart          | 10 +++++++---
 .../lib/pregistration/pages/prereg_address_page.dart           |  6 +++---
 comwell_key_app/lib/pregistration/preregistration_flow.dart    |  2 +-
 comwell_key_app/lib/profile/profile_repository.dart            |  5 ++---
 comwell_key_app/lib/routing/app_router.dart                    |  1 +
 comwell_key_app/lib/services/api.dart                          |  5 +++--
 comwell_key_app/lib/services/utils/api_endpoints.dart          |  2 +-
 .../test/booking_details_test/booking_details_bloc_test.dart   |  7 ++++++-
 11 files changed, 36 insertions(+), 14 deletions(-)

Diff

diff --git a/comwell_key_app/lib/booking_details/bloc/booking_details_bloc.dart b/comwell_key_app/lib/booking_details/bloc/booking_details_bloc.dart
index 99341957..5e3a29e8 100644
--- a/comwell_key_app/lib/booking_details/bloc/booking_details_bloc.dart
+++ b/comwell_key_app/lib/booking_details/bloc/booking_details_bloc.dart
@@ -1,5 +1,6 @@
import 'package:bloc/bloc.dart';
import 'package:comwell_key_app/overview/models/guest.dart';
+import 'package:comwell_key_app/profile/profile_repository.dart';
import 'package:comwell_key_app/utils/seos_repository.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart';
@@ -18,11 +19,13 @@ class BookingDetailsBloc
final Booking booking;
final BookingDetailsRepository bookingDetailsRepository;
+ final ProfileRepository profileRepository;
final SeosRepository seosRepository = locator<SeosRepository>();
BookingDetailsBloc(
this.booking, {
required this.bookingDetailsRepository,
+ required this.profileRepository,
}) : super(BookingDetailsState.initial(booking)) {
on<InitialEvent>((event, emit) async {
try {
@@ -43,6 +46,12 @@ class BookingDetailsBloc
});
}
+ Future<Booking> getBookingDetails() async {
+
+ final bookingDetails = await profileRepository.getBookingDetails(booking.confirmationId);
+ return bookingDetails;
+ }
+
Future<void> checkMobileKeys(Emitter<BookingDetailsState> emit) async {
try {
final isEndPointSetup = await seosRepository.isEndpointSetup();
diff --git a/comwell_key_app/lib/booking_details/booking_details_repository.dart b/comwell_key_app/lib/booking_details/booking_details_repository.dart
index 9e4d148c..3b6b0a85 100644
--- a/comwell_key_app/lib/booking_details/booking_details_repository.dart
+++ b/comwell_key_app/lib/booking_details/booking_details_repository.dart
@@ -3,6 +3,7 @@ import 'package:comwell_key_app/housekeeping/housekeeping_repository.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/services/mappers/booking_mapper.dart';
+import 'package:comwell_key_app/services/models/booking_dto.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:comwell_key_app/utils/secure_storage.dart';
diff --git a/comwell_key_app/lib/my_booking/my_booking_page.dart b/comwell_key_app/lib/my_booking/my_booking_page.dart
index f31bd3a7..9b07733c 100644
--- a/comwell_key_app/lib/my_booking/my_booking_page.dart
+++ b/comwell_key_app/lib/my_booking/my_booking_page.dart
@@ -4,6 +4,7 @@ import 'package:comwell_key_app/booking_details/components/share_button.dart';
import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
import 'package:comwell_key_app/my_booking/components/balance_bottom_sheet.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
+import 'package:comwell_key_app/profile/profile_repository.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:easy_localization/easy_localization.dart';
@@ -202,6 +203,7 @@ class MyBookingPage extends StatelessWidget {
create: (context) => BookingDetailsBloc(
booking,
bookingDetailsRepository: locator<BookingDetailsRepository>(),
+ profileRepository: locator<ProfileRepository>(),
),
child: ShareButton(
guests: booking.guests,
diff --git a/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart b/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart
index f9dbc680..ab463007 100644
--- a/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart
+++ b/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart
@@ -7,6 +7,7 @@ import 'package:comwell_key_app/pregistration/preregistration_flow.dart';
import 'package:comwell_key_app/profile/profile_repository.dart';
import 'package:comwell_key_app/profile_settings/model/address.dart';
import 'package:comwell_key_app/profile_settings/repostiory/profile_settings_repository.dart';
+import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:comwell_key_app/tracking/comwell_tracking.dart';
import 'package:comwell_key_app/tracking/models/analytics_event_item.dart';
import 'package:comwell_key_app/utils/locator.dart';
@@ -14,6 +15,7 @@ import 'package:comwell_key_app/utils/phone_utils.dart';
import 'package:country_code_picker/country_code_picker.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
+import 'package:go_router/go_router.dart';
class PreregistrationCubit extends Cubit<PreregistrationState> {
final _profileRepository = locator<ProfileRepository>();
@@ -106,7 +108,7 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
_navigateNextPage();
}
- void onContinueClicked() {
+ void onContinueClicked(BuildContext context) {
if (_isAnimating) return;
switch (currentPage) {
case PreregistrationPage.profile:
@@ -119,7 +121,7 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
onPaymentContinueClicked();
break;
case PreregistrationPage.confirmation:
- _onConfirmPressed();
+ _onConfirmPressed(context);
break;
}
}
@@ -152,7 +154,7 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
_tracking.trackRemoveFromCart(analyticsEventItem);
}
- void _onConfirmPressed() async {
+ void _onConfirmPressed(BuildContext context) async {
// final analyticsEventItem = AnalyticsEventItem(
// hotelName: "Comwell",
// currency: "DKK",
@@ -174,6 +176,8 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
emit(state.copyWith(loading: true));
Future.delayed(const Duration(seconds: 3), () {
emit(state.copyWith(loading: false));
+ if (!context.mounted) return;
+ context.pushReplacementNamed(AppRoutes.bookingDetails.name);
});
}
diff --git a/comwell_key_app/lib/pregistration/pages/prereg_address_page.dart b/comwell_key_app/lib/pregistration/pages/prereg_address_page.dart
index 9b7cc1f8..15614d71 100644
--- a/comwell_key_app/lib/pregistration/pages/prereg_address_page.dart
+++ b/comwell_key_app/lib/pregistration/pages/prereg_address_page.dart
@@ -15,7 +15,7 @@ class PreregAddressPage extends StatelessWidget {
return BlocBuilder<PreregistrationCubit, PreregistrationState>(
builder: (context, state) {
final cubit = context.read<PreregistrationCubit>();
- final state = cubit.state;
+
if (state.loading) {
return const Center(child: CircularProgressIndicator());
}
@@ -87,13 +87,13 @@ class PreregAddressPage extends StatelessWidget {
child: CountryCodePicker(
alignLeft: true,
textOverflow: TextOverflow.visible,
- initialSelection: state.user?.address.country,
+ initialSelection: cubit.countryCode?.name,
showFlag: true,
favorite: const ['DK', 'SE', 'NO', 'DE'],
showDropDownButton: true,
padding: const EdgeInsets.symmetric(horizontal: 16),
textStyle: Theme.of(context).textTheme.headlineSmall,
- showCountryOnly: true,
+ showCountryOnly: false,
showOnlyCountryWhenClosed: true,
onChanged: (CountryCode countryCode) {
cubit.selectedCountry = countryCode.name ?? '';
diff --git a/comwell_key_app/lib/pregistration/preregistration_flow.dart b/comwell_key_app/lib/pregistration/preregistration_flow.dart
index aa77b857..d82cbb2a 100644
--- a/comwell_key_app/lib/pregistration/preregistration_flow.dart
+++ b/comwell_key_app/lib/pregistration/preregistration_flow.dart
@@ -78,7 +78,7 @@ class _PreregistrationFlowState extends State<PreregistrationFlow> {
padding: const EdgeInsets.all(16.0),
child: ElevatedButton(
onPressed: cubit.canContinue
- ? cubit.onContinueClicked
+ ? () => cubit.onContinueClicked(context)
: null,
style: ButtonStyle(
backgroundColor:
diff --git a/comwell_key_app/lib/profile/profile_repository.dart b/comwell_key_app/lib/profile/profile_repository.dart
index 3facc019..051f75ab 100644
--- a/comwell_key_app/lib/profile/profile_repository.dart
+++ b/comwell_key_app/lib/profile/profile_repository.dart
@@ -43,9 +43,8 @@ class ProfileRepository {
Future<Booking> getBookingDetails(String bookingId) async {
final response = await api.getBookingDetails(bookingId);
- final bookingDto = BookingDTO.fromJson(response);
- await db.bookingsDao.insertBookings(BookingsDTO(current: [bookingDto], past: [], cancelled: []));
- return bookingDto.toBooking(user.id, BookingStatus.current);
+ await db.bookingsDao.insertBookings(BookingsDTO(current: [response], past: [], cancelled: []));
+ return response.toBooking(user.id, BookingStatus.current);
}
Future<User> fetchProfileSettings() async {
diff --git a/comwell_key_app/lib/routing/app_router.dart b/comwell_key_app/lib/routing/app_router.dart
index 45cc806a..fc6c4a3e 100644
--- a/comwell_key_app/lib/routing/app_router.dart
+++ b/comwell_key_app/lib/routing/app_router.dart
@@ -257,6 +257,7 @@ GoRouter goRouter() {
booking,
bookingDetailsRepository:
locator<BookingDetailsRepository>(),
+ profileRepository: locator<ProfileRepository>(),
),
child: const BookingDetailsPage(),
);
diff --git a/comwell_key_app/lib/services/api.dart b/comwell_key_app/lib/services/api.dart
index ce983fb4..1cb10835 100644
--- a/comwell_key_app/lib/services/api.dart
+++ b/comwell_key_app/lib/services/api.dart
@@ -5,6 +5,7 @@ import 'package:comwell_key_app/hotel_information/models/hotel.dart';
import 'package:comwell_key_app/notifications/models/notification_permission.dart';
import 'package:comwell_key_app/profile_settings/model/user.dart';
import 'package:comwell_key_app/services/http_client.dart';
+import 'package:comwell_key_app/services/models/booking_dto.dart';
import 'package:comwell_key_app/services/models/bookings_dto.dart';
import 'package:comwell_key_app/services/models/user_dto.dart';
import 'package:comwell_key_app/services/utils/api_endpoints.dart';
@@ -207,8 +208,8 @@ class Api {
.post<void>(ApiEndpoints.provisionKey, data: {'bookingId': bookingId});
}
- Future<Json> getBookingDetails(String bookingId) async {
+ Future<BookingDTO> getBookingDetails(String bookingId) async {
final response = await dio.get<Json>(ApiEndpoints.getBookingDetails, queryParameters: {'confirmationId': bookingId});
- return response.data!;
+ return BookingDTO.fromJson(response.data!);
}
}
diff --git a/comwell_key_app/lib/services/utils/api_endpoints.dart b/comwell_key_app/lib/services/utils/api_endpoints.dart
index 14c2f86b..181f9132 100644
--- a/comwell_key_app/lib/services/utils/api_endpoints.dart
+++ b/comwell_key_app/lib/services/utils/api_endpoints.dart
@@ -6,7 +6,7 @@ class ApiEndpoints {
static const String getCurrentBookings = '/booking/v1/GetCurrentBookings';
static const String preRegistration = '/booking/v1/Preregistration';
static const String checkIn = '/booking/v1/CheckIn';
- static const String getBookingDetails = '/v1/GetBooking?confirmationId={confirmationId}';
+ static const String getBookingDetails = '/booking/v1/GetBookingDetails?confirmationId={confirmationId}';
// Payment endpoints
static const String storedPaymentMethods = '/Payment/v1/stored-payment-methods';
diff --git a/comwell_key_app/test/booking_details_test/booking_details_bloc_test.dart b/comwell_key_app/test/booking_details_test/booking_details_bloc_test.dart
index f5455ec1..c38b689a 100644
--- a/comwell_key_app/test/booking_details_test/booking_details_bloc_test.dart
+++ b/comwell_key_app/test/booking_details_test/booking_details_bloc_test.dart
@@ -2,6 +2,7 @@
import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
import 'package:comwell_key_app/booking_details/booking_details_repository.dart';
import 'package:comwell_key_app/check_in/check_in_repository.dart';
+import 'package:comwell_key_app/profile/profile_repository.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:comwell_key_app/utils/seos_repository.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -11,16 +12,19 @@ import 'package:mockito/mockito.dart';
class MockBookingDetailsRepository extends Mock
implements BookingDetailsRepository {}
+class MockProfileRepository extends Mock implements ProfileRepository {}
+
class MockSeosRepository extends Mock implements SeosRepository {}
void main() {
// Declare the mock HomeRepository
late BookingDetailsRepository mockBookingDetailsRepository;
-
+ late ProfileRepository mockProfileRepository;
// Setup function runs before every test
setUp(() {
// Initialize the mock HomeRepository
mockBookingDetailsRepository = MockBookingDetailsRepository();
+ mockProfileRepository = MockProfileRepository();
setupLocator();
});
@@ -32,6 +36,7 @@ void main() {
return BookingDetailsBloc(
CheckInRepository.mockBooking,
bookingDetailsRepository: mockBookingDetailsRepository,
+ profileRepository: mockProfileRepository,
);
},
act: (bloc) => bloc.add(InitialEvent()),