From 4241d11cb650f7cafc1acac4e2aed9abef39631d Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Wed, 23 Jul 2025 09:59:13 +0300 Subject: [PATCH] Implemented `duplicate_space` data layer. --- .../remote_duplicate_space_service.dart | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 lib/pages/space_management_v2/modules/duplicate_space/data/services/remote_duplicate_space_service.dart 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); + } +}