diff --git a/htykc/src/lib.rs b/htykc/src/lib.rs index 001fc5a..ec9a6b0 100644 --- a/htykc/src/lib.rs +++ b/htykc/src/lib.rs @@ -25,8 +25,8 @@ use crate::ws_course_package::{ create_course_package, delete_course_package, find_all_active_course_packages_by_org_with_page, find_all_course_packages_by_created_by_with_page, find_course_package_by_id, - list_course_package_items, publish_course_package, sync_course_package_items, - unpublish_course_package, update_course_package, + find_public_course_packages, list_course_package_items, publish_course_package, + sync_course_package_items, unpublish_course_package, update_course_package, }; use crate::ws_xiaoke::{batch_save_clazz_attendance, find_clazz_attendance_by_clazz_id}; use crate::ws_xiaoke::{ @@ -112,6 +112,7 @@ pub fn clazz_router(db_url: &str) -> Router { .route("/api/v1/clazz/course-package/{id}", get(find_course_package_by_id)) .route("/api/v1/clazz/course-package/my-packages", get(find_all_course_packages_by_created_by_with_page)) .route("/api/v1/clazz/course-package/org-packages", get(find_all_active_course_packages_by_org_with_page)) + .route("/api/v1/clazz/course-package/public-packages", get(find_public_course_packages)) .route("/api/v1/clazz/course-package/item/sync", post(sync_course_package_items)) .route("/api/v1/clazz/course-package/item/list/{package_id}", get(list_course_package_items)) .route("/api/v1/clazz/course-package/publish/{id}", post(publish_course_package)) diff --git a/htykc/src/ws_course_package.rs b/htykc/src/ws_course_package.rs index 7ae78ce..6054efb 100644 --- a/htykc/src/ws_course_package.rs +++ b/htykc/src/ws_course_package.rs @@ -225,6 +225,27 @@ pub async fn find_all_active_course_packages_by_org_with_page( } } +/// 公开课包 API — 无需 JWT 认证,供未登录用户浏览课包商店 +pub async fn find_public_course_packages( + State(db_pool): State>, + Query(params): Query>, +) -> Json, i64, i64)>> { + let result = (|| -> anyhow::Result<(Vec, i64, i64)> { + let org_id = params.get("org_id").ok_or_else(|| anyhow!("org_id is required"))?; + let page = get_some_from_query_params::("page", ¶ms).unwrap_or(1); + let page_size = get_some_from_query_params::("page_size", ¶ms).unwrap_or(20); + let keyword = get_some_from_query_params::("keyword", ¶ms); + CoursePackage::find_all_active_by_org_with_page(org_id, &keyword, page, page_size, extract_conn(fetch_db_conn(&db_pool)?).deref_mut()) + })(); + match result { + Ok(ok) => wrap_json_ok_resp(ok), + Err(e) => { + error!("find_public_course_packages -> failed, e: {}", e); + wrap_json_anyhow_err(e) + } + } +} + // --- 课包内容关联(course_package_item)--- fn require_supervisor_role(auth: &AuthorizationHeader) -> anyhow::Result<()> {