diff --git a/lib/pages/access_management/manage_bookable_spaces/data/dummy_bookable_spaces_service.dart b/lib/pages/access_management/manage_bookable_spaces/data/dummy_bookable_spaces_service.dart new file mode 100644 index 00000000..c3687119 --- /dev/null +++ b/lib/pages/access_management/manage_bookable_spaces/data/dummy_bookable_spaces_service.dart @@ -0,0 +1,60 @@ +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/bookable_spaces_params.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/bookable_spaces_service.dart'; +import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; + +class DummyBookableSpacesService implements BookableSpacesService { + @override + Future> load( + BookableSpacesParams param) async { + return PaginatedDataModel( + data: [ + BookableSpacemodel( + spaceName: 'space1', + spaceConfig: BookableSpaceConfig( + configUuid: 'uuid', + bookableDays: ['wed', 'saturday'], + availability: true, + bookingEndTime: '08:00 PM', + bookingStartTime: '5:00 PM', + cost: 6, + ), + spaceUuid: 'uuiiddd', + spaceVirtualAddress: 'idvirtual1', + ), + BookableSpacemodel( + spaceName: 'space2', + spaceConfig: BookableSpaceConfig( + configUuid: 'uuid', + bookableDays: ['wed', 'thur'], + availability: true, + bookingEndTime: '08:00 PM', + bookingStartTime: '5:00 PM', + cost: 6, + ), + spaceUuid: 'uuiiddd', + spaceVirtualAddress: 'idvirtual1', + ), + BookableSpacemodel( + spaceName: 'space3', + spaceConfig: BookableSpaceConfig( + configUuid: 'uuid', + bookableDays: ['wed', 'fri', 'tues'], + availability: true, + bookingEndTime: '08:00 PM', + bookingStartTime: '5:00 PM', + cost: 6, + ), + spaceUuid: 'uuiiddd', + spaceVirtualAddress: 'idvirtual1', + ) + ], + page: 1, + size: 1, + hasNext: false, + totalItems: 3, + totalPages: 1, + ); + } +} diff --git a/lib/pages/access_management/manage_bookable_spaces/data/dummy_non_nookable_spaces.dart b/lib/pages/access_management/manage_bookable_spaces/data/dummy_non_nookable_spaces.dart new file mode 100644 index 00000000..6f59e368 --- /dev/null +++ b/lib/pages/access_management/manage_bookable_spaces/data/dummy_non_nookable_spaces.dart @@ -0,0 +1,72 @@ +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/send_bookable_spaces_to_api_params.dart'; +import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; + +class DummyNonNookableSpaces implements NonBookableSpacesService { + @override + Future> load( + NonBookableSpacesParams params) { + return Future.value(PaginatedDataModel( + data: [ + BookableSpacemodel( + spaceName: 'space3', + spaceConfig: BookableSpaceConfig( + configUuid: 'uuid', + bookableDays: ['wed', 'saturday'], + availability: true, + bookingEndTime: '08:00 PM', + bookingStartTime: '5:00 PM', + cost: 6, + ), + spaceUuid: 'uuiiddd', + spaceVirtualAddress: 'idvirtual1', + ), + BookableSpacemodel( + spaceName: 'space3', + spaceConfig: BookableSpaceConfig( + configUuid: 'uuid', + bookableDays: ['wed', 'saturday', 'thuresday'], + availability: true, + bookingEndTime: '08:00 PM', + bookingStartTime: '5:00 PM', + cost: 5, + ), + spaceUuid: 'uuiiddd', + spaceVirtualAddress: 'idvirtual2', + ), + BookableSpacemodel( + spaceName: 'space3', + spaceConfig: BookableSpaceConfig( + configUuid: 'uuid', + bookableDays: [ + 'saturday', + 'sunday', + 'Monday', + 'tuesday', + 'wed', + 'thuresday' + ], + availability: true, + bookingEndTime: '08:00 PM', + bookingStartTime: '5:00 PM', + cost: 2, + ), + spaceUuid: 'uuiiddd', + spaceVirtualAddress: 'idvirtual3', + ) + ], + page: 1, + size: 1, + hasNext: false, + totalPages: 0, + totalItems: 0, + )); + } + + @override + Future sendBookableSpacesToApi( + SendBookableSpacesToApiParams params) async {} +} diff --git a/lib/pages/access_management/manage_bookable_spaces/data/remote_bookable_spaces_service.dart b/lib/pages/access_management/manage_bookable_spaces/data/remote_bookable_spaces_service.dart new file mode 100644 index 00000000..49563e45 --- /dev/null +++ b/lib/pages/access_management/manage_bookable_spaces/data/remote_bookable_spaces_service.dart @@ -0,0 +1,45 @@ +import 'package:dio/dio.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/bookable_spaces_params.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/bookable_spaces_service.dart'; +import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; +import 'package:syncrow_web/services/api/api_exception.dart'; +import 'package:syncrow_web/services/api/http_service.dart'; +import 'package:syncrow_web/utils/constants/api_const.dart'; + +class RemoteBookableSpacesService implements BookableSpacesService { + final HTTPService _httpService; + RemoteBookableSpacesService(this._httpService); + static const _defaultErrorMessage = 'Failed to load tags'; + @override + Future> load( + BookableSpacesParams param) async { + try { + final response = await _httpService.get( + //TODO: you have to Chage this API call Path + path: ApiEndpoints.listTags, + //*************|********** */ + expectedResponseModel: (json) { + final result = json as Map; + return PaginatedDataModel.fromJson( + result, + BookableSpacemodel.fromJsonList, + ); + }, + ); + return response; + } on DioException catch (e) { + final message = e.response?.data as Map?; + final error = message?['error'] as Map?; + final errorMessage = error?['error'] as String? ?? ''; + final formattedErrorMessage = [ + _defaultErrorMessage, + errorMessage, + ].join(': '); + throw APIException(formattedErrorMessage); + } catch (e) { + final formattedErrorMessage = [_defaultErrorMessage, '$e'].join(': '); + throw APIException(formattedErrorMessage); + } + } +} diff --git a/lib/pages/access_management/manage_bookable_spaces/data/remote_non_bookable_spaces.dart b/lib/pages/access_management/manage_bookable_spaces/data/remote_non_bookable_spaces.dart new file mode 100644 index 00000000..5224eb2b --- /dev/null +++ b/lib/pages/access_management/manage_bookable_spaces/data/remote_non_bookable_spaces.dart @@ -0,0 +1,71 @@ +import 'package:dio/dio.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/send_bookable_spaces_to_api_params.dart'; +import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; +import 'package:syncrow_web/services/api/api_exception.dart'; +import 'package:syncrow_web/services/api/http_service.dart'; +import 'package:syncrow_web/utils/constants/api_const.dart'; + +class RemoteNonBookableSpaces implements NonBookableSpacesService { + final HTTPService _httpService; + RemoteNonBookableSpaces(this._httpService); + static const _defaultErrorMessage = 'Failed to load Spaces'; + + @override + Future> load( + NonBookableSpacesParams params) async { + try { + final response = await _httpService.get( + //TODO: you have to Chage this API call Path + path: ApiEndpoints.listTags, + //*************|********** */ + expectedResponseModel: (json) { + final result = json as Map; + return PaginatedDataModel.fromJson( + result, + BookableSpacemodel.fromJsonList, + ); + }, + ); + return response; + } on DioException catch (e) { + final message = e.response?.data as Map?; + final error = message?['error'] as Map?; + final errorMessage = error?['error'] as String? ?? ''; + final formattedErrorMessage = [ + _defaultErrorMessage, + errorMessage, + ].join(': '); + throw APIException(formattedErrorMessage); + } catch (e) { + final formattedErrorMessage = [_defaultErrorMessage, '$e'].join(': '); + throw APIException(formattedErrorMessage); + } + } + + @override + Future sendBookableSpacesToApi( + SendBookableSpacesToApiParams params) async { + try { + await _httpService.post( + path: ApiEndpoints.addBookableSpaces, + body: params.toJson(), + expectedResponseModel: (p0) {}, + ); + } on DioException catch (e) { + final message = e.response?.data as Map?; + final error = message?['error'] as Map?; + final errorMessage = error?['error'] as String? ?? ''; + final formattedErrorMessage = [ + _defaultErrorMessage, + errorMessage, + ].join(': '); + throw APIException(formattedErrorMessage); + } catch (e) { + final formattedErrorMessage = [_defaultErrorMessage, '$e'].join(': '); + throw APIException(formattedErrorMessage); + } + } +} diff --git a/lib/pages/access_management/manage_bookable_spaces/domain/service/bookable_spaces_service.dart b/lib/pages/access_management/manage_bookable_spaces/domain/service/bookable_spaces_service.dart new file mode 100644 index 00000000..5929a935 --- /dev/null +++ b/lib/pages/access_management/manage_bookable_spaces/domain/service/bookable_spaces_service.dart @@ -0,0 +1,8 @@ +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/bookable_spaces_params.dart'; +import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; + +abstract class BookableSpacesService { + Future> load( + BookableSpacesParams param); +} diff --git a/lib/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart b/lib/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart new file mode 100644 index 00000000..cbcb24fa --- /dev/null +++ b/lib/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart @@ -0,0 +1,10 @@ +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/send_bookable_spaces_to_api_params.dart'; +import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; + +abstract class NonBookableSpacesService { + Future> load( + NonBookableSpacesParams params); + Future sendBookableSpacesToApi(SendBookableSpacesToApiParams params); +}