diff --git a/lib/pages/access_management/manage_bookable_spaces/data/remote_update_bookable_space_service.dart b/lib/pages/access_management/manage_bookable_spaces/data/remote_update_bookable_space_service.dart new file mode 100644 index 00000000..1c0b1c8e --- /dev/null +++ b/lib/pages/access_management/manage_bookable_spaces/data/remote_update_bookable_space_service.dart @@ -0,0 +1,40 @@ +import 'package:dio/dio.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/update_bookable_space_param.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/update_bookable_space_service.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 RemoteUpdateBookableSpaceService implements UpdateBookableSpaceService { + final HTTPService _httpService; + RemoteUpdateBookableSpaceService(this._httpService); + static const _defaultErrorMessage = 'Failed to load Bookable Spaces'; + @override + Future update( + UpdateBookableSpaceParam updateParam) async { + try { + final response = await _httpService.put( + path: '${ApiEndpoints.bookableSpaces}/${updateParam.spaceUuid}', + body: updateParam.toJson(), + expectedResponseModel: (json) { + return BookableSpaceConfig.fromJson( + json['data'] as Map); + }, + ); + 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); + } + } +}