perf: cache public gallery views

This commit is contained in:
kdletters
2026-05-17 01:19:12 +08:00
parent d9c8473504
commit 81fe3dcf28
39 changed files with 2124 additions and 298 deletions

View File

@@ -6,9 +6,9 @@ use crate::mapper::{
VisualNovelRunSnapshotRecordInput, VisualNovelRunStartRecordInput,
VisualNovelRuntimeEventRecord, VisualNovelWorkCompileRecordInput, VisualNovelWorkProfileRecord,
VisualNovelWorkUpdateRecordInput, map_visual_novel_agent_session_procedure_result,
map_visual_novel_history_procedure_result, map_visual_novel_run_procedure_result,
map_visual_novel_runtime_event_procedure_result, map_visual_novel_work_procedure_result,
map_visual_novel_works_procedure_result,
map_visual_novel_gallery_view_row, map_visual_novel_history_procedure_result,
map_visual_novel_run_procedure_result, map_visual_novel_runtime_event_procedure_result,
map_visual_novel_work_procedure_result, map_visual_novel_works_procedure_result,
};
impl SpacetimeClient {
@@ -239,10 +239,22 @@ impl SpacetimeClient {
pub async fn list_visual_novel_gallery(
&self,
) -> Result<Vec<VisualNovelWorkProfileRecord>, SpacetimeClientError> {
self.list_visual_novel_works_with_input(VisualNovelWorksListInput {
// 中文注释:公开列表只依赖 published_onlyowner_user_id 用固定值满足 procedure 输入契约。
owner_user_id: "visual-novel-public-gallery".to_string(),
published_only: true,
self.read_after_connect(move |connection| {
let mut items = connection
.db()
.visual_novel_gallery_view()
.iter()
.collect::<Vec<_>>();
items.sort_by(|left, right| {
right
.updated_at_micros
.cmp(&left.updated_at_micros)
.then_with(|| left.profile_id.cmp(&right.profile_id))
});
Ok(items
.into_iter()
.map(map_visual_novel_gallery_view_row)
.collect())
})
.await
}