feat: Introduce asset picker modal and audio response blocks, refactor CMS asset API routes, and update dependencies.

This commit is contained in:
2026-01-18 01:02:01 -03:00
parent 02909ea85a
commit 46b6253f22
16 changed files with 3101 additions and 168 deletions
+18 -14
View File
@@ -919,14 +919,16 @@ pub async fn summarize_lesson(
.await
.map_err(|_| StatusCode::NOT_FOUND)?;
let transcription_text = lesson
.transcription
// Use lesson summary as content source, fallback to title
let content_text = lesson
.summary
.as_ref()
.and_then(|t| t["en"].as_str())
.unwrap_or("");
.filter(|s| !s.is_empty())
.cloned()
.unwrap_or_else(|| format!("Lesson: {}", lesson.title));
if transcription_text.is_empty() {
tracing::warn!("Cannot summarize lesson {}: No transcription found", id);
if content_text.is_empty() {
tracing::warn!("Cannot summarize lesson {}: No content available", id);
return Err(StatusCode::BAD_REQUEST);
}
@@ -963,7 +965,7 @@ pub async fn summarize_lesson(
},
{
"role": "user",
"content": transcription_text
"content": content_text
}
]
}));
@@ -1032,15 +1034,17 @@ pub async fn generate_quiz(
.await
.map_err(|_| StatusCode::NOT_FOUND)?;
let transcription_text = lesson
.transcription
// Use lesson summary as content source, fallback to title
let content_text = lesson
.summary
.as_ref()
.and_then(|t| t["en"].as_str())
.unwrap_or("");
.filter(|s| !s.is_empty())
.cloned()
.unwrap_or_else(|| format!("Lesson: {}", lesson.title));
if transcription_text.is_empty() {
if content_text.is_empty() {
tracing::warn!(
"Cannot generate quiz for lesson {}: No transcription found",
"Cannot generate quiz for lesson {}: No content available",
id
);
return Err(StatusCode::BAD_REQUEST);
@@ -1079,7 +1083,7 @@ pub async fn generate_quiz(
},
{
"role": "user",
"content": transcription_text
"content": content_text
}
],
"response_format": { "type": "json_object" }
+2 -2
View File
@@ -139,8 +139,8 @@ async fn main() {
.route("/users", get(handlers::get_all_users))
.route("/users/{id}", axum::routing::put(handlers::update_user))
.route("/audit-logs", get(handlers::get_audit_logs))
.route("/assets/upload", post(handlers::upload_asset))
.route("/assets/{id}", delete(handlers::delete_asset))
.route("/api/assets/upload", post(handlers::upload_asset))
.route("/api/assets/{id}", delete(handlers::delete_asset))
.route("/courses/{id}/assets", get(handlers::get_course_assets))
.layer(DefaultBodyLimit::disable())
.route(