feat: Introduce FileVisibility enum and refactor FileUploadService to use it instead of magic strings for file access levels.

This commit is contained in:
Achintha Isuru
2026-02-25 10:50:42 -05:00
parent ab197c154a
commit a21fbf6871
3 changed files with 18 additions and 3 deletions

View File

@@ -10,18 +10,18 @@ class FileUploadService extends BaseCoreService {
/// Uploads a file with optional visibility and category. /// Uploads a file with optional visibility and category.
/// ///
/// [filePath] is the local path to the file. /// [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. /// [category] is an optional metadata field.
Future<ApiResponse> uploadFile({ Future<ApiResponse> uploadFile({
required String filePath, required String filePath,
required String fileName, required String fileName,
String visibility = 'private', FileVisibility visibility = FileVisibility.private,
String? category, String? category,
}) async { }) async {
return action(() async { return action(() async {
final FormData formData = FormData.fromMap(<String, dynamic>{ final FormData formData = FormData.fromMap(<String, dynamic>{
'file': await MultipartFile.fromFile(filePath, filename: fileName), 'file': await MultipartFile.fromFile(filePath, filename: fileName),
'visibility': visibility, 'visibility': visibility.value,
if (category != null) 'category': category, if (category != null) 'category': category,
}); });

View File

@@ -10,6 +10,7 @@ library;
export 'src/core/services/api_services/api_response.dart'; 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_api_service.dart';
export 'src/core/services/api_services/base_core_service.dart'; export 'src/core/services/api_services/base_core_service.dart';
export 'src/core/services/api_services/file_visibility.dart';
// Users & Membership // Users & Membership
export 'src/entities/users/user.dart'; export 'src/entities/users/user.dart';

View File

@@ -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;
}