6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 8cec8c3c
Changed files
.../lib/.generated/overview/models/booking.g.dart | 57 ---------------------- .../lib/.generated/overview/models/bookings.g.dart | 25 ---------- .../.generated/services/models/booking_dto.g.dart | 44 +++++++++++++++++ .../.generated/services/models/bookings_dto.g.dart | 23 +++++++++ .../booking_details_repository.dart | 3 +- .../booking_details/components/share_button.dart | 2 +- .../lib/check_in/check_in_repository.dart | 17 +++---- .../lib/contact/cubit/contact_cubit.dart | 2 +- .../lib/database/daos/bookings_dao.dart | 21 ++++---- .../lib/overview/components/bookings_tab_view.dart | 12 ++--- .../components/current_bookings_tab_view.dart | 18 +++---- comwell_key_app/lib/overview/models/booking.dart | 34 +++---------- comwell_key_app/lib/overview/models/bookings.dart | 13 ++--- .../past_cancelled_booking_detail_page.dart | 10 ++-- .../overview/repository/overview_repository.dart | 34 ++++++++++--- comwell_key_app/lib/services/api.dart | 6 ++- .../lib/services/mappers/booking_mapper.dart | 53 ++++++++++++++++++++ .../lib/services/mappers/bookings_mapper.dart | 12 +++++ .../lib/services/models/booking_dto.dart | 45 +++++++++++++++++ .../lib/services/models/bookings_dto.dart | 23 +++++++++ .../test/overview_test/overview_cubic_test.dart | 37 ++------------ .../overview_test/overview_repository_test.dart | 21 ++------ 22 files changed, 295 insertions(+), 217 deletions(-)
Diff
diff --git a/comwell_key_app/lib/.generated/overview/models/booking.g.dart b/comwell_key_app/lib/.generated/overview/models/booking.g.dart
deleted file mode 100644
index 21cba377..00000000
--- a/comwell_key_app/lib/.generated/overview/models/booking.g.dart
+++ /dev/null
@@ -1,57 +0,0 @@
-// GENERATED CODE - DO NOT MODIFY BY HAND
-
-part of '../../../overview/models/booking.dart';
-
-// **************************************************************************
-// JsonSerializableGenerator
-// **************************************************************************
-
-Booking _$BookingFromJson(Map json) => Booking(
- id: json['id'] as String,
- confirmationId: json['confirmationId'] as String,
- userId: json['userId'] as String,
- roomNumber: json['roomNumber'] as String,
- startDate: DateTime.parse(json['startDate'] as String),
- endDate: DateTime.parse(json['endDate'] as String),
- status: $enumDecode(_$BookingStatusEnumMap, json['status']),
- image: json['image'] as String,
- hotelName: json['hotelName'] as String,
- roomType: json['roomType'] as String,
- children: (json['children'] as num).toInt(),
- adults: (json['adults'] as num).toInt(),
- hotelCode: json['hotelCode'] as String,
- booker: json['booker'] as String,
- bookingDate: DateTime.parse(json['bookingDate'] as String),
- paymentDetails: PaymentDetails.fromJson(
- Map<String, dynamic>.from(json['paymentDetails'] as Map)),
- digitalCard: json['digitalCard'] as bool,
- guests: (json['guests'] as List<dynamic>?)
- ?.map((e) => Guest.fromJson(Map<String, dynamic>.from(e as Map))),
- );
-
-Map<String, dynamic> _$BookingToJson(Booking instance) => <String, dynamic>{
- 'id': instance.id,
- 'userId': instance.userId,
- 'roomNumber': instance.roomNumber,
- 'startDate': instance.startDate.toIso8601String(),
- 'endDate': instance.endDate.toIso8601String(),
- 'status': _$BookingStatusEnumMap[instance.status]!,
- 'image': instance.image,
- 'hotelName': instance.hotelName,
- 'hotelCode': instance.hotelCode,
- 'roomType': instance.roomType,
- 'adults': instance.adults,
- 'children': instance.children,
- 'booker': instance.booker,
- 'bookingDate': instance.bookingDate.toIso8601String(),
- 'paymentDetails': instance.paymentDetails.toJson(),
- 'confirmationId': instance.confirmationId,
- 'digitalCard': instance.digitalCard,
- 'guests': instance.guests.map((e) => e.toJson()).toList(),
- };
-
-const _$BookingStatusEnumMap = {
- BookingStatus.current: 'current',
- BookingStatus.past: 'past',
- BookingStatus.cancelled: 'cancelled',
-};
diff --git a/comwell_key_app/lib/.generated/overview/models/bookings.g.dart b/comwell_key_app/lib/.generated/overview/models/bookings.g.dart
deleted file mode 100644
index 638108c0..00000000
--- a/comwell_key_app/lib/.generated/overview/models/bookings.g.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// GENERATED CODE - DO NOT MODIFY BY HAND
-
-part of '../../../overview/models/bookings.dart';
-
-// **************************************************************************
-// JsonSerializableGenerator
-// **************************************************************************
-
-Bookings _$BookingsFromJson(Map json) => Bookings(
- current: (json['current'] as List<dynamic>)
- .map((e) => Booking.fromJson(Map<String, dynamic>.from(e as Map)))
- .toList(),
- past: (json['past'] as List<dynamic>)
- .map((e) => Booking.fromJson(Map<String, dynamic>.from(e as Map)))
- .toList(),
- cancelled: (json['cancelled'] as List<dynamic>)
- .map((e) => Booking.fromJson(Map<String, dynamic>.from(e as Map)))
- .toList(),
- );
-
-Map<String, dynamic> _$BookingsToJson(Bookings instance) => <String, dynamic>{
- '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/.generated/services/models/booking_dto.g.dart b/comwell_key_app/lib/.generated/services/models/booking_dto.g.dart
new file mode 100644
index 00000000..e40c4611
--- /dev/null
+++ b/comwell_key_app/lib/.generated/services/models/booking_dto.g.dart
@@ -0,0 +1,44 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of '../../../services/models/booking_dto.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+BookingDTO _$BookingDTOFromJson(Map json) => BookingDTO(
+ roomNumber: json['roomNumber'] as String,
+ hotelCode: json['hotelCode'] as String,
+ firstName: json['firstName'] as String,
+ lastName: json['lastName'] as String,
+ confirmationNumber: json['confirmationNumber'] as String,
+ hmsConfirmationNumber: json['hmsConfirmationNumber'] as String,
+ dayIn: json['dayIn'] as String,
+ dayOut: json['dayOut'] as String,
+ cancelTime: json['cancelTime'] as String,
+ isCancelled: json['isCancelled'] as bool,
+ bookTime: json['bookTime'] as String,
+ roomType: json['roomType'] as String,
+ adults: (json['adults'] as num).toInt(),
+ children: (json['children'] as num).toInt(),
+ totalCharge: json['totalCharge'] as num,
+ );
+
+Map<String, dynamic> _$BookingDTOToJson(BookingDTO instance) =>
+ <String, dynamic>{
+ 'roomNumber': instance.roomNumber,
+ 'hotelCode': instance.hotelCode,
+ 'firstName': instance.firstName,
+ 'lastName': instance.lastName,
+ 'confirmationNumber': instance.confirmationNumber,
+ 'hmsConfirmationNumber': instance.hmsConfirmationNumber,
+ 'dayIn': instance.dayIn,
+ 'dayOut': instance.dayOut,
+ 'cancelTime': instance.cancelTime,
+ 'isCancelled': instance.isCancelled,
+ 'bookTime': instance.bookTime,
+ 'roomType': instance.roomType,
+ 'adults': instance.adults,
+ 'children': instance.children,
+ 'totalCharge': instance.totalCharge,
+ };
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
new file mode 100644
index 00000000..f0a66fd5
--- /dev/null
+++ b/comwell_key_app/lib/.generated/services/models/bookings_dto.g.dart
@@ -0,0 +1,23 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of '../../../services/models/bookings_dto.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+BookingsDTO _$BookingsDTOFromJson(Map json) => BookingsDTO(
+ current: (json['current'] as List<dynamic>)
+ .map((e) => BookingDTO.fromJson(Json.from(e as Map))),
+ past: (json['past'] as List<dynamic>)
+ .map((e) => BookingDTO.fromJson(Json.from(e as Map))),
+ cancelled: (json['cancelled'] as List<dynamic>)
+ .map((e) => BookingDTO.fromJson(Json.from(e as Map))),
+ );
+
+Map<String, dynamic> _$BookingsDTOToJson(BookingsDTO instance) =>
+ <String, dynamic>{
+ '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/booking_details/booking_details_repository.dart b/comwell_key_app/lib/booking_details/booking_details_repository.dart
index 52221ec0..f752770b 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/overview/models/guest.dart';
import 'package:comwell_key_app/services/api.dart';
+import 'package:comwell_key_app/services/mappers/booking_mapper.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:comwell_key_app/utils/secure_storage.dart';
@@ -34,7 +35,7 @@ class BookingDetailsRepository {
Booking booking,
) async {
//await api.updateBooking(booking);
- await database.bookingsDao.insert([booking], booking.status);
+ await database.bookingsDao.insert([booking.toDTO()], booking.status);
return booking;
}
}
diff --git a/comwell_key_app/lib/booking_details/components/share_button.dart b/comwell_key_app/lib/booking_details/components/share_button.dart
index 845c42c3..c707828f 100644
--- a/comwell_key_app/lib/booking_details/components/share_button.dart
+++ b/comwell_key_app/lib/booking_details/components/share_button.dart
@@ -70,7 +70,7 @@ class ShareButton extends StatelessWidget {
child: ElevatedButton(
onPressed: () async {
final results = await _showGuestList(
- context, index, guests, booking.booker);
+ context, index, guests, booking.booker.name);
if (results is Iterable<String>) {
final updatedBooking =
diff --git a/comwell_key_app/lib/check_in/check_in_repository.dart b/comwell_key_app/lib/check_in/check_in_repository.dart
index 3358c1ce..5be332f1 100644
--- a/comwell_key_app/lib/check_in/check_in_repository.dart
+++ b/comwell_key_app/lib/check_in/check_in_repository.dart
@@ -3,8 +3,10 @@ import 'dart:convert';
import 'package:comwell_key_app/database/comwell_db.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/overview/models/guest.dart';
-import 'package:comwell_key_app/overview/models/payment_details.dart';
+import 'package:comwell_key_app/profile/profile_repository.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/json.dart';
import 'package:comwell_key_app/utils/locator.dart';
@@ -14,15 +16,17 @@ class CheckInRepository {
final api = Api();
final db = locator.get<ComwellDatabase>();
final seosRepository = locator<SeosRepository>();
+ final profileRepository = locator<ProfileRepository>();
Future<void> checkIn(String confirmationId) async {
await api.checkIn(confirmationId);
}
Future<Booking> getBookingDetails(String bookingId) async {
+ final user = await profileRepository.fetchProfileSettings();
final entity = await db.bookingsDao.getBookingDetails(bookingId);
final Json json = jsonDecode(entity.json) as Json;
- return Booking.fromJson(json);
+ return BookingDTO.fromJson(json).toBooking(user.id);
}
Future<void> checkIfSetup() async {
@@ -43,7 +47,6 @@ class CheckInRepository {
static final mockBooking = Booking(
id: "helloworld",
- userId: "123",
roomNumber: "1234",
startDate: DateTime.now(),
endDate: DateTime.now(),
@@ -55,15 +58,9 @@ class CheckInRepository {
children: 0,
adults: 2,
hotelCode: "hotelCode",
- booker: "booker",
+ booker: const Guest(name: "Booker", id: "123"),
bookingDate: DateTime.now(),
digitalCard: true,
- paymentDetails: const PaymentDetails(
- cardNumber: "cardNumber",
- cardHolder: "cardHolder",
- expiryDate: "expiryDate",
- cvc: "cvc",
- cardType: CardType.visa),
guests: null,
);
}
diff --git a/comwell_key_app/lib/contact/cubit/contact_cubit.dart b/comwell_key_app/lib/contact/cubit/contact_cubit.dart
index 5da5e597..836e2e7d 100644
--- a/comwell_key_app/lib/contact/cubit/contact_cubit.dart
+++ b/comwell_key_app/lib/contact/cubit/contact_cubit.dart
@@ -15,7 +15,7 @@ class ContactCubit extends Cubit<ContactState> {
try {
final bookings = await overviewRepository.fetchAllBookingsForUser('1');
// Send contact
- contactRepository.sendContact(bookings.current[0].hotelCode);
+ contactRepository.sendContact(bookings.current.first.hotelCode);
emit(const ContactState.contactSent());
} catch (e) {
emit(const ContactState.contactError());
diff --git a/comwell_key_app/lib/database/daos/bookings_dao.dart b/comwell_key_app/lib/database/daos/bookings_dao.dart
index 9b8fc7c7..653d7394 100644
--- a/comwell_key_app/lib/database/daos/bookings_dao.dart
+++ b/comwell_key_app/lib/database/daos/bookings_dao.dart
@@ -2,6 +2,9 @@ import 'dart:convert';
import 'package:comwell_key_app/database/comwell_db.dart';
import 'package:comwell_key_app/overview/models/bookings.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/services/models/bookings_dto.dart';
import 'package:comwell_key_app/utils/json.dart';
import 'package:drift/drift.dart';
@@ -25,35 +28,35 @@ class BookingsDao extends DatabaseAccessor<ComwellDatabase>
.getSingle();
}
- Future<void> insert(Iterable<Booking> bookings, BookingStatus status) async {
+ Future<void> insert(Iterable<BookingDTO> bookings, BookingStatus status) async {
final entities = bookings.map((booking) {
final json = jsonEncode(booking.toJson());
return BookingEntityCompanion.insert(
- id: booking.id, json: json, status: status.toString());
+ id: booking.confirmationNumber, json: json, status: status.toString());
});
await batch((batch) => batch.insertAll(bookingEntity, entities,
mode: InsertMode.insertOrReplace));
}
- Future<void> insertBookings(Bookings bookings) async {
+ Future<void> insertBookings(BookingsDTO bookings) async {
await insert(bookings.current, BookingStatus.current);
await insert(bookings.past, BookingStatus.past);
await insert(bookings.cancelled, BookingStatus.cancelled);
}
- Stream<Iterable<Booking>> watchBookingsByStatus(BookingStatus status) {
+ Stream<Iterable<BookingDTO>> watchBookingsByStatus(BookingStatus status) {
return (select(bookingEntity)
..where((entity) => entity.status.equals(status.toString())))
.watch()
.map((entities) {
return entities.map((entity) {
final json = jsonDecode(entity.json) as Json;
- return Booking.fromJson(json);
+ return BookingDTO.fromJson(json);
});
});
}
- Stream<Bookings> watchBookings() {
+ Stream<BookingsDTO> watchBookings() {
return (select(bookingEntity)).watch().map((entities) {
final current = entities
.where((ent) => ent.status == BookingStatus.current.toString());
@@ -61,17 +64,17 @@ class BookingsDao extends DatabaseAccessor<ComwellDatabase>
entities.where((ent) => ent.status == BookingStatus.past.toString());
final cancelled = entities
.where((ent) => ent.status == BookingStatus.cancelled.toString());
- return Bookings(
+ return BookingsDTO(
current: _entityToBooking(current),
past: _entityToBooking(past),
cancelled: _entityToBooking(cancelled));
});
}
- List<Booking> _entityToBooking(Iterable<BookingDb> entities) {
+ Iterable<BookingDTO> _entityToBooking(Iterable<BookingDb> entities) {
return entities.map((entity) {
final json = jsonDecode(entity.json) as Json;
- return Booking.fromJson(json);
+ return BookingDTO.fromJson(json);
}).toList();
}
}
diff --git a/comwell_key_app/lib/overview/components/bookings_tab_view.dart b/comwell_key_app/lib/overview/components/bookings_tab_view.dart
index 27a3cde9..d5f3a1a5 100644
--- a/comwell_key_app/lib/overview/components/bookings_tab_view.dart
+++ b/comwell_key_app/lib/overview/components/bookings_tab_view.dart
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
class BookingsTabView extends StatelessWidget {
- final List<Booking> bookings;
+ final Iterable<Booking> bookings;
final String bookingsTitle;
final String bookingsSubtitle;
final String bookingsIcon;
@@ -66,11 +66,11 @@ class BookingsTabView extends StatelessWidget {
shrinkWrap: true,
itemCount: bookings.length,
itemBuilder: (context, index) => BookingListItemView(
- booking: bookings[index],
- hotelName: bookings[index].hotelName,
- startDate: bookings[index].startDate,
- endDate: bookings[index].endDate,
- hotelImage: Image.asset(bookings[index].image),
+ booking: bookings.elementAt(index),
+ hotelName: bookings.elementAt(index).hotelName,
+ startDate: bookings.elementAt(index).startDate,
+ endDate: bookings.elementAt(index).endDate,
+ hotelImage: Image.asset(bookings.elementAt(index).image),
isCancelled: isCancelled,
),
);
diff --git a/comwell_key_app/lib/overview/components/current_bookings_tab_view.dart b/comwell_key_app/lib/overview/components/current_bookings_tab_view.dart
index 3bae5049..8234b321 100644
--- a/comwell_key_app/lib/overview/components/current_bookings_tab_view.dart
+++ b/comwell_key_app/lib/overview/components/current_bookings_tab_view.dart
@@ -3,17 +3,18 @@ import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:flutter/material.dart';
class CurrentBookingsTabView extends StatelessWidget {
- final List<Booking> bookings;
+ final Iterable<Booking> bookings;
final String bookingsTitle;
final String bookingsSubtitle;
final String bookingsImage;
- const CurrentBookingsTabView(
- {required this.bookings,
- required this.bookingsTitle,
- required this.bookingsSubtitle,
- required this.bookingsImage,
- super.key});
+ const CurrentBookingsTabView({
+ required this.bookings,
+ required this.bookingsTitle,
+ required this.bookingsSubtitle,
+ required this.bookingsImage,
+ super.key,
+ });
@override
Widget build(BuildContext context) {
@@ -62,7 +63,6 @@ class CurrentBookingsTabView extends StatelessWidget {
const SizedBox(
height: 40,
),
-
],
);
} else {
@@ -70,7 +70,7 @@ class CurrentBookingsTabView extends StatelessWidget {
shrinkWrap: true,
itemCount: bookings.length,
itemBuilder: (context, index) => CurrentBookingListItem(
- booking: bookings[index],
+ booking: bookings.elementAt(index),
),
);
}
diff --git a/comwell_key_app/lib/overview/models/booking.dart b/comwell_key_app/lib/overview/models/booking.dart
index 8d7647cd..48cc0f30 100644
--- a/comwell_key_app/lib/overview/models/booking.dart
+++ b/comwell_key_app/lib/overview/models/booking.dart
@@ -1,15 +1,10 @@
import 'package:comwell_key_app/overview/models/guest.dart';
import 'package:comwell_key_app/overview/models/payment_details.dart';
-import 'package:comwell_key_app/utils/json.dart';
import 'package:equatable/equatable.dart';
-import 'package:json_annotation/json_annotation.dart';
-part '../../.generated/overview/models/booking.g.dart';
-
-@JsonSerializable()
class Booking extends Equatable {
final String id;
- final String userId;
+ final String confirmationId;
final String roomNumber;
final DateTime startDate;
final DateTime endDate;
@@ -20,17 +15,14 @@ class Booking extends Equatable {
final String roomType;
final int adults;
final int children;
- final String booker;
+ final Guest booker;
final DateTime bookingDate;
- final PaymentDetails paymentDetails;
- final String confirmationId;
final bool digitalCard;
final Iterable<Guest> guests;
Booking({
required this.id,
required this.confirmationId,
- required this.userId,
required this.roomNumber,
required this.startDate,
required this.endDate,
@@ -43,31 +35,24 @@ class Booking extends Equatable {
required this.hotelCode,
required this.booker,
required this.bookingDate,
- required this.paymentDetails,
required this.digitalCard,
Iterable<Guest>? guests,
- }) : guests = _ensureBookerInGuestList(booker, userId, guests ?? []);
+ }) : guests = _ensureBookerInGuestList(booker, guests ?? []);
- static Iterable<Guest> _ensureBookerInGuestList(
- String booker, String userId, Iterable<Guest> guests) {
- final bookerExists = guests.any((guest) => guest.name == booker);
+ static Iterable<Guest> _ensureBookerInGuestList(Guest booker, Iterable<Guest> guests) {
+ final bookerExists = guests.any((guest) => guest.id == booker.id);
if (!bookerExists) {
return [
- Guest(name: booker, id: userId),
+ booker,
...guests,
];
}
return guests;
}
- factory Booking.fromJson(Json json) => _$BookingFromJson(json);
-
- Json toJson() => _$BookingToJson(this);
-
@override
List<Object?> get props => [
id,
- userId,
roomNumber,
startDate,
endDate,
@@ -80,7 +65,6 @@ class Booking extends Equatable {
hotelCode,
booker,
bookingDate,
- paymentDetails,
guests,
];
@@ -97,7 +81,7 @@ class Booking extends Equatable {
String? roomType,
int? adults,
int? children,
- String? booker,
+ Guest? booker,
DateTime? bookingDate,
PaymentDetails? paymentDetails,
String? confirmationId,
@@ -105,7 +89,6 @@ class Booking extends Equatable {
}) {
return Booking(
id: id ?? this.id,
- userId: userId ?? this.userId,
roomNumber: roomNumber ?? this.roomNumber,
startDate: startDate ?? this.startDate,
endDate: endDate ?? this.endDate,
@@ -118,7 +101,6 @@ class Booking extends Equatable {
children: children ?? this.children,
booker: booker ?? this.booker,
bookingDate: bookingDate ?? this.bookingDate,
- paymentDetails: paymentDetails ?? this.paymentDetails,
confirmationId: confirmationId ?? this.confirmationId,
digitalCard: digitalCard,
guests: guests ?? this.guests,
@@ -127,7 +109,7 @@ class Booking extends Equatable {
Booking updateGuests(Iterable<String> guestNames) {
final updatedGuests = guests.where(
- (guest) => guest.name == booker || !guestNames.contains(guest.name));
+ (guest) => guest.id == booker.id || !guestNames.contains(guest.name));
return copyWith(guests: updatedGuests);
}
diff --git a/comwell_key_app/lib/overview/models/bookings.dart b/comwell_key_app/lib/overview/models/bookings.dart
index 0d3008b2..8a738cb5 100644
--- a/comwell_key_app/lib/overview/models/bookings.dart
+++ b/comwell_key_app/lib/overview/models/bookings.dart
@@ -3,13 +3,10 @@ import 'package:comwell_key_app/utils/json.dart';
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
-part '../../.generated/overview/models/bookings.g.dart';
-
-@JsonSerializable()
class Bookings extends Equatable {
- final List<Booking> current;
- final List<Booking> past;
- final List<Booking> cancelled;
+ final Iterable<Booking> current;
+ final Iterable<Booking> past;
+ final Iterable<Booking> cancelled;
const Bookings({
required this.current,
@@ -17,10 +14,6 @@ class Bookings extends Equatable {
required this.cancelled,
});
- factory Bookings.fromJson(Json json) => _$BookingsFromJson(json);
-
- Json toJson() => _$BookingsToJson(this);
-
@override
List<Object> get props => [current, past, cancelled];
}
\ No newline at end of file
diff --git a/comwell_key_app/lib/overview/past_cancelled_booking_detail_page.dart b/comwell_key_app/lib/overview/past_cancelled_booking_detail_page.dart
index 191f6f3a..21b28a2c 100644
--- a/comwell_key_app/lib/overview/past_cancelled_booking_detail_page.dart
+++ b/comwell_key_app/lib/overview/past_cancelled_booking_detail_page.dart
@@ -1,6 +1,7 @@
import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
import 'package:comwell_key_app/common/components/payment_card_image.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
+import 'package:comwell_key_app/overview/models/payment_details.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@@ -105,7 +106,7 @@ class PastCancelledBookingDetailPage extends StatelessWidget {
style: theme.textTheme.bodySmall
?.copyWith(color: Colors.black.withAlpha((0.65 * 255).toInt()))),
subtitle:
- Text(booking.booker, style: theme.textTheme.headlineSmall),
+ Text(booking.booker.name, style: theme.textTheme.headlineSmall),
),
const Divider(color: colorDivider),
ListTile(
@@ -129,21 +130,22 @@ class PastCancelledBookingDetailPage extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
+ // TODO: Remove?
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('payment_method'.tr(),
style: theme.textTheme.bodySmall?.copyWith(
color: Colors.black.withAlpha((0.65 * 255).toInt()))),
- Text(booking.paymentDetails.cardNumber,
+ Text("booking.paymentDetails.cardNumber",
style: theme.textTheme.headlineSmall),
]),
booking.status == BookingStatus.cancelled
? Text('booking_annulled'.tr(),
style: theme.textTheme.headlineSmall
?.copyWith(color: Colors.red))
- : PaymentCardImage(
- cardType: booking.paymentDetails.cardType),
+ : const PaymentCardImage(
+ cardType: CardType.mastercard),
],
)
],
diff --git a/comwell_key_app/lib/overview/repository/overview_repository.dart b/comwell_key_app/lib/overview/repository/overview_repository.dart
index 725694f7..5d261676 100644
--- a/comwell_key_app/lib/overview/repository/overview_repository.dart
+++ b/comwell_key_app/lib/overview/repository/overview_repository.dart
@@ -1,29 +1,51 @@
import 'package:comwell_key_app/database/comwell_db.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/overview/models/bookings.dart';
+import 'package:comwell_key_app/profile/profile_repository.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/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 {
final api = Api();
final database = locator<ComwellDatabase>();
+ final profileRepository = locator<ProfileRepository>();
OverviewRepository();
Future<Bookings> fetchAllBookingsForUser(String userId) async {
- //final response = await api.fetchAllBookingsForUser(userId);
- //if (response != null) {
try {
- final bookings = Bookings.fromJson(response);
- await database.bookingsDao.insertBookings(bookings);
- return bookings;
+ final response = await api.fetchAllBookingsForUser();
+ final user = await profileRepository.fetchProfileSettings();
+ await database.bookingsDao.insertBookings(response);
+ return response.toBookings(user.id);
} catch (e) {
throw Exception('Failed to fetch bookings$e');
}
}
Future<Booking?> findBooking(String bookingReference, String lastName) async {
- return Booking.fromJson(json);
+ final user = await database.userDAO.getUser();
+ final dto = BookingDTO(
+ roomNumber: "1234",
+ hotelCode: "CBO",
+ firstName: "Hello",
+ lastName: "World",
+ confirmationNumber: "12345",
+ hmsConfirmationNumber: "1234",
+ dayIn: "31-12-2000",
+ dayOut: "31-12-2000",
+ cancelTime: "31-12-2000",
+ isCancelled: false,
+ bookTime: "31-12-2000",
+ roomType: "??",
+ adults: 3,
+ children: 5,
+ totalCharge: 12345);
+ return dto.toBooking(user.id);
}
}
diff --git a/comwell_key_app/lib/services/api.dart b/comwell_key_app/lib/services/api.dart
index 79db4f26..98c3e254 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/bookings_dto.dart';
import 'package:comwell_key_app/services/models/user_dto.dart';
import 'package:comwell_key_app/utils/json.dart';
import 'package:dio/dio.dart';
@@ -27,8 +28,9 @@ class Api {
return await dio.post('/logout');
}
- Future<Response<dynamic>> fetchAllBookingsForUser(String userId) async {
- return await dio.get('/booking/v1/GetCurrentBookingsFunction/$userId');
+ Future<BookingsDTO> fetchAllBookingsForUser() async {
+ final response = await dio.get<Json>('/booking/v1/GetCurrentBookings');
+ return BookingsDTO.fromJson(response.data!);
}
Future<StoredPaymentsResponse> getPaymentMethods() async {
diff --git a/comwell_key_app/lib/services/mappers/booking_mapper.dart b/comwell_key_app/lib/services/mappers/booking_mapper.dart
new file mode 100644
index 00000000..35df34be
--- /dev/null
+++ b/comwell_key_app/lib/services/mappers/booking_mapper.dart
@@ -0,0 +1,53 @@
+import 'package:comwell_key_app/overview/models/booking.dart';
+import 'package:comwell_key_app/overview/models/guest.dart';
+import 'package:comwell_key_app/services/models/booking_dto.dart';
+
+extension BookingDTOMapper on BookingDTO {
+ Booking toBooking(int userId) {
+ final startDate = DateTime.parse(dayIn);
+ final endDate = DateTime.parse(dayOut);
+ return Booking(
+ id: confirmationNumber,
+ confirmationId: confirmationNumber,
+ roomNumber: roomNumber,
+ startDate: startDate,
+ endDate: endDate,
+ status: BookingStatus.current,
+ image: "",
+ hotelName: "Hotel $hotelCode",
+ roomType: roomType,
+ children: children,
+ booker: Guest(name: "$firstName $lastName", id: "$userId"),
+ adults: adults,
+ hotelCode: hotelCode,
+ bookingDate: startDate,
+ digitalCard: true,
+ );
+ }
+}
+
+extension BookingMapper on Booking {
+ BookingDTO toDTO() {
+ return BookingDTO(
+ roomNumber: roomNumber,
+ hotelCode: hotelCode,
+ firstName: booker.name,
+ lastName: booker.name,
+ confirmationNumber: id,
+ hmsConfirmationNumber: id,
+ dayIn: startDate.toIso8601String(),
+ dayOut: endDate.toIso8601String(),
+ cancelTime: "",
+ isCancelled: false,
+ bookTime: startDate.toIso8601String(),
+ roomType: roomType,
+ adults: adults,
+ children: children,
+ totalCharge: 200);
+ }
+}
+
+extension ListBookingMapper on Iterable<BookingDTO> {
+ Iterable<Booking> toBookings(int userId) =>
+ map((dto) => dto.toBooking(userId));
+}
diff --git a/comwell_key_app/lib/services/mappers/bookings_mapper.dart b/comwell_key_app/lib/services/mappers/bookings_mapper.dart
new file mode 100644
index 00000000..3bdb1438
--- /dev/null
+++ b/comwell_key_app/lib/services/mappers/bookings_mapper.dart
@@ -0,0 +1,12 @@
+import 'package:comwell_key_app/overview/models/bookings.dart';
+import 'package:comwell_key_app/services/mappers/booking_mapper.dart';
+import 'package:comwell_key_app/services/models/bookings_dto.dart';
+
+extension BookingsMapper on BookingsDTO {
+ Bookings toBookings(int userId) {
+ return Bookings(
+ current: current.toBookings(userId),
+ past: past.toBookings(userId),
+ cancelled: cancelled.toBookings(userId));
+ }
+}
diff --git a/comwell_key_app/lib/services/models/booking_dto.dart b/comwell_key_app/lib/services/models/booking_dto.dart
new file mode 100644
index 00000000..0ed696cb
--- /dev/null
+++ b/comwell_key_app/lib/services/models/booking_dto.dart
@@ -0,0 +1,45 @@
+import 'package:comwell_key_app/utils/json.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+part '../../.generated/services/models/booking_dto.g.dart';
+
+@JsonSerializable()
+class BookingDTO {
+ final String roomNumber;
+ final String hotelCode;
+ final String firstName;
+ final String lastName;
+ final String confirmationNumber;
+ final String hmsConfirmationNumber;
+ final String dayIn;
+ final String dayOut;
+ final String cancelTime;
+ final bool isCancelled;
+ final String bookTime;
+ final String roomType;
+ final int adults;
+ final int children;
+ final num totalCharge;
+
+ BookingDTO({
+ required this.roomNumber,
+ required this.hotelCode,
+ required this.firstName,
+ required this.lastName,
+ required this.confirmationNumber,
+ required this.hmsConfirmationNumber,
+ required this.dayIn,
+ required this.dayOut,
+ required this.cancelTime,
+ required this.isCancelled,
+ required this.bookTime,
+ required this.roomType,
+ required this.adults,
+ required this.children,
+ required this.totalCharge,
+ });
+
+ Json toJson() => _$BookingDTOToJson(this);
+
+ factory BookingDTO.fromJson(Json json) => _$BookingDTOFromJson(json);
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/services/models/bookings_dto.dart b/comwell_key_app/lib/services/models/bookings_dto.dart
new file mode 100644
index 00000000..8bcc0e0e
--- /dev/null
+++ b/comwell_key_app/lib/services/models/bookings_dto.dart
@@ -0,0 +1,23 @@
+import 'package:comwell_key_app/utils/json.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+import 'booking_dto.dart';
+
+part '../../.generated/services/models/bookings_dto.g.dart';
+
+@JsonSerializable()
+class BookingsDTO {
+ final Iterable<BookingDTO> current;
+ final Iterable<BookingDTO> past;
+ final Iterable<BookingDTO> cancelled;
+
+ BookingsDTO({
+ required this.current,
+ required this.past,
+ required this.cancelled,
+ });
+
+ Json toJson() => _$BookingsDTOToJson(this);
+
+ factory BookingsDTO.fromJson(Json json) => _$BookingsDTOFromJson(json);
+}
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 f87e228b..536825b1 100644
--- a/comwell_key_app/test/overview_test/overview_cubic_test.dart
+++ b/comwell_key_app/test/overview_test/overview_cubic_test.dart
@@ -1,4 +1,5 @@
import 'package:bloc_test/bloc_test.dart';
+import 'package:comwell_key_app/overview/models/guest.dart';
import 'package:comwell_key_app/overview/models/payment_details.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
@@ -33,7 +34,6 @@ void main() {
id: '1',
status: BookingStatus.current,
confirmationId: "s",
- userId: '1',
roomNumber: '',
startDate: DateTime(2021, 10, 10),
endDate: DateTime(2021, 10, 10),
@@ -43,14 +43,8 @@ void main() {
children: 2,
adults: 2,
hotelCode: '',
- booker: '',
+ booker: const Guest(name: "name", id: "id"),
bookingDate: DateTime(2021, 10, 10),
- paymentDetails: const PaymentDetails(
- cardNumber: '1234414141',
- cardHolder: 'Nikolaj',
- expiryDate: '',
- cvc: '212',
- cardType: CardType.visa),
digitalCard: true)
],
past: const [],
@@ -67,7 +61,6 @@ void main() {
Booking(
id: '1',
status: BookingStatus.current,
- userId: '1',
roomNumber: '',
startDate: DateTime(2021, 10, 10),
endDate: DateTime(2021, 10, 10),
@@ -78,14 +71,8 @@ void main() {
children: 2,
adults: 2,
hotelCode: '',
- booker: '',
+ booker: const Guest(name: "name", id: "id"),
bookingDate: DateTime(2021, 10, 10),
- paymentDetails: const PaymentDetails(
- cardNumber: '1234414141',
- cardHolder: 'Nikolaj',
- expiryDate: '',
- cvc: '212',
- cardType: CardType.visa),
digitalCard: true)
],
past: const [],
@@ -124,7 +111,6 @@ void main() {
act: (cubit) => cubit.addBooking(Booking(
id: '1',
status: BookingStatus.current,
- userId: '1',
roomNumber: '',
startDate: DateTime(2021, 10, 10),
endDate: DateTime(2021, 10, 10),
@@ -135,14 +121,8 @@ void main() {
children: 2,
adults: 2,
hotelCode: '',
- booker: '',
+ booker: const Guest(name: "name", id: "id"),
bookingDate: DateTime(2021, 10, 10),
- paymentDetails: const PaymentDetails(
- cardNumber: '1234414141',
- cardHolder: 'Nikolaj',
- expiryDate: '',
- cvc: '212',
- cardType: CardType.visa),
digitalCard: true)),
expect: () => [
OverviewLoaded(
@@ -151,7 +131,6 @@ void main() {
Booking(
id: '1',
status: BookingStatus.current,
- userId: '1',
roomNumber: '',
startDate: DateTime(2021, 10, 10),
endDate: DateTime(2021, 10, 10),
@@ -162,14 +141,8 @@ void main() {
children: 2,
adults: 2,
hotelCode: '',
- booker: '',
+ booker: const Guest(name: "name", id: "id"),
bookingDate: DateTime(2021, 10, 10),
- paymentDetails: const PaymentDetails(
- cardNumber: '1234414141',
- cardHolder: 'Nikolaj',
- expiryDate: '',
- cvc: '212',
- cardType: CardType.visa),
digitalCard: true)
],
past: const [],
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 38185a48..820a3223 100644
--- a/comwell_key_app/test/overview_test/overview_repository_test.dart
+++ b/comwell_key_app/test/overview_test/overview_repository_test.dart
@@ -1,3 +1,4 @@
+import 'package:comwell_key_app/overview/models/guest.dart';
import 'package:comwell_key_app/overview/models/payment_details.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
@@ -22,7 +23,6 @@ void main() {
Booking(
id: '1',
status: BookingStatus.current,
- userId: userId,
roomNumber: '101',
startDate: DateTime.now(),
endDate: DateTime.now().add(const Duration(days: 1)),
@@ -33,15 +33,8 @@ void main() {
children: 2,
adults: 2,
hotelCode: 'H001',
- booker: 'John Doe',
+ booker: const Guest(name: "name", id: userId),
bookingDate: DateTime.now(),
- paymentDetails: const PaymentDetails(
- cardNumber: '1234567890123456',
- cardHolder: 'John Doe',
- expiryDate: '12/23',
- cvc: '123',
- cardType: CardType.visa,
- ),
digitalCard: true,
),
],
@@ -65,7 +58,6 @@ void main() {
final booking = Booking(
id: '1',
status: BookingStatus.current,
- userId: '1',
roomNumber: '101',
startDate: DateTime.now(),
confirmationId: "",
@@ -76,15 +68,8 @@ void main() {
children: 2,
adults: 2,
hotelCode: 'H001',
- booker: 'John Doe',
+ booker: const Guest(name: lastName, id: "id"),
bookingDate: DateTime.now(),
- paymentDetails: const PaymentDetails(
- cardNumber: '1234567890123456',
- cardHolder: 'John Doe',
- expiryDate: '12/23',
- cvc: '123',
- cardType: CardType.visa,
- ),
digitalCard: true,
);