6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 7941bc83
Changed files
.../lib/.generated/database/comwell_db.g.dart | 347 ++++++++++++++++++++- .../database/daos/hotel_information_dao.g.dart | 9 + .../hotel_information/models/addon_upgrade.g.dart | 29 ++ .../hotel_information/models/hotel.g.dart | 19 +- .../hotel_information/models/room_facility.g.dart | 20 ++ .../hotel_information/models/room_type.g.dart | 29 ++ comwell_key_app/lib/database/comwell_db.dart | 6 +- .../lib/database/daos/hotel_information_dao.dart | 66 ++++ .../database/tables/hotel_information_table.dart | 8 + .../hotel_information/models/addon_upgrade.dart | 28 ++ .../lib/hotel_information/models/hotel.dart | 10 +- .../hotel_information/models/room_facility.dart | 20 ++ .../lib/hotel_information/models/room_type.dart | 27 ++ .../repository/hotel_information_repository.dart | 28 +- comwell_key_app/lib/services/api.dart | 28 +- 15 files changed, 639 insertions(+), 35 deletions(-)
Diff
diff --git a/comwell_key_app/lib/.generated/database/comwell_db.g.dart b/comwell_key_app/lib/.generated/database/comwell_db.g.dart
index 0879f5b0..c74ddc89 100644
--- a/comwell_key_app/lib/.generated/database/comwell_db.g.dart
+++ b/comwell_key_app/lib/.generated/database/comwell_db.g.dart
@@ -807,6 +807,202 @@ class UpsaleEntityCompanion extends UpdateCompanion<UpsaleDb> {
}
}
+class $HotelInformationEntityTable extends HotelInformationEntity
+ with TableInfo<$HotelInformationEntityTable, HotelInformationDb> {
+ @override
+ final GeneratedDatabase attachedDatabase;
+ final String? _alias;
+ $HotelInformationEntityTable(this.attachedDatabase, [this._alias]);
+ static const VerificationMeta _hotelCodeMeta =
+ const VerificationMeta('hotelCode');
+ @override
+ late final GeneratedColumn<String> hotelCode = GeneratedColumn<String>(
+ 'hotel_code', aliasedName, false,
+ type: DriftSqlType.string,
+ requiredDuringInsert: true,
+ defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE'));
+ static const VerificationMeta _jsonMeta = const VerificationMeta('json');
+ @override
+ late final GeneratedColumn<String> json = GeneratedColumn<String>(
+ 'json', aliasedName, false,
+ type: DriftSqlType.string, requiredDuringInsert: true);
+ @override
+ List<GeneratedColumn> get $columns => [hotelCode, json];
+ @override
+ String get aliasedName => _alias ?? actualTableName;
+ @override
+ String get actualTableName => $name;
+ static const String $name = 'hotel_information_entity';
+ @override
+ VerificationContext validateIntegrity(Insertable<HotelInformationDb> instance,
+ {bool isInserting = false}) {
+ final context = VerificationContext();
+ final data = instance.toColumns(true);
+ if (data.containsKey('hotel_code')) {
+ context.handle(_hotelCodeMeta,
+ hotelCode.isAcceptableOrUnknown(data['hotel_code']!, _hotelCodeMeta));
+ } else if (isInserting) {
+ context.missing(_hotelCodeMeta);
+ }
+ if (data.containsKey('json')) {
+ context.handle(
+ _jsonMeta, json.isAcceptableOrUnknown(data['json']!, _jsonMeta));
+ } else if (isInserting) {
+ context.missing(_jsonMeta);
+ }
+ return context;
+ }
+
+ @override
+ Set<GeneratedColumn> get $primaryKey => const {};
+ @override
+ HotelInformationDb map(Map<String, dynamic> data, {String? tablePrefix}) {
+ final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
+ return HotelInformationDb(
+ hotelCode: attachedDatabase.typeMapping
+ .read(DriftSqlType.string, data['${effectivePrefix}hotel_code'])!,
+ json: attachedDatabase.typeMapping
+ .read(DriftSqlType.string, data['${effectivePrefix}json'])!,
+ );
+ }
+
+ @override
+ $HotelInformationEntityTable createAlias(String alias) {
+ return $HotelInformationEntityTable(attachedDatabase, alias);
+ }
+}
+
+class HotelInformationDb extends DataClass
+ implements Insertable<HotelInformationDb> {
+ final String hotelCode;
+ final String json;
+ const HotelInformationDb({required this.hotelCode, required this.json});
+ @override
+ Map<String, Expression> toColumns(bool nullToAbsent) {
+ final map = <String, Expression>{};
+ map['hotel_code'] = Variable<String>(hotelCode);
+ map['json'] = Variable<String>(json);
+ return map;
+ }
+
+ HotelInformationEntityCompanion toCompanion(bool nullToAbsent) {
+ return HotelInformationEntityCompanion(
+ hotelCode: Value(hotelCode),
+ json: Value(json),
+ );
+ }
+
+ factory HotelInformationDb.fromJson(Map<String, dynamic> json,
+ {ValueSerializer? serializer}) {
+ serializer ??= driftRuntimeOptions.defaultSerializer;
+ return HotelInformationDb(
+ hotelCode: serializer.fromJson<String>(json['hotelCode']),
+ json: serializer.fromJson<String>(json['json']),
+ );
+ }
+ @override
+ Map<String, dynamic> toJson({ValueSerializer? serializer}) {
+ serializer ??= driftRuntimeOptions.defaultSerializer;
+ return <String, dynamic>{
+ 'hotelCode': serializer.toJson<String>(hotelCode),
+ 'json': serializer.toJson<String>(json),
+ };
+ }
+
+ HotelInformationDb copyWith({String? hotelCode, String? json}) =>
+ HotelInformationDb(
+ hotelCode: hotelCode ?? this.hotelCode,
+ json: json ?? this.json,
+ );
+ HotelInformationDb copyWithCompanion(HotelInformationEntityCompanion data) {
+ return HotelInformationDb(
+ hotelCode: data.hotelCode.present ? data.hotelCode.value : this.hotelCode,
+ json: data.json.present ? data.json.value : this.json,
+ );
+ }
+
+ @override
+ String toString() {
+ return (StringBuffer('HotelInformationDb(')
+ ..write('hotelCode: $hotelCode, ')
+ ..write('json: $json')
+ ..write(')'))
+ .toString();
+ }
+
+ @override
+ int get hashCode => Object.hash(hotelCode, json);
+ @override
+ bool operator ==(Object other) =>
+ identical(this, other) ||
+ (other is HotelInformationDb &&
+ other.hotelCode == this.hotelCode &&
+ other.json == this.json);
+}
+
+class HotelInformationEntityCompanion
+ extends UpdateCompanion<HotelInformationDb> {
+ final Value<String> hotelCode;
+ final Value<String> json;
+ final Value<int> rowid;
+ const HotelInformationEntityCompanion({
+ this.hotelCode = const Value.absent(),
+ this.json = const Value.absent(),
+ this.rowid = const Value.absent(),
+ });
+ HotelInformationEntityCompanion.insert({
+ required String hotelCode,
+ required String json,
+ this.rowid = const Value.absent(),
+ }) : hotelCode = Value(hotelCode),
+ json = Value(json);
+ static Insertable<HotelInformationDb> custom({
+ Expression<String>? hotelCode,
+ Expression<String>? json,
+ Expression<int>? rowid,
+ }) {
+ return RawValuesInsertable({
+ if (hotelCode != null) 'hotel_code': hotelCode,
+ if (json != null) 'json': json,
+ if (rowid != null) 'rowid': rowid,
+ });
+ }
+
+ HotelInformationEntityCompanion copyWith(
+ {Value<String>? hotelCode, Value<String>? json, Value<int>? rowid}) {
+ return HotelInformationEntityCompanion(
+ hotelCode: hotelCode ?? this.hotelCode,
+ json: json ?? this.json,
+ rowid: rowid ?? this.rowid,
+ );
+ }
+
+ @override
+ Map<String, Expression> toColumns(bool nullToAbsent) {
+ final map = <String, Expression>{};
+ if (hotelCode.present) {
+ map['hotel_code'] = Variable<String>(hotelCode.value);
+ }
+ if (json.present) {
+ map['json'] = Variable<String>(json.value);
+ }
+ if (rowid.present) {
+ map['rowid'] = Variable<int>(rowid.value);
+ }
+ return map;
+ }
+
+ @override
+ String toString() {
+ return (StringBuffer('HotelInformationEntityCompanion(')
+ ..write('hotelCode: $hotelCode, ')
+ ..write('json: $json, ')
+ ..write('rowid: $rowid')
+ ..write(')'))
+ .toString();
+ }
+}
+
abstract class _$ComwellDatabase extends GeneratedDatabase {
_$ComwellDatabase(QueryExecutor e) : super(e);
$ComwellDatabaseManager get managers => $ComwellDatabaseManager(this);
@@ -815,17 +1011,26 @@ abstract class _$ComwellDatabase extends GeneratedDatabase {
late final $NotificationPermissionEntityTable notificationPermissionEntity =
$NotificationPermissionEntityTable(this);
late final $UpsaleEntityTable upsaleEntity = $UpsaleEntityTable(this);
+ late final $HotelInformationEntityTable hotelInformationEntity =
+ $HotelInformationEntityTable(this);
late final BookingsDao bookingsDao = BookingsDao(this as ComwellDatabase);
late final UserDAO userDAO = UserDAO(this as ComwellDatabase);
late final NotificationPermissionDAO notificationPermissionDAO =
NotificationPermissionDAO(this as ComwellDatabase);
late final UpsalesDAO upsalesDAO = UpsalesDAO(this as ComwellDatabase);
+ late final HotelInformationDAO hotelInformationDAO =
+ HotelInformationDAO(this as ComwellDatabase);
@override
Iterable<TableInfo<Table, Object?>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override
- List<DatabaseSchemaEntity> get allSchemaEntities =>
- [bookingEntity, userEntity, notificationPermissionEntity, upsaleEntity];
+ List<DatabaseSchemaEntity> get allSchemaEntities => [
+ bookingEntity,
+ userEntity,
+ notificationPermissionEntity,
+ upsaleEntity,
+ hotelInformationEntity
+ ];
}
typedef $$BookingEntityTableCreateCompanionBuilder = BookingEntityCompanion
@@ -1350,6 +1555,141 @@ typedef $$UpsaleEntityTableProcessedTableManager = ProcessedTableManager<
(UpsaleDb, BaseReferences<_$ComwellDatabase, $UpsaleEntityTable, UpsaleDb>),
UpsaleDb,
PrefetchHooks Function()>;
+typedef $$HotelInformationEntityTableCreateCompanionBuilder
+ = HotelInformationEntityCompanion Function({
+ required String hotelCode,
+ required String json,
+ Value<int> rowid,
+});
+typedef $$HotelInformationEntityTableUpdateCompanionBuilder
+ = HotelInformationEntityCompanion Function({
+ Value<String> hotelCode,
+ Value<String> json,
+ Value<int> rowid,
+});
+
+class $$HotelInformationEntityTableFilterComposer
+ extends Composer<_$ComwellDatabase, $HotelInformationEntityTable> {
+ $$HotelInformationEntityTableFilterComposer({
+ required super.$db,
+ required super.$table,
+ super.joinBuilder,
+ super.$addJoinBuilderToRootComposer,
+ super.$removeJoinBuilderFromRootComposer,
+ });
+ ColumnFilters<String> get hotelCode => $composableBuilder(
+ column: $table.hotelCode, builder: (column) => ColumnFilters(column));
+
+ ColumnFilters<String> get json => $composableBuilder(
+ column: $table.json, builder: (column) => ColumnFilters(column));
+}
+
+class $$HotelInformationEntityTableOrderingComposer
+ extends Composer<_$ComwellDatabase, $HotelInformationEntityTable> {
+ $$HotelInformationEntityTableOrderingComposer({
+ required super.$db,
+ required super.$table,
+ super.joinBuilder,
+ super.$addJoinBuilderToRootComposer,
+ super.$removeJoinBuilderFromRootComposer,
+ });
+ ColumnOrderings<String> get hotelCode => $composableBuilder(
+ column: $table.hotelCode, builder: (column) => ColumnOrderings(column));
+
+ ColumnOrderings<String> get json => $composableBuilder(
+ column: $table.json, builder: (column) => ColumnOrderings(column));
+}
+
+class $$HotelInformationEntityTableAnnotationComposer
+ extends Composer<_$ComwellDatabase, $HotelInformationEntityTable> {
+ $$HotelInformationEntityTableAnnotationComposer({
+ required super.$db,
+ required super.$table,
+ super.joinBuilder,
+ super.$addJoinBuilderToRootComposer,
+ super.$removeJoinBuilderFromRootComposer,
+ });
+ GeneratedColumn<String> get hotelCode =>
+ $composableBuilder(column: $table.hotelCode, builder: (column) => column);
+
+ GeneratedColumn<String> get json =>
+ $composableBuilder(column: $table.json, builder: (column) => column);
+}
+
+class $$HotelInformationEntityTableTableManager extends RootTableManager<
+ _$ComwellDatabase,
+ $HotelInformationEntityTable,
+ HotelInformationDb,
+ $$HotelInformationEntityTableFilterComposer,
+ $$HotelInformationEntityTableOrderingComposer,
+ $$HotelInformationEntityTableAnnotationComposer,
+ $$HotelInformationEntityTableCreateCompanionBuilder,
+ $$HotelInformationEntityTableUpdateCompanionBuilder,
+ (
+ HotelInformationDb,
+ BaseReferences<_$ComwellDatabase, $HotelInformationEntityTable,
+ HotelInformationDb>
+ ),
+ HotelInformationDb,
+ PrefetchHooks Function()> {
+ $$HotelInformationEntityTableTableManager(
+ _$ComwellDatabase db, $HotelInformationEntityTable table)
+ : super(TableManagerState(
+ db: db,
+ table: table,
+ createFilteringComposer: () =>
+ $$HotelInformationEntityTableFilterComposer(
+ $db: db, $table: table),
+ createOrderingComposer: () =>
+ $$HotelInformationEntityTableOrderingComposer(
+ $db: db, $table: table),
+ createComputedFieldComposer: () =>
+ $$HotelInformationEntityTableAnnotationComposer(
+ $db: db, $table: table),
+ updateCompanionCallback: ({
+ Value<String> hotelCode = const Value.absent(),
+ Value<String> json = const Value.absent(),
+ Value<int> rowid = const Value.absent(),
+ }) =>
+ HotelInformationEntityCompanion(
+ hotelCode: hotelCode,
+ json: json,
+ rowid: rowid,
+ ),
+ createCompanionCallback: ({
+ required String hotelCode,
+ required String json,
+ Value<int> rowid = const Value.absent(),
+ }) =>
+ HotelInformationEntityCompanion.insert(
+ hotelCode: hotelCode,
+ json: json,
+ rowid: rowid,
+ ),
+ withReferenceMapper: (p0) => p0
+ .map((e) => (e.readTable(table), BaseReferences(db, table, e)))
+ .toList(),
+ prefetchHooksCallback: null,
+ ));
+}
+
+typedef $$HotelInformationEntityTableProcessedTableManager
+ = ProcessedTableManager<
+ _$ComwellDatabase,
+ $HotelInformationEntityTable,
+ HotelInformationDb,
+ $$HotelInformationEntityTableFilterComposer,
+ $$HotelInformationEntityTableOrderingComposer,
+ $$HotelInformationEntityTableAnnotationComposer,
+ $$HotelInformationEntityTableCreateCompanionBuilder,
+ $$HotelInformationEntityTableUpdateCompanionBuilder,
+ (
+ HotelInformationDb,
+ BaseReferences<_$ComwellDatabase, $HotelInformationEntityTable,
+ HotelInformationDb>
+ ),
+ HotelInformationDb,
+ PrefetchHooks Function()>;
class $ComwellDatabaseManager {
final _$ComwellDatabase _db;
@@ -1364,4 +1704,7 @@ class $ComwellDatabaseManager {
_db, _db.notificationPermissionEntity);
$$UpsaleEntityTableTableManager get upsaleEntity =>
$$UpsaleEntityTableTableManager(_db, _db.upsaleEntity);
+ $$HotelInformationEntityTableTableManager get hotelInformationEntity =>
+ $$HotelInformationEntityTableTableManager(
+ _db, _db.hotelInformationEntity);
}
diff --git a/comwell_key_app/lib/.generated/database/daos/hotel_information_dao.g.dart b/comwell_key_app/lib/.generated/database/daos/hotel_information_dao.g.dart
new file mode 100644
index 00000000..77bdb306
--- /dev/null
+++ b/comwell_key_app/lib/.generated/database/daos/hotel_information_dao.g.dart
@@ -0,0 +1,9 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of '../../../database/daos/hotel_information_dao.dart';
+
+// ignore_for_file: type=lint
+mixin _$HotelInformationDAOMixin on DatabaseAccessor<ComwellDatabase> {
+ $HotelInformationEntityTable get hotelInformationEntity =>
+ attachedDatabase.hotelInformationEntity;
+}
diff --git a/comwell_key_app/lib/.generated/hotel_information/models/addon_upgrade.g.dart b/comwell_key_app/lib/.generated/hotel_information/models/addon_upgrade.g.dart
new file mode 100644
index 00000000..c5e12da3
--- /dev/null
+++ b/comwell_key_app/lib/.generated/hotel_information/models/addon_upgrade.g.dart
@@ -0,0 +1,29 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of '../../../hotel_information/models/addon_upgrade.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+AddonUpgrade _$AddonUpgradeFromJson(Map json) => AddonUpgrade(
+ id: json['id'] as String,
+ name: json['name'] as String,
+ images:
+ (json['images'] as List<dynamic>).map((e) => e as String).toList(),
+ description: json['description'] as String,
+ isService: json['isService'] as bool,
+ onlyAvailableBeforeCheckin: json['onlyAvailableBeforeCheckin'] as bool,
+ isPopular: json['isPopular'] as bool,
+ );
+
+Map<String, dynamic> _$AddonUpgradeToJson(AddonUpgrade instance) =>
+ <String, dynamic>{
+ 'id': instance.id,
+ 'name': instance.name,
+ 'images': instance.images,
+ 'description': instance.description,
+ 'isService': instance.isService,
+ 'onlyAvailableBeforeCheckin': instance.onlyAvailableBeforeCheckin,
+ 'isPopular': instance.isPopular,
+ };
diff --git a/comwell_key_app/lib/.generated/hotel_information/models/hotel.g.dart b/comwell_key_app/lib/.generated/hotel_information/models/hotel.g.dart
index 690caff7..79d101fc 100644
--- a/comwell_key_app/lib/.generated/hotel_information/models/hotel.g.dart
+++ b/comwell_key_app/lib/.generated/hotel_information/models/hotel.g.dart
@@ -7,6 +7,7 @@ part of '../../../hotel_information/models/hotel.dart';
// **************************************************************************
Hotel _$HotelFromJson(Map json) => Hotel(
+ updateDate: json['updateDate'] as String,
hotelCode: json['hotelCode'] as String,
hotelName: json['hotelName'] as String,
address: json['address'] as String,
@@ -15,13 +16,19 @@ Hotel _$HotelFromJson(Map json) => Hotel(
image: json['image'] as String,
digitalCheckIn: json['digitalCheckIn'] as bool,
facilities: (json['facilities'] as List<dynamic>)
- .map((e) => Facility.fromJson(Map<String, dynamic>.from(e as Map))),
- roomTypes: (json['roomTypes'] as List<dynamic>).map((e) => e as String),
- addonUpgrades:
- (json['addonUpgrades'] as List<dynamic>).map((e) => e as String),
+ .map((e) => Facility.fromJson(Map<String, dynamic>.from(e as Map)))
+ .toList(),
+ roomTypes: (json['roomTypes'] as List<dynamic>)
+ .map((e) => RoomType.fromJson(Map<String, dynamic>.from(e as Map)))
+ .toList(),
+ addonUpgrades: (json['addonUpgrades'] as List<dynamic>)
+ .map(
+ (e) => AddonUpgrade.fromJson(Map<String, dynamic>.from(e as Map)))
+ .toList(),
);
Map<String, dynamic> _$HotelToJson(Hotel instance) => <String, dynamic>{
+ 'updateDate': instance.updateDate,
'hotelCode': instance.hotelCode,
'hotelName': instance.hotelName,
'address': instance.address,
@@ -30,6 +37,6 @@ Map<String, dynamic> _$HotelToJson(Hotel instance) => <String, dynamic>{
'image': instance.image,
'digitalCheckIn': instance.digitalCheckIn,
'facilities': instance.facilities.map((e) => e.toJson()).toList(),
- 'roomTypes': instance.roomTypes.toList(),
- 'addonUpgrades': instance.addonUpgrades.toList(),
+ 'roomTypes': instance.roomTypes.map((e) => e.toJson()).toList(),
+ 'addonUpgrades': instance.addonUpgrades.map((e) => e.toJson()).toList(),
};
diff --git a/comwell_key_app/lib/.generated/hotel_information/models/room_facility.g.dart b/comwell_key_app/lib/.generated/hotel_information/models/room_facility.g.dart
new file mode 100644
index 00000000..79e6382d
--- /dev/null
+++ b/comwell_key_app/lib/.generated/hotel_information/models/room_facility.g.dart
@@ -0,0 +1,20 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of '../../../hotel_information/models/room_facility.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+RoomFacility _$RoomFacilityFromJson(Map json) => RoomFacility(
+ name: json['name'] as String,
+ icon: json['icon'] as String,
+ groupName: json['groupName'] as String,
+ );
+
+Map<String, dynamic> _$RoomFacilityToJson(RoomFacility instance) =>
+ <String, dynamic>{
+ 'name': instance.name,
+ 'icon': instance.icon,
+ 'groupName': instance.groupName,
+ };
diff --git a/comwell_key_app/lib/.generated/hotel_information/models/room_type.g.dart b/comwell_key_app/lib/.generated/hotel_information/models/room_type.g.dart
new file mode 100644
index 00000000..5a0184d7
--- /dev/null
+++ b/comwell_key_app/lib/.generated/hotel_information/models/room_type.g.dart
@@ -0,0 +1,29 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of '../../../hotel_information/models/room_type.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+RoomType _$RoomTypeFromJson(Map json) => RoomType(
+ id: json['id'] as String,
+ name: json['name'] as String,
+ description: json['description'] as String,
+ images:
+ (json['images'] as List<dynamic>).map((e) => e as String).toList(),
+ facilities: (json['facilities'] as List<dynamic>)
+ .map(
+ (e) => RoomFacility.fromJson(Map<String, dynamic>.from(e as Map)))
+ .toList(),
+ roomTypeSize: (json['roomTypeSize'] as num).toInt(),
+ );
+
+Map<String, dynamic> _$RoomTypeToJson(RoomType instance) => <String, dynamic>{
+ 'id': instance.id,
+ 'name': instance.name,
+ 'description': instance.description,
+ 'images': instance.images,
+ 'facilities': instance.facilities.map((e) => e.toJson()).toList(),
+ 'roomTypeSize': instance.roomTypeSize,
+ };
diff --git a/comwell_key_app/lib/database/comwell_db.dart b/comwell_key_app/lib/database/comwell_db.dart
index d7c2d620..9456c1c6 100644
--- a/comwell_key_app/lib/database/comwell_db.dart
+++ b/comwell_key_app/lib/database/comwell_db.dart
@@ -2,6 +2,7 @@ import 'dart:io';
import 'package:comwell_key_app/database/daos/notifications_dao.dart';
import 'package:comwell_key_app/database/tables/booking_table.dart';
+import 'package:comwell_key_app/database/tables/hotel_information_table.dart';
import 'package:comwell_key_app/database/tables/notification_table.dart';
import 'package:comwell_key_app/database/tables/user_table.dart';
import 'package:comwell_key_app/database/tables/upsale_table.dart';
@@ -14,6 +15,7 @@ import 'package:sqlite3/sqlite3.dart';
import 'package:uuid/uuid.dart' as uuid;
import 'daos/bookings_dao.dart';
+import 'daos/hotel_information_dao.dart';
import 'daos/user_dao.dart';
import 'daos/upsales_dao.dart';
@@ -22,8 +24,8 @@ part '../.generated/database/comwell_db.g.dart';
final secureStorage = SecureStorage();
@DriftDatabase(
- tables: [BookingEntity, UserEntity, NotificationPermissionEntity, UpsaleEntity],
- daos: [BookingsDao, UserDAO, NotificationPermissionDAO, UpsalesDAO])
+ tables: [BookingEntity, UserEntity, NotificationPermissionEntity, UpsaleEntity, HotelInformationEntity],
+ daos: [BookingsDao, UserDAO, NotificationPermissionDAO, UpsalesDAO, HotelInformationDAO])
class ComwellDatabase extends _$ComwellDatabase {
static const String _cipherKey = "sql_cipher";
static const String _dbFileName = "comwell.db.enc";
diff --git a/comwell_key_app/lib/database/daos/hotel_information_dao.dart b/comwell_key_app/lib/database/daos/hotel_information_dao.dart
new file mode 100644
index 00000000..651a7b83
--- /dev/null
+++ b/comwell_key_app/lib/database/daos/hotel_information_dao.dart
@@ -0,0 +1,66 @@
+import 'dart:convert';
+
+import 'package:comwell_key_app/database/comwell_db.dart';
+import 'package:comwell_key_app/hotel_information/models/hotel.dart';
+import 'package:comwell_key_app/utils/json.dart';
+import 'package:drift/drift.dart';
+
+import '../tables/hotel_information_table.dart';
+
+part '../../.generated/database/daos/hotel_information_dao.g.dart';
+
+@DriftAccessor(tables: [HotelInformationEntity])
+class HotelInformationDAO extends DatabaseAccessor<ComwellDatabase>
+ with _$HotelInformationDAOMixin {
+ HotelInformationDAO(super.attachedDatabase);
+
+ /// Get hotel information by hotel code
+ Future<Hotel> getHotelByCode(String hotelCode) async {
+ final query = select(hotelInformationEntity)
+ ..where((tbl) => tbl.hotelCode.equals(hotelCode));
+ final result = await query.getSingle();
+ final json = jsonDecode(result.json) as Json;
+ return Hotel.fromJson(json);
+ }
+
+ /// Save hotel information to database
+ Future<void> saveHotel(Hotel hotel) async {
+ final json = jsonEncode(hotel.toJson());
+ final entity = HotelInformationEntityCompanion.insert(
+ hotelCode: hotel.hotelCode,
+ json: json,
+ );
+ await batch((batch) => batch.insert(hotelInformationEntity, entity,
+ mode: InsertMode.insertOrReplace));
+ }
+
+ /// Watch hotel information changes
+ Stream<Hotel?> watchHotelByCode(String hotelCode) {
+ return (select(hotelInformationEntity)
+ ..where((tbl) => tbl.hotelCode.equals(hotelCode)))
+ .watchSingleOrNull()
+ .map((result) {
+ if (result == null) {
+ return null;
+ }
+ final json = jsonDecode(result.json) as Json;
+ return Hotel.fromJson(json);
+ });
+ }
+
+ /// Delete hotel information by hotel code
+ Future<void> deleteHotelByCode(String hotelCode) async {
+ await (delete(hotelInformationEntity)
+ ..where((tbl) => tbl.hotelCode.equals(hotelCode)))
+ .go();
+ }
+
+ /// Get all hotels
+ Future<List<Hotel>> getAllHotels() async {
+ final results = await select(hotelInformationEntity).get();
+ return results.map((result) {
+ final json = jsonDecode(result.json) as Json;
+ return Hotel.fromJson(json);
+ }).toList();
+ }
+}
diff --git a/comwell_key_app/lib/database/tables/hotel_information_table.dart b/comwell_key_app/lib/database/tables/hotel_information_table.dart
new file mode 100644
index 00000000..dd84462a
--- /dev/null
+++ b/comwell_key_app/lib/database/tables/hotel_information_table.dart
@@ -0,0 +1,8 @@
+import 'package:drift/drift.dart';
+
+@DataClassName('HotelInformationDb')
+class HotelInformationEntity extends Table {
+ TextColumn get hotelCode => text().unique()();
+
+ TextColumn get json => text()();
+}
diff --git a/comwell_key_app/lib/hotel_information/models/addon_upgrade.dart b/comwell_key_app/lib/hotel_information/models/addon_upgrade.dart
new file mode 100644
index 00000000..89fe2eb0
--- /dev/null
+++ b/comwell_key_app/lib/hotel_information/models/addon_upgrade.dart
@@ -0,0 +1,28 @@
+import 'package:comwell_key_app/utils/json.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+part '../../.generated/hotel_information/models/addon_upgrade.g.dart';
+
+@JsonSerializable()
+class AddonUpgrade {
+ final String id;
+ final String name;
+ final List<String> images;
+ final String description;
+ final bool isService;
+ final bool onlyAvailableBeforeCheckin;
+ final bool isPopular;
+
+ AddonUpgrade({
+ required this.id,
+ required this.name,
+ required this.images,
+ required this.description,
+ required this.isService,
+ required this.onlyAvailableBeforeCheckin,
+ required this.isPopular,
+ });
+
+ factory AddonUpgrade.fromJson(Json json) => _$AddonUpgradeFromJson(json);
+ Json toJson() => _$AddonUpgradeToJson(this);
+}
diff --git a/comwell_key_app/lib/hotel_information/models/hotel.dart b/comwell_key_app/lib/hotel_information/models/hotel.dart
index 98cf397c..eb3b2810 100644
--- a/comwell_key_app/lib/hotel_information/models/hotel.dart
+++ b/comwell_key_app/lib/hotel_information/models/hotel.dart
@@ -1,4 +1,6 @@
import 'package:comwell_key_app/hotel_information/models/facilities.dart';
+import 'package:comwell_key_app/hotel_information/models/room_type.dart';
+import 'package:comwell_key_app/hotel_information/models/addon_upgrade.dart';
import 'package:comwell_key_app/utils/json.dart';
import 'package:json_annotation/json_annotation.dart';
@@ -6,6 +8,7 @@ part '../../.generated/hotel_information/models/hotel.g.dart';
@JsonSerializable()
class Hotel {
+ final String updateDate;
final String hotelCode;
final String hotelName;
final String address;
@@ -13,11 +16,12 @@ class Hotel {
final String country;
final String image;
final bool digitalCheckIn;
- final Iterable<Facility> facilities;
- final Iterable<String> roomTypes;
- final Iterable<String> addonUpgrades;
+ final List<Facility> facilities;
+ final List<RoomType> roomTypes;
+ final List<AddonUpgrade> addonUpgrades;
Hotel({
+ required this.updateDate,
required this.hotelCode,
required this.hotelName,
required this.address,
diff --git a/comwell_key_app/lib/hotel_information/models/room_facility.dart b/comwell_key_app/lib/hotel_information/models/room_facility.dart
new file mode 100644
index 00000000..e17828bc
--- /dev/null
+++ b/comwell_key_app/lib/hotel_information/models/room_facility.dart
@@ -0,0 +1,20 @@
+import 'package:comwell_key_app/utils/json.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+part '../../.generated/hotel_information/models/room_facility.g.dart';
+
+@JsonSerializable()
+class RoomFacility {
+ final String name;
+ final String icon;
+ final String groupName;
+
+ RoomFacility({
+ required this.name,
+ required this.icon,
+ required this.groupName,
+ });
+
+ factory RoomFacility.fromJson(Json json) => _$RoomFacilityFromJson(json);
+ Json toJson() => _$RoomFacilityToJson(this);
+}
diff --git a/comwell_key_app/lib/hotel_information/models/room_type.dart b/comwell_key_app/lib/hotel_information/models/room_type.dart
new file mode 100644
index 00000000..7c706cf9
--- /dev/null
+++ b/comwell_key_app/lib/hotel_information/models/room_type.dart
@@ -0,0 +1,27 @@
+import 'package:comwell_key_app/hotel_information/models/room_facility.dart';
+import 'package:comwell_key_app/utils/json.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+part '../../.generated/hotel_information/models/room_type.g.dart';
+
+@JsonSerializable()
+class RoomType {
+ final String id;
+ final String name;
+ final String description;
+ final List<String> images;
+ final List<RoomFacility> facilities;
+ final int roomTypeSize;
+
+ RoomType({
+ required this.id,
+ required this.name,
+ required this.description,
+ required this.images,
+ required this.facilities,
+ required this.roomTypeSize,
+ });
+
+ factory RoomType.fromJson(Json json) => _$RoomTypeFromJson(json);
+ Json toJson() => _$RoomTypeToJson(this);
+}
diff --git a/comwell_key_app/lib/hotel_information/repository/hotel_information_repository.dart b/comwell_key_app/lib/hotel_information/repository/hotel_information_repository.dart
index fd42d870..61a95653 100644
--- a/comwell_key_app/lib/hotel_information/repository/hotel_information_repository.dart
+++ b/comwell_key_app/lib/hotel_information/repository/hotel_information_repository.dart
@@ -1,20 +1,32 @@
+import 'package:comwell_key_app/database/comwell_db.dart';
import 'package:comwell_key_app/hotel_information/models/hotel.dart';
import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/utils/json.dart';
+import 'package:comwell_key_app/utils/locator.dart';
+import 'package:flutter/material.dart';
class HotelInformationRepository {
final api = Api();
-
+
Future<Hotel> fetchHotelInformation(String hotelCode) async {
try {
- final response = await api.getHotelInfo(hotelCode);
- final data = response.data as Json;
- final hotelInfo = Hotel.fromJson(data);
- return hotelInfo;
+ final hotel = await locator<ComwellDatabase>()
+ .hotelInformationDAO
+ .getHotelByCode(hotelCode);
+ debugPrint("Hotel information fetched from database: $hotel");
+ return hotel;
} catch (e) {
- throw Exception(e);
+ try {
+ final response = await api.getHotelInfo(hotelCode);
+ final data = response.data as Json;
+ final hotelInfo = Hotel.fromJson(data);
+ await locator<ComwellDatabase>().hotelInformationDAO.saveHotel(hotelInfo);
+ debugPrint("Hotel information saved to database: $hotelInfo");
+ return hotelInfo;
+ } catch (dbError) {
+ debugPrint("Database error while saving hotel information: $dbError");
+ rethrow;
+ }
}
}
}
-
-
diff --git a/comwell_key_app/lib/services/api.dart b/comwell_key_app/lib/services/api.dart
index a358e68f..dbae3047 100644
--- a/comwell_key_app/lib/services/api.dart
+++ b/comwell_key_app/lib/services/api.dart
@@ -67,17 +67,18 @@ class Api {
}
Future<dynamic> createAdyenSessionForCards() async {
- final body = {
+ final body = {
"returnUrl": ApiEndpoints.returnUrl,
};
final json = jsonEncode(body);
- final response =
- await dio.post<dynamic>(ApiEndpoints.createAdyenSessionForCards, data: json);
+ final response = await dio
+ .post<dynamic>(ApiEndpoints.createAdyenSessionForCards, data: json);
return response.data;
}
Future<dynamic> listAvailablePaymentMethods() async {
- final response = await dio.get<dynamic>(ApiEndpoints.listAvailablePaymentMethods);
+ final response =
+ await dio.get<dynamic>(ApiEndpoints.listAvailablePaymentMethods);
return response.data;
}
@@ -86,17 +87,19 @@ class Api {
"paymentMethod": paymentMethod,
};
final json = jsonEncode(body);
- final response = await dio.post<dynamic>(ApiEndpoints.storedPaymentMethods, data: json);
+ final response =
+ await dio.post<dynamic>(ApiEndpoints.storedPaymentMethods, data: json);
return response.data;
}
Future<dynamic> removePaymentMethod(String cardId) async {
- final response = await dio.delete<dynamic>("${ApiEndpoints.storedPaymentMethods}/$cardId");
+ final response = await dio
+ .delete<dynamic>("${ApiEndpoints.storedPaymentMethods}/$cardId");
return response.data;
}
- Future<Json> submitPayment(
- Json paymentResult, String shopperReference, String merchantAccount) async {
+ Future<Json> submitPayment(Json paymentResult, String shopperReference,
+ String merchantAccount) async {
final Json headers = {
"content-type": "application/json",
"x-API-key": dotenv.env["ADYEN_TEST_KEY"]
@@ -112,7 +115,7 @@ class Api {
};
data.addAll(paymentResult);
data.remove("storePaymentMethod");
- print("Data: $data");
+ print("Data: $data");
final response = await dio.post<Json>(ApiEndpoints.adyenPayments,
data: data,
options: Options(
@@ -123,9 +126,6 @@ class Api {
Future<Response<dynamic>> fetchProfileSettings() async {
final response = await dio.get<dynamic>(ApiEndpoints.getGuestProfile);
-
-
-
return response;
}
@@ -199,9 +199,9 @@ class Api {
Future<dynamic> getHotelInfo(String hotelCode) async {
final cultureString = _currentLocale.toString().replaceAll('_', '-');
- final url = '${ApiEndpoints.getHotelInfo}?hotelCode=$hotelCode&culture=$cultureString';
+ final url =
+ '${ApiEndpoints.getHotelInfo}?hotelCode=$hotelCode&culture=$cultureString';
final response = await dio.get<Json>(url);
-
return response;
}