feat: add AI recommendations flow for tenders

Implement company AI onboarding/recommendation models, services, repository, and tender UI integration with supporting tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
AmirReza Jamali
2026-06-16 11:47:52 +03:30
parent 83b32549ce
commit 50e4f43738
34 changed files with 2558 additions and 112 deletions
+34
View File
@@ -0,0 +1,34 @@
import 'dart:convert';
import 'package:tm_app/core/utils/result.dart';
import 'package:tm_app/data/services/api/company_ai_api.dart';
import 'package:tm_app/data/services/model/onboarding_response/onboarding_response.dart';
import 'package:tm_app/data/services/model/recommend_response/recommend_response.dart';
import '../../core/network/network_manager.dart';
/// Thin wrapper over the AI recommendation endpoints. The backend reads
/// `company_id` from the JWT, so both calls send an empty JSON body.
class CompanyAiService {
CompanyAiService({required NetworkManager networkManager})
: _networkManager = networkManager;
final NetworkManager _networkManager;
Future<Result<OnboardingResponse>> startOnboarding() async {
return _networkManager.makeRequest(
CompanyAiApi.onboarding,
method: 'POST',
(json) => OnboardingResponse.fromJson(json),
data: jsonEncode(const <String, dynamic>{}),
);
}
Future<Result<RecommendResponse>> getRecommendations() async {
return _networkManager.makeRequest(
CompanyAiApi.recommend,
method: 'POST',
(json) => RecommendResponse.fromJson(json),
data: jsonEncode(const <String, dynamic>{}),
);
}
}