feat: add public course packages API for unauth storefront
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+3
-2
@@ -25,8 +25,8 @@ use crate::ws_course_package::{
|
|||||||
create_course_package, delete_course_package,
|
create_course_package, delete_course_package,
|
||||||
find_all_active_course_packages_by_org_with_page,
|
find_all_active_course_packages_by_org_with_page,
|
||||||
find_all_course_packages_by_created_by_with_page, find_course_package_by_id,
|
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,
|
find_public_course_packages, list_course_package_items, publish_course_package,
|
||||||
unpublish_course_package, update_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::{batch_save_clazz_attendance, find_clazz_attendance_by_clazz_id};
|
||||||
use crate::ws_xiaoke::{
|
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/{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/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/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/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/item/list/{package_id}", get(list_course_package_items))
|
||||||
.route("/api/v1/clazz/course-package/publish/{id}", post(publish_course_package))
|
.route("/api/v1/clazz/course-package/publish/{id}", post(publish_course_package))
|
||||||
|
|||||||
@@ -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<Arc<DbState>>,
|
||||||
|
Query(params): Query<HashMap<String, String>>,
|
||||||
|
) -> Json<HtyResponse<(Vec<CoursePackage>, i64, i64)>> {
|
||||||
|
let result = (|| -> anyhow::Result<(Vec<CoursePackage>, i64, i64)> {
|
||||||
|
let org_id = params.get("org_id").ok_or_else(|| anyhow!("org_id is required"))?;
|
||||||
|
let page = get_some_from_query_params::<i64>("page", ¶ms).unwrap_or(1);
|
||||||
|
let page_size = get_some_from_query_params::<i64>("page_size", ¶ms).unwrap_or(20);
|
||||||
|
let keyword = get_some_from_query_params::<String>("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)---
|
// --- 课包内容关联(course_package_item)---
|
||||||
|
|
||||||
fn require_supervisor_role(auth: &AuthorizationHeader) -> anyhow::Result<()> {
|
fn require_supervisor_role(auth: &AuthorizationHeader) -> anyhow::Result<()> {
|
||||||
|
|||||||
Reference in New Issue
Block a user