feat(health): 注册媒体库和轮播图路由 + 权限码 + 公开端点

This commit is contained in:
iven
2026-05-10 15:35:47 +08:00
parent 3a672636c0
commit 1a459de4ad

View File

@@ -7,13 +7,13 @@ use erp_core::module::{ErpModule, PermissionDescriptor};
use crate::handler::{
action_inbox_handler, alert_handler, alert_rule_handler, appointment_handler,
article_category_handler, article_handler, article_tag_handler, ble_gateway_handler,
care_plan_handler, consent_handler, consultation_handler, critical_alert_handler,
critical_value_threshold_handler, daily_monitoring_handler, device_handler,
device_reading_handler, diagnosis_handler, doctor_handler, family_proxy_handler,
follow_up_handler, follow_up_template_handler, health_data_handler, medication_record_handler,
medication_reminder_handler, patient_handler, points_handler, shift_handler, stats_handler,
vital_signs_daily_handler,
article_category_handler, article_handler, article_tag_handler, banner_handler,
ble_gateway_handler, care_plan_handler, consent_handler, consultation_handler,
critical_alert_handler, critical_value_threshold_handler, daily_monitoring_handler,
device_handler, device_reading_handler, diagnosis_handler, doctor_handler,
family_proxy_handler, follow_up_handler, follow_up_template_handler, health_data_handler,
media_handler, medication_record_handler, medication_reminder_handler, patient_handler,
points_handler, shift_handler, stats_handler, vital_signs_daily_handler,
};
pub struct HealthModule;
@@ -148,10 +148,15 @@ impl HealthModule {
crate::state::HealthState: axum::extract::FromRef<S>,
S: Clone + Send + Sync + 'static,
{
Router::new().route(
"/oauth/token",
axum::routing::post(crate::oauth::handler::token),
)
Router::new()
.route(
"/oauth/token",
axum::routing::post(crate::oauth::handler::token),
)
.route(
"/public/banners",
axum::routing::get(banner_handler::list_public_banners),
)
}
/// FHIR R4 只读路由(使用 OAuth client_credentials 认证)
@@ -502,6 +507,10 @@ impl HealthModule {
"/health/consultation-sessions/{id}/messages",
axum::routing::get(consultation_handler::list_messages),
)
.route(
"/health/consultation-sessions/{id}/messages/poll",
axum::routing::get(consultation_handler::poll_messages),
)
.route(
"/health/consultation-sessions/{id}/close",
axum::routing::put(consultation_handler::close_session),
@@ -884,6 +893,58 @@ impl HealthModule {
"/health/oauth/clients/{id}/regenerate-secret",
axum::routing::post(crate::oauth::handler::regenerate_secret),
)
// 媒体库
.route(
"/health/media",
axum::routing::get(media_handler::list_media),
)
.route(
"/health/media/upload",
axum::routing::post(media_handler::upload_media),
)
.route(
"/health/media/batch-delete",
axum::routing::post(media_handler::batch_delete_media),
)
.route(
"/health/media/{id}",
axum::routing::get(media_handler::get_media)
.put(media_handler::update_media)
.delete(media_handler::delete_media),
)
.route(
"/health/media/{id}/move",
axum::routing::post(media_handler::move_media),
)
.route(
"/health/media/{id}/crop",
axum::routing::post(media_handler::crop_media),
)
// 媒体文件夹
.route(
"/health/media-folders",
axum::routing::get(media_handler::list_folders).post(media_handler::create_folder),
)
.route(
"/health/media-folders/{id}",
axum::routing::put(media_handler::update_folder)
.delete(media_handler::delete_folder),
)
// 轮播图管理
.route(
"/health/banners",
axum::routing::get(banner_handler::list_banners)
.post(banner_handler::create_banner),
)
.route(
"/health/banners/sort",
axum::routing::put(banner_handler::sort_banners),
)
.route(
"/health/banners/{id}",
axum::routing::put(banner_handler::update_banner)
.delete(banner_handler::delete_banner),
)
// 护理计划
.route(
"/health/care-plans",
@@ -1487,6 +1548,32 @@ impl ErpModule for HealthModule {
description: "授权/撤销家庭成员健康数据访问".into(),
module: "health".into(),
},
// 媒体库
PermissionDescriptor {
code: "health.media.list".into(),
name: "查看媒体库".into(),
description: "查看媒体文件列表、文件夹和详情".into(),
module: "health".into(),
},
PermissionDescriptor {
code: "health.media.manage".into(),
name: "管理媒体库".into(),
description: "上传/编辑/删除媒体文件、管理文件夹".into(),
module: "health".into(),
},
// 轮播图
PermissionDescriptor {
code: "health.banners.list".into(),
name: "查看轮播图".into(),
description: "查看轮播图列表和详情".into(),
module: "health".into(),
},
PermissionDescriptor {
code: "health.banners.manage".into(),
name: "管理轮播图".into(),
description: "创建/编辑/删除/排序轮播图".into(),
module: "health".into(),
},
]
}