Refactor booking system: replace individual parameters with LoadBookableSpacesParam for improved clarity and maintainability

This commit is contained in:
mohammad
2025-07-10 10:56:10 +03:00
parent 2d16bda61d
commit 3e95bf4473
6 changed files with 244 additions and 199 deletions

View File

@ -1,6 +1,8 @@
import 'dart:async';
import 'package:meta/meta.dart';
import 'package:syncrow_web/pages/access_management/booking_system/domain/models/paginated_bookable_spaces.dart';
import 'package:syncrow_web/pages/access_management/booking_system/domain/services/booking_system_service.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/params/load_communities_param.dart';
class DebouncedBookingSystemService implements BookingSystemService {
final BookingSystemService _inner;
@ -9,11 +11,6 @@ class DebouncedBookingSystemService implements BookingSystemService {
Timer? _debounceTimer;
Completer<PaginatedBookableSpaces>? _lastCompleter;
int? _lastPage;
int? _lastSize;
bool? _lastIncludeSpaces;
String? _lastSearch;
DebouncedBookingSystemService(
this._inner, {
this.debounceDuration = const Duration(milliseconds: 500),
@ -21,27 +18,20 @@ class DebouncedBookingSystemService implements BookingSystemService {
@override
Future<PaginatedBookableSpaces> getBookableSpaces({
required int page,
required int size,
required String search,
required LoadCommunitiesParam param,
}) {
_debounceTimer?.cancel();
_lastCompleter?.completeError(StateError("Cancelled by new search"));
if (_lastCompleter != null && !_lastCompleter!.isCompleted) {
_lastCompleter!
.completeError(StateError("Cancelled by new search"));
}
final completer = Completer<PaginatedBookableSpaces>();
_lastCompleter = completer;
_lastPage = page;
_lastSize = size;
_lastSearch = search;
_debounceTimer = Timer(debounceDuration, () async {
try {
final result = await _inner.getBookableSpaces(
page: _lastPage!,
size: _lastSize!,
search: _lastSearch!,
);
final result = await _inner.getBookableSpaces(param: param);
if (!completer.isCompleted) {
completer.complete(result);
}