diff --git a/lib/pages/space_management_v2/modules/duplicate_space/data/services/remote_duplicate_space_service.dart b/lib/pages/space_management_v2/modules/duplicate_space/data/services/remote_duplicate_space_service.dart new file mode 100644 index 00000000..bd0b21fa --- /dev/null +++ b/lib/pages/space_management_v2/modules/duplicate_space/data/services/remote_duplicate_space_service.dart @@ -0,0 +1,58 @@ +import 'package:dio/dio.dart'; +import 'package:syncrow_web/pages/common/bloc/project_manager.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/space_model.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/domain/params/duplicate_space_param.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/domain/services/duplicate_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'; + +final class RemoteDuplicateSpaceService implements DuplicateSpaceService { + RemoteDuplicateSpaceService(this._httpService); + + final HTTPService _httpService; + + @override + Future duplicateSpace(DuplicateSpaceParam param) async { + try { + final response = await _httpService.post( + path: await _makeUrl(param), + body: param.toJson(), + expectedResponseModel: (json) { + final response = json as Map; + final data = response['data'] as Map; + return SpaceModel.fromJson(data); + }, + ); + + 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? ?? ''; + throw APIException(errorMessage); + } catch (e) { + throw APIException(e.toString()); + } + } + + Future _makeUrl(DuplicateSpaceParam param) async { + final projectUuid = await ProjectManager.getProjectUUID(); + if (projectUuid == null) { + throw APIException('Project UUID is not set'); + } + + if (param.communityUuid.isEmpty) { + throw APIException('Community UUID is not set'); + } + + if (param.spaceUuid.isEmpty) { + throw APIException('Space UUID is not set'); + } + + return ApiEndpoints.duplicateSpace + ..replaceAll('{projectUuid}', projectUuid) + ..replaceAll('{communityUuid}', param.communityUuid) + ..replaceAll('{spaceUuid}', param.spaceUuid); + } +}