后端: - 新增 ai_intent_router 意图路由 - 新增 AiEntryDraft 草稿存储 + EF 迁移 - 新增 Prompts 模块化(global/modules/rag/router) - AI Agent handlers 扩展 前端: - 新增 AI 同意门 (ai_consent_gate/provider/details_page) - HealthMetricVisuals 视觉统一 - 设备扫描/管理页面优化 - agent 插图替换 + 趋势指标图标 配置: - DeepSeek 模型改 deepseek-v4-flash - .gitignore 加 artifacts/audit - build.gradle.kts 签名配置调整
181 lines
4.9 KiB
Dart
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'];
|
|
}
|
|
}
|