diff --git a/lib/features/digital_guide_view/tabs/lodge/data/models/digital_guide_lodge.dart b/lib/features/digital_guide_view/tabs/lodge/data/models/digital_guide_lodge.dart new file mode 100644 index 00000000..7f69fa54 --- /dev/null +++ b/lib/features/digital_guide_view/tabs/lodge/data/models/digital_guide_lodge.dart @@ -0,0 +1,38 @@ +import "package:freezed_annotation/freezed_annotation.dart"; + +part "digital_guide_lodge.freezed.dart"; +part "digital_guide_lodge.g.dart"; + +@freezed +class DigitalGuideLodge with _$DigitalGuideLodge { + const factory DigitalGuideLodge({ + required int id, + required DigitalGuideTranslationsLodge translations, + @JsonKey(name: "images") required List? imagesIds, + }) = _DigitalGuideLodge; + + factory DigitalGuideLodge.fromJson(Map json) => + _$DigitalGuideLodgeFromJson(json); +} + +@freezed +class DigitalGuideTranslationsLodge with _$DigitalGuideTranslationsLodge { + const factory DigitalGuideTranslationsLodge({ + required DigitalGuideTranslationLodge pl, + }) = _DigitalGuideTranslationsLodge; + + factory DigitalGuideTranslationsLodge.fromJson(Map json) => + _$DigitalGuideTranslationsLodgeFromJson(json); +} + +@freezed +class DigitalGuideTranslationLodge with _$DigitalGuideTranslationLodge { + @JsonSerializable(fieldRename: FieldRename.snake) + const factory DigitalGuideTranslationLodge({ + required String location, + required String workingDaysAndHours, + required String comment, + }) = _DigitalGuideTranslationLodge; + factory DigitalGuideTranslationLodge.fromJson(Map json) => + _$DigitalGuideTranslationLodgeFromJson(json); +} diff --git a/lib/features/digital_guide_view/tabs/lodge/data/repository/lodges_repository.dart b/lib/features/digital_guide_view/tabs/lodge/data/repository/lodges_repository.dart new file mode 100644 index 00000000..748b1220 --- /dev/null +++ b/lib/features/digital_guide_view/tabs/lodge/data/repository/lodges_repository.dart @@ -0,0 +1,25 @@ +import "package:fast_immutable_collections/fast_immutable_collections.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; + +import "../../../../data/api/digital_guide_get_and_cache.dart"; +import "../../../../data/models/digital_guide_response.dart"; +import "../models/digital_guide_lodge.dart"; + +part "lodges_repository.g.dart"; + +@riverpod +Future> lodgesRepository( + Ref ref, + DigitalGuideResponse building, +) async { + final endpoint = "lodges/?building=${building.id}"; + return ref.getAndCacheDataFromDigitalGuide( + endpoint, + (List json) => json + .whereType>() + .map(DigitalGuideLodge.fromJson) + .toIList(), + onRetry: () => ref.invalidateSelf(), + ); +}