Files
AI-Health/health_app/lib/services/health_service.dart
MingNian 3b5cec10a6 feat: AI 提示词模块化 + AI 同意门控 + AI 草稿存储 + 意图路由 + 医疗引用知识库 + 多页面 UI 优化
- AI 提示词拆分为 markdown 模块(Prompts/global + modules + rag + router)
- 新增 AI 同意门控(用户需同意后才能使用 AI 功能)
- 新增 AI 录入草稿存储(AiEntryDraftContracts/EfAiEntryDraftStore/AiEntryDraftRecord)
- 新增 AI 意图路由(ai_intent_router)
- 新增医疗引用知识库(MedicalCitationKnowledge)
- 重构 prompt_manager 和 ai_chat_endpoints
- 优化聊天/趋势/档案/抽屉/医生端等多个页面 UI
- 新增 agent 插画和趋势指标图标资源
- 删除 HANDOFF-2026-07-17.md
2026-07-27 16:53:20 +08:00

181 lines
4.9 KiB
Dart

import '../core/api_client.dart';
class HealthService {
final ApiClient _api;
HealthService(this._api);
Future<Map<String, dynamic>> getLatest() async {
final res = await _api.get('/api/health-records/latest');
return res.data['data'] ?? {};
}
}
class UserService {
final ApiClient _api;
UserService(this._api);
Future<Map<String, dynamic>?> getProfile() async {
final res = await _api.get('/api/user/profile');
return res.data['data'];
}
Future<Map<String, dynamic>?> updateProfile({
String? name,
String? gender,
String? birthDate,
String? avatarUrl,
}) async {
final response = await _api.put(
'/api/user/profile',
data: {
'name': name,
'gender': gender,
'birthDate': birthDate,
'avatarUrl': avatarUrl,
},
);
final data = response.data['data'];
return data is Map ? Map<String, dynamic>.from(data) : null;
}
Future<Map<String, dynamic>?> getHealthArchive() async {
final res = await _api.get('/api/user/health-archive');
return res.data['data'];
}
Future<void> updateHealthArchive(Map<String, dynamic> data) async {
await _api.put('/api/user/health-archive', data: data);
}
Future<void> deleteAccount() async {
await _api.delete('/api/user/account');
}
}
class MedicationService {
final ApiClient _api;
MedicationService(this._api);
Future<List<Map<String, dynamic>>> getList() async {
final res = await _api.get('/api/medications');
final list = res.data['data'] as List? ?? [];
return list.cast<Map<String, dynamic>>();
}
Future<void> create(Map<String, dynamic> data) async {
await _api.post('/api/medications', data: data);
}
Future<void> update(String id, Map<String, dynamic> data) async {
await _api.put('/api/medications/$id', data: data);
}
Future<List<Map<String, dynamic>>> getMedications(String filter) async {
final params = <String, dynamic>{};
if (filter.isNotEmpty) params['filter'] = filter;
final res = await _api.get(
'/api/medications',
queryParameters: params.isNotEmpty ? params : null,
);
final list = res.data['data'] as List? ?? [];
return list.cast<Map<String, dynamic>>();
}
Future<void> deleteMedication(String id) async {
await _api.delete('/api/medications/$id');
}
Future<void> confirm(String id) async {
await _api.post('/api/medications/$id/confirm');
}
Future<List<Map<String, dynamic>>> getReminders() async {
final res = await _api.get('/api/medications/reminders');
final list = res.data['data'] as List? ?? [];
return list.cast<Map<String, dynamic>>();
}
}
class DietService {
final ApiClient _api;
DietService(this._api);
Future<List<Map<String, dynamic>>> getRecords({
String? date,
String? mealType,
}) async {
final params = <String, dynamic>{};
if (date != null) params['date'] = date;
if (mealType != null) params['mealType'] = mealType;
final res = await _api.get('/api/diet-records', queryParameters: params);
final list = res.data['data'] as List? ?? [];
return list.cast<Map<String, dynamic>>();
}
Future<void> create(Map<String, dynamic> data) async {
await _api.post('/api/diet-records', data: data);
}
Future<void> deleteRecord(String id) async {
await _api.delete('/api/diet-records/$id');
}
Future<void> updateRecord(String id, Map<String, dynamic> data) async {
await _api.put('/api/diet-records/$id', data: data);
}
}
class ConsultationService {
final ApiClient _api;
ConsultationService(this._api);
Future<List<Map<String, dynamic>>> getDoctors() async {
final res = await _api.get('/api/doctors');
final list = res.data['data'] as List? ?? [];
return list.cast<Map<String, dynamic>>();
}
}
class FollowUpService {
final ApiClient _api;
FollowUpService(this._api);
Future<List<Map<String, dynamic>>> getList() async {
final res = await _api.get('/api/follow-ups');
final list = res.data['data'] as List? ?? [];
return list.cast<Map<String, dynamic>>();
}
}
class ExerciseService {
final ApiClient _api;
ExerciseService(this._api);
Future<Map<String, dynamic>?> getCurrentPlan() async {
final res = await _api.get('/api/exercise-plans/current');
return res.data['data'];
}
Future<void> createPlanSimple(Map<String, dynamic> data) async {
await _api.post('/api/exercise-plans', data: data);
}
Future<void> deletePlan(String id) async {
await _api.delete('/api/exercise-plans/$id');
}
Future<void> checkIn(String itemId) async {
await _api.post('/api/exercise-plans/items/$itemId/checkin');
}
Future<List<Map<String, dynamic>>> getPlans() async {
final res = await _api.get('/api/exercise-plans');
return (res.data['data'] as List?)?.cast<Map<String, dynamic>>() ?? [];
}
Future<Map<String, dynamic>?> getPlanDetail(String id) async {
final res = await _api.get('/api/exercise-plans/$id');
return res.data['data'];
}
}