From a21fbf687124af4b31325cc9dfe42a3e293e4c68 Mon Sep 17 00:00:00 2001 From: Achintha Isuru Date: Wed, 25 Feb 2026 10:50:42 -0500 Subject: [PATCH] feat: Introduce `FileVisibility` enum and refactor `FileUploadService` to use it instead of magic strings for file access levels. --- .../file_upload/file_upload_service.dart | 6 +++--- apps/mobile/packages/domain/lib/krow_domain.dart | 1 + .../services/api_services/file_visibility.dart | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 apps/mobile/packages/domain/lib/src/core/services/api_services/file_visibility.dart diff --git a/apps/mobile/packages/core/lib/src/services/api_service/core_api_services/file_upload/file_upload_service.dart b/apps/mobile/packages/core/lib/src/services/api_service/core_api_services/file_upload/file_upload_service.dart index d5e090b0..75886852 100644 --- a/apps/mobile/packages/core/lib/src/services/api_service/core_api_services/file_upload/file_upload_service.dart +++ b/apps/mobile/packages/core/lib/src/services/api_service/core_api_services/file_upload/file_upload_service.dart @@ -10,18 +10,18 @@ class FileUploadService extends BaseCoreService { /// Uploads a file with optional visibility and category. /// /// [filePath] is the local path to the file. - /// [visibility] can be 'public' or 'private'. + /// [visibility] can be [FileVisibility.public] or [FileVisibility.private]. /// [category] is an optional metadata field. Future uploadFile({ required String filePath, required String fileName, - String visibility = 'private', + FileVisibility visibility = FileVisibility.private, String? category, }) async { return action(() async { final FormData formData = FormData.fromMap({ 'file': await MultipartFile.fromFile(filePath, filename: fileName), - 'visibility': visibility, + 'visibility': visibility.value, if (category != null) 'category': category, }); diff --git a/apps/mobile/packages/domain/lib/krow_domain.dart b/apps/mobile/packages/domain/lib/krow_domain.dart index 85e5ea91..1460611e 100644 --- a/apps/mobile/packages/domain/lib/krow_domain.dart +++ b/apps/mobile/packages/domain/lib/krow_domain.dart @@ -10,6 +10,7 @@ library; export 'src/core/services/api_services/api_response.dart'; export 'src/core/services/api_services/base_api_service.dart'; export 'src/core/services/api_services/base_core_service.dart'; +export 'src/core/services/api_services/file_visibility.dart'; // Users & Membership export 'src/entities/users/user.dart'; diff --git a/apps/mobile/packages/domain/lib/src/core/services/api_services/file_visibility.dart b/apps/mobile/packages/domain/lib/src/core/services/api_services/file_visibility.dart new file mode 100644 index 00000000..2b0d7dd0 --- /dev/null +++ b/apps/mobile/packages/domain/lib/src/core/services/api_services/file_visibility.dart @@ -0,0 +1,14 @@ +/// Represents the accessibility level of an uploaded file. +enum FileVisibility { + /// File is accessible only to authenticated owners/authorized users. + private('private'), + + /// File is accessible publicly via its URL. + public('public'); + + /// Creates a [FileVisibility]. + const FileVisibility(this.value); + + /// The string value expected by the backend. + final String value; +}