uodate create/detail - no upload file
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
/// Handles remote API calls for design requests.
|
||||
library;
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:worker/core/constants/api_constants.dart';
|
||||
import 'package:worker/core/network/dio_client.dart';
|
||||
import 'package:worker/features/showrooms/data/models/design_request_model.dart';
|
||||
@@ -17,6 +18,24 @@ abstract class DesignRequestRemoteDataSource {
|
||||
|
||||
/// Fetch detail of a design request by name
|
||||
Future<DesignRequestModel> getDesignRequestDetail(String name);
|
||||
|
||||
/// Create a new design request
|
||||
Future<String> createDesignRequest({
|
||||
required String subject,
|
||||
required String area,
|
||||
required String region,
|
||||
required String desiredStyle,
|
||||
String? estimatedBudget,
|
||||
required String detailedRequirements,
|
||||
required String dateline,
|
||||
});
|
||||
|
||||
/// Upload file attachment for a design request
|
||||
Future<void> uploadDesignRequestFile({
|
||||
required String requestId,
|
||||
required String filePath,
|
||||
required String fileName,
|
||||
});
|
||||
}
|
||||
|
||||
/// Design Request Remote Data Source Implementation
|
||||
@@ -93,4 +112,94 @@ class DesignRequestRemoteDataSourceImpl implements DesignRequestRemoteDataSource
|
||||
throw Exception('Failed to get design request detail: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Create a new design request
|
||||
///
|
||||
/// Calls: POST /api/method/building_material.building_material.api.design_request.create
|
||||
/// Body: { "subject": "...", "area": "...", "region": "...", ... }
|
||||
/// Returns: Created request ID (name)
|
||||
@override
|
||||
Future<String> createDesignRequest({
|
||||
required String subject,
|
||||
required String area,
|
||||
required String region,
|
||||
required String desiredStyle,
|
||||
String? estimatedBudget,
|
||||
required String detailedRequirements,
|
||||
required String dateline,
|
||||
}) async {
|
||||
try {
|
||||
final response = await _dioClient.post<Map<String, dynamic>>(
|
||||
'${ApiConstants.frappeApiMethod}${ApiConstants.createDesignRequest}',
|
||||
data: {
|
||||
'subject': subject,
|
||||
'area': area,
|
||||
'region': region,
|
||||
'desired_style': desiredStyle,
|
||||
if (estimatedBudget != null) 'estimated_budget': estimatedBudget,
|
||||
'detailed_requirements': detailedRequirements,
|
||||
'dateline': dateline,
|
||||
},
|
||||
);
|
||||
|
||||
final data = response.data;
|
||||
if (data == null) {
|
||||
throw Exception('No data received from createDesignRequest API');
|
||||
}
|
||||
|
||||
// API returns: { "message": { "success": true, "data": { "name": "ISS-2025-00006" } } }
|
||||
final message = data['message'] as Map<String, dynamic>?;
|
||||
if (message == null) {
|
||||
throw Exception('No message field in createDesignRequest response');
|
||||
}
|
||||
|
||||
final success = message['success'] as bool? ?? false;
|
||||
if (!success) {
|
||||
throw Exception('Failed to create design request');
|
||||
}
|
||||
|
||||
final requestData = message['data'] as Map<String, dynamic>?;
|
||||
if (requestData == null) {
|
||||
throw Exception('No data field in createDesignRequest response');
|
||||
}
|
||||
|
||||
final name = requestData['name'] as String?;
|
||||
if (name == null || name.isEmpty) {
|
||||
throw Exception('No name returned from createDesignRequest');
|
||||
}
|
||||
|
||||
return name;
|
||||
} catch (e) {
|
||||
throw Exception('Failed to create design request: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Upload file attachment for a design request
|
||||
///
|
||||
/// Calls: POST /api/method/upload_file
|
||||
/// Form-data: { file, is_private, folder, doctype, docname, optimize }
|
||||
@override
|
||||
Future<void> uploadDesignRequestFile({
|
||||
required String requestId,
|
||||
required String filePath,
|
||||
required String fileName,
|
||||
}) async {
|
||||
try {
|
||||
final formData = FormData.fromMap({
|
||||
'file': await MultipartFile.fromFile(filePath, filename: fileName),
|
||||
'is_private': '0',
|
||||
'folder': 'Home/Attachments',
|
||||
'doctype': 'Issue',
|
||||
'docname': requestId,
|
||||
'optimize': 'true',
|
||||
});
|
||||
|
||||
await _dioClient.post<Map<String, dynamic>>(
|
||||
'${ApiConstants.frappeApiMethod}${ApiConstants.uploadFile}',
|
||||
data: formData,
|
||||
);
|
||||
} catch (e) {
|
||||
throw Exception('Failed to upload file: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user