import '../core/networking/api_client.dart';
import '../models/image_suggestion_models.dart';
import 'image_suggestion_repository.dart';
class HttpImageSuggestionRepository implements ImageSuggestionRepository {
const HttpImageSuggestionRepository(this.client);
final ApiClient client;
@override
Future<ImageSuggestionData> submit({
required String targetType,
required int targetId,
required List<int> bytes,
required String filename,
required bool rightsHolderConfirmed,
required bool lawfulSourceConfirmed,
required bool personsConsentConfirmed,
required bool platformLicenseConfirmed,
required String idempotencyKey,
String source = '',
String license = '',
String photographer = '',
String description = '',
}) async {
final response = await client.postMultipart(
'/image-suggestions',
fields: {
'target_type': targetType,
'target_id': '$targetId',
'rights_holder_confirmed': '$rightsHolderConfirmed',
'lawful_source_confirmed': '$lawfulSourceConfirmed',
'persons_consent_confirmed': '$personsConsentConfirmed',
'platform_license_confirmed': '$platformLicenseConfirmed',
'source': source,
'license': license,
'photographer': photographer,
'description': description,
},
bytes: bytes,
filename: filename,
idempotencyKey: idempotencyKey,
);
final raw = response['suggestion'];
if (raw is! Map<String, dynamic>) {
throw const FormatException('Missing image suggestion payload');
}
return ImageSuggestionData.fromJson(raw);
}
@override
Future<ImageSuggestionList> own({String? status}) async {
return ImageSuggestionList.fromJson(
await client.getJson(
'/image-suggestions',
queryParameters: status == null || status.isEmpty
? const {}
: {'status': status},
),
);
}
@override
Future<ImageSuggestionData> respond({
required int suggestionId,
required String response,
required String idempotencyKey,
}) async {
final payload = await client.postJson(
'/image-suggestions/$suggestionId',
body: {'response': response},
idempotencyKey: idempotencyKey,
);
final raw = payload['suggestion'];
if (raw is! Map<String, dynamic>) {
throw const FormatException('Missing image suggestion payload');
}
return ImageSuggestionData.fromJson(raw);
}
}
