6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit c1447385

AuthorEdmir Suljic<esu@dwarf.dk>
Date2025-10-24 12:51:00 +0200
Resolved PR comments

Changed files

.../.generated/services/models/bookings_dto.g.dart  | 10 ++++++++--
 comwell_key_app/lib/database/daos/bookings_dao.dart |  4 ++--
 .../lib/overview/cubit/overview_cubit.dart          |  8 ++++----
 comwell_key_app/lib/overview/models/bookings.dart   | 10 +++++++---
 comwell_key_app/lib/overview/overview_page.dart     | 17 ++++++++++-------
 .../overview/repository/overview_repository.dart    | 20 +++++++++++++++++---
 comwell_key_app/lib/profile/profile_repository.dart |  3 +--
 comwell_key_app/lib/services/api.dart               | 21 ++++++++++++++++++++-
 .../lib/services/mappers/bookings_mapper.dart       |  7 +++++--
 .../lib/services/models/bookings_dto.dart           | 13 +++++++------
 .../lib/services/utils/api_endpoints.dart           |  2 ++
 .../test/overview_test/overview_cubic_test.dart     |  8 ++------
 .../overview_test/overview_repository_test.dart     |  4 +---
 13 files changed, 86 insertions(+), 41 deletions(-)

Diff

diff --git a/comwell_key_app/lib/.generated/services/models/bookings_dto.g.dart b/comwell_key_app/lib/.generated/services/models/bookings_dto.g.dart
index 7ab36fc9..68206099 100644
--- a/comwell_key_app/lib/.generated/services/models/bookings_dto.g.dart
+++ b/comwell_key_app/lib/.generated/services/models/bookings_dto.g.dart
@@ -7,11 +7,17 @@ part of '../../../services/models/bookings_dto.dart';
// **************************************************************************
BookingsDTO _$BookingsDTOFromJson(Map json) => BookingsDTO(
- bookings: (json['bookings'] as List<dynamic>)
+ current: (json['current'] as List<dynamic>)
+ .map((e) => BookingDTO.fromJson(Map<String, dynamic>.from(e as Map))),
+ past: (json['past'] as List<dynamic>)
+ .map((e) => BookingDTO.fromJson(Map<String, dynamic>.from(e as Map))),
+ cancelled: (json['cancelled'] as List<dynamic>)
.map((e) => BookingDTO.fromJson(Map<String, dynamic>.from(e as Map))),
);
Map<String, dynamic> _$BookingsDTOToJson(BookingsDTO instance) =>
<String, dynamic>{
- 'bookings': instance.bookings.map((e) => e.toJson()).toList(),
+ 'current': instance.current.map((e) => e.toJson()).toList(),
+ 'past': instance.past.map((e) => e.toJson()).toList(),
+ 'cancelled': instance.cancelled.map((e) => e.toJson()).toList(),
};
diff --git a/comwell_key_app/lib/database/daos/bookings_dao.dart b/comwell_key_app/lib/database/daos/bookings_dao.dart
index 15fbf931..8962d220 100644
--- a/comwell_key_app/lib/database/daos/bookings_dao.dart
+++ b/comwell_key_app/lib/database/daos/bookings_dao.dart
@@ -36,13 +36,13 @@ class BookingsDao extends DatabaseAccessor<ComwellDatabase>
}
Future<void> insertBookings(BookingsDTO bookings) async {
- await insert(bookings.bookings);
+ await insert(bookings.current);
}
Stream<BookingsDTO> watchBookings() {
return (select(bookingEntity)).watch().map((entities) {
- return BookingsDTO(bookings: _entityToBooking(entities));
+ return BookingsDTO(current: _entityToBooking(entities), past: [], cancelled: []);
});
}
diff --git a/comwell_key_app/lib/overview/cubit/overview_cubit.dart b/comwell_key_app/lib/overview/cubit/overview_cubit.dart
index b863bece..9636de50 100644
--- a/comwell_key_app/lib/overview/cubit/overview_cubit.dart
+++ b/comwell_key_app/lib/overview/cubit/overview_cubit.dart
@@ -28,15 +28,15 @@ class OverviewCubit extends Cubit<OverviewState> {
Future<void> addBooking(Booking newBooking) async {
if (state is OverviewLoaded) {
final currentState = state as OverviewLoaded;
- final updatedBookings = List<Booking>.from(currentState.bookings.bookings);
+ final updatedBookings = List<Booking>.from(currentState.bookings.current);
updatedBookings.add(newBooking);
- final updatedBookingsObject = Bookings(bookings: updatedBookings);
+ final updatedBookingsObject = Bookings(current: updatedBookings, past: [], cancelled: []);
emit(OverviewLoaded(bookings: updatedBookingsObject));
} else {
- final bookings = Bookings(bookings: [newBooking]);
+ final bookings = Bookings(current: [newBooking], past: [], cancelled: []);
emit(OverviewLoaded(bookings: bookings));
}
}
@@ -52,7 +52,7 @@ class OverviewCubit extends Cubit<OverviewState> {
final currentState = state as OverviewLoaded;
emit(OverviewNoBookingFound(bookings: currentState.bookings));
} else {
- emit(const OverviewNoBookingFound(bookings: Bookings(bookings: [])));
+ emit(const OverviewNoBookingFound(bookings: Bookings(current: [], past: [], cancelled: [])));
}
} catch (e) {
emit(OverviewError(error: e.toString()));
diff --git a/comwell_key_app/lib/overview/models/bookings.dart b/comwell_key_app/lib/overview/models/bookings.dart
index 7ef09ec0..a37b05aa 100644
--- a/comwell_key_app/lib/overview/models/bookings.dart
+++ b/comwell_key_app/lib/overview/models/bookings.dart
@@ -2,12 +2,16 @@ import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:equatable/equatable.dart';
class Bookings extends Equatable {
- final Iterable<Booking> bookings;
+ final Iterable<Booking> current;
+ final Iterable<Booking> past;
+ final Iterable<Booking> cancelled;
const Bookings({
- required this.bookings,
+ required this.current,
+ required this.past,
+ required this.cancelled,
});
@override
- List<Object> get props => [bookings];
+ List<Object> get props => [current, past, cancelled];
}
\ No newline at end of file
diff --git a/comwell_key_app/lib/overview/overview_page.dart b/comwell_key_app/lib/overview/overview_page.dart
index 0269354d..44e81fd3 100644
--- a/comwell_key_app/lib/overview/overview_page.dart
+++ b/comwell_key_app/lib/overview/overview_page.dart
@@ -95,18 +95,18 @@ class OverviewTabViewState extends State<OverviewPage>
if (state is OverviewLoaded) ...[
OverviewTabView(
tabController: _tabController,
- bookings: (state).bookings),
+ bookings: Bookings(current: state.bookings.current, past: state.bookings.past, cancelled: state.bookings.cancelled)),
] else if (state is OverviewError) ...[
OverviewTabView(
tabController: _tabController,
- bookings: const Bookings(bookings: [])),
+ bookings: const Bookings(current: [], past: [], cancelled: [])),
] else if (state is OverviewNoBookingFound) ...[
OverviewTabView(
- tabController: _tabController, bookings: state.bookings),
+ tabController: _tabController, bookings: const Bookings(current: [], past: [], cancelled: [])),
] else ...[
OverviewTabView(
tabController: _tabController,
- bookings: const Bookings(bookings: [])),
+ bookings: const Bookings(current: [], past: [], cancelled: [])),
],
Divider(
color: theme.colorScheme.outline,
@@ -208,27 +208,30 @@ class OverviewTabView extends StatelessWidget {
final TabController _tabController;
final Bookings bookings;
+
@override
Widget build(BuildContext context) {
+
+
return Expanded(
child: TabBarView(
controller: _tabController,
children: [
CurrentBookingsTabView(
- bookings: bookings.bookings,
+ bookings: bookings.current,
bookingsTitle: 'no_current_bookings'.tr(),
bookingsSubtitle: 'no_current_bookings_subtitle'.tr(),
bookingsImage:
'assets/images/no_current_bookings_background.jpeg'),
BookingsTabView(
- bookings: bookings.bookings,
+ bookings: bookings.past,
bookingsTitle: 'no_past_bookings_title'.tr(),
bookingsSubtitle: 'no_past_bookings_subtitle'.tr(),
bookingsIcon: 'assets/icons/account.svg',
isCancelled: false),
BookingsTabView(
- bookings: bookings.bookings,
+ bookings: bookings.cancelled,
bookingsTitle: 'no_cancelled_booking_title'.tr(),
bookingsSubtitle: 'no_cancelled_booking_subtitle'.tr(),
bookingsIcon: 'assets/icons/thumbs-up.svg',
diff --git a/comwell_key_app/lib/overview/repository/overview_repository.dart b/comwell_key_app/lib/overview/repository/overview_repository.dart
index e740de21..bd98b6c1 100644
--- a/comwell_key_app/lib/overview/repository/overview_repository.dart
+++ b/comwell_key_app/lib/overview/repository/overview_repository.dart
@@ -9,6 +9,7 @@ import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/services/mappers/booking_mapper.dart';
import 'package:comwell_key_app/services/mappers/bookings_mapper.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/utils/locator.dart';
class OverviewRepository {
@@ -20,13 +21,26 @@ class OverviewRepository {
Future<Bookings> fetchAllBookingsForUser() async {
try {
- final response = await api.fetchAllBookingsForUser();
+ final currentBookings = await api.fetchCurrentBookingsForUser();
+
+ //TODO: Implement past and cancelled bookings
+
+ // final pastBookings = await api.fetchPastBookingsForUser();
+ // final cancelledBookings = await api.fetchCancelledBookingsForUser();
+ final pastBookings = <Booking>[];
+ final cancelledBookings = <Booking>[];
final user = await profileRepository.fetchProfileSettings();
final rooms = await chooseShareRoomRepository.getMockRooms();
- await locator<ComwellDatabase>().bookingsDao.insert(response);
+ await locator<ComwellDatabase>().bookingsDao.insert(currentBookings);
- return Bookings(bookings: response.map((e) => e.toBooking(user.id, rooms)).toList());
+ final bookings = Bookings(
+ current:
+ currentBookings.map((e) => e.toBooking(user.id, rooms)).toList(),
+ past: pastBookings,
+ cancelled: cancelledBookings);
+
+ return bookings;
} catch (e) {
throw Exception('Failed to fetch bookings $e');
}
diff --git a/comwell_key_app/lib/profile/profile_repository.dart b/comwell_key_app/lib/profile/profile_repository.dart
index 18634be0..6859a7d1 100644
--- a/comwell_key_app/lib/profile/profile_repository.dart
+++ b/comwell_key_app/lib/profile/profile_repository.dart
@@ -50,8 +50,7 @@ class ProfileRepository {
Future<Booking> getBookingDetails(String bookingId) async {
user = await fetchProfileSettings();
final response = await api.getBookingDetails(bookingId);
- await locator<ComwellDatabase>().bookingsDao.insertBookings(
- BookingsDTO(bookings: [response!]));
+ await locator<ComwellDatabase>().bookingsDao.insert([response!]);
final booking = response.toBooking(user.id, []);
return booking;
diff --git a/comwell_key_app/lib/services/api.dart b/comwell_key_app/lib/services/api.dart
index 62ade0ee..c2509b7d 100644
--- a/comwell_key_app/lib/services/api.dart
+++ b/comwell_key_app/lib/services/api.dart
@@ -43,7 +43,26 @@ class Api {
return await dio.post(ApiEndpoints.logout);
}
- Future<List<BookingDTO>> fetchAllBookingsForUser() async {
+ Future<List<BookingDTO>> fetchPastBookingsForUser() async {
+ final body = {
+ "skip": 0,
+ "limit": 100,
+ };
+ final json = jsonEncode(body);
+ final response = await dio.get<List<dynamic>>(ApiEndpoints.getPastBookings, data: json);
+ return response.data!.map((e) => BookingDTO.fromJson(e as Json)).toList();
+ }
+
+ Future<List<BookingDTO>> fetchCancelledBookingsForUser() async {
+ final body = {
+ "skip": 0,
+ "limit": 100,
+ };
+ final json = jsonEncode(body);
+ final response = await dio.get<List<dynamic>>(ApiEndpoints.getCancelledBookings, data: json);
+ return response.data!.map((e) => BookingDTO.fromJson(e as Json)).toList();
+ }
+ Future<List<BookingDTO>> fetchCurrentBookingsForUser() async {
final body = {
"skip": 0,
"limit": 100,
diff --git a/comwell_key_app/lib/services/mappers/bookings_mapper.dart b/comwell_key_app/lib/services/mappers/bookings_mapper.dart
index ae0055a9..3f59f3d6 100644
--- a/comwell_key_app/lib/services/mappers/bookings_mapper.dart
+++ b/comwell_key_app/lib/services/mappers/bookings_mapper.dart
@@ -6,8 +6,11 @@ import 'package:comwell_key_app/services/models/bookings_dto.dart';
extension BookingsMapper on BookingsDTO {
Bookings toBookings(int userId, List<Room> rooms) {
return Bookings(
- bookings:
- bookings.map((booking) => booking.toBooking(userId, rooms)).toList(),
+ current:
+ current.map((booking) => booking.toBooking(userId, rooms)).toList(),
+ past: past.map((booking) => booking.toBooking(userId, rooms)).toList(),
+ cancelled:
+ cancelled.map((booking) => booking.toBooking(userId, rooms)).toList(),
);
}
}
diff --git a/comwell_key_app/lib/services/models/bookings_dto.dart b/comwell_key_app/lib/services/models/bookings_dto.dart
index 24eb8797..8bcc0e0e 100644
--- a/comwell_key_app/lib/services/models/bookings_dto.dart
+++ b/comwell_key_app/lib/services/models/bookings_dto.dart
@@ -7,16 +7,17 @@ part '../../.generated/services/models/bookings_dto.g.dart';
@JsonSerializable()
class BookingsDTO {
- final Iterable<BookingDTO> bookings;
+ final Iterable<BookingDTO> current;
+ final Iterable<BookingDTO> past;
+ final Iterable<BookingDTO> cancelled;
BookingsDTO({
- required this.bookings,
+ required this.current,
+ required this.past,
+ required this.cancelled,
});
Json toJson() => _$BookingsDTOToJson(this);
- factory BookingsDTO.fromJson(Json json) {
- print("BookingsDTO fromJson: $json");
- return _$BookingsDTOFromJson(json);
- }
+ factory BookingsDTO.fromJson(Json json) => _$BookingsDTOFromJson(json);
}
diff --git a/comwell_key_app/lib/services/utils/api_endpoints.dart b/comwell_key_app/lib/services/utils/api_endpoints.dart
index 89441ec8..cc5908ba 100644
--- a/comwell_key_app/lib/services/utils/api_endpoints.dart
+++ b/comwell_key_app/lib/services/utils/api_endpoints.dart
@@ -4,6 +4,8 @@ class ApiEndpoints {
// Booking endpoints
static const String getCurrentBookings = '/booking/v1/GetCurrentBookings';
+ static const String getPastBookings = '/booking/v1/GetPastBookings';
+ static const String getCancelledBookings = '/booking/v1/GetCancelledBookings';
static const String preRegistration = '/booking/v1/Preregistration';
static const String checkIn = '/booking/v1/CheckIn';
static const String checkOut = '/booking/v1/CheckOut';
diff --git a/comwell_key_app/test/overview_test/overview_cubic_test.dart b/comwell_key_app/test/overview_test/overview_cubic_test.dart
index ffae621a..d3189192 100644
--- a/comwell_key_app/test/overview_test/overview_cubic_test.dart
+++ b/comwell_key_app/test/overview_test/overview_cubic_test.dart
@@ -31,7 +31,7 @@ void main() {
current: [
Booking(
id: '1',
- bookingStatus: BookingStatus.current,
+ reservationStatus: ReservationStatus.newreservation,
confirmationId: "s",
roomNumber: '',
startDate: DateTime(2021, 10, 10),
@@ -46,7 +46,6 @@ void main() {
bookingDate: DateTime(2021, 10, 10),
digitalCard: true,
totalCharge: 100,
- reservationStatus: ReservationStatus.newreservation,
balance: 100,
maskedCardNumber: "1234567890",
rooms: const [],
@@ -65,7 +64,7 @@ void main() {
current: [
Booking(
id: '1',
- bookingStatus: BookingStatus.current,
+ reservationStatus: ReservationStatus.newreservation,
roomNumber: '',
startDate: DateTime(2021, 10, 10),
endDate: DateTime(2021, 10, 10),
@@ -80,7 +79,6 @@ void main() {
bookingDate: DateTime(2021, 10, 10),
digitalCard: true,
totalCharge: 100,
- reservationStatus: ReservationStatus.newreservation,
balance: 100,
maskedCardNumber: "1234567890",
rooms: const [],
@@ -121,7 +119,6 @@ void main() {
),
act: (cubit) => cubit.addBooking(Booking(
id: '1',
- bookingStatus: BookingStatus.current,
roomNumber: '',
startDate: DateTime(2021, 10, 10),
endDate: DateTime(2021, 10, 10),
@@ -147,7 +144,6 @@ void main() {
current: [
Booking(
id: '1',
- bookingStatus: BookingStatus.current,
roomNumber: '',
startDate: DateTime(2021, 10, 10),
endDate: DateTime(2021, 10, 10),
diff --git a/comwell_key_app/test/overview_test/overview_repository_test.dart b/comwell_key_app/test/overview_test/overview_repository_test.dart
index ca8c2e6e..27f45174 100644
--- a/comwell_key_app/test/overview_test/overview_repository_test.dart
+++ b/comwell_key_app/test/overview_test/overview_repository_test.dart
@@ -21,7 +21,7 @@ void main() {
current: [
Booking(
id: '1',
- bookingStatus: BookingStatus.current,
+ reservationStatus: ReservationStatus.newreservation,
roomNumber: '101',
startDate: DateTime.now(),
endDate: DateTime.now().add(const Duration(days: 1)),
@@ -36,7 +36,6 @@ void main() {
bookingDate: DateTime.now(),
digitalCard: true,
totalCharge: 100,
- reservationStatus: ReservationStatus.newreservation,
balance: 100,
maskedCardNumber: "1234567890",
rooms: const [],
@@ -62,7 +61,6 @@ void main() {
const lastName = 'Doe';
final booking = Booking(
id: '1',
- bookingStatus: BookingStatus.current,
roomNumber: '101',
startDate: DateTime.now(),
confirmationId: "",