feat: add admin creation entry switches
Some checks failed
CI / verify (pull_request) Has been cancelled

This commit is contained in:
2026-05-11 12:02:39 +08:00
parent d23cf3807d
commit 0461c0ee41
18 changed files with 745 additions and 4 deletions

View File

@@ -48,6 +48,57 @@ pub fn get_creation_entry_config(
}
}
#[spacetimedb::procedure]
pub fn upsert_creation_entry_type_config(
ctx: &mut ProcedureContext,
input: CreationEntryTypeAdminUpsertInput,
) -> CreationEntryConfigProcedureResult {
match ctx.try_with_tx(|tx| upsert_creation_entry_type_config_in_tx(tx, input.clone())) {
Ok(record) => CreationEntryConfigProcedureResult {
ok: true,
record: Some(record),
error_message: None,
},
Err(message) => CreationEntryConfigProcedureResult {
ok: false,
record: None,
error_message: Some(message),
},
}
}
fn upsert_creation_entry_type_config_in_tx(
ctx: &ReducerContext,
input: CreationEntryTypeAdminUpsertInput,
) -> Result<CreationEntryConfigSnapshot, String> {
seed_creation_entry_config_if_missing(ctx);
let now = ctx.timestamp;
let id = input.id.trim().to_string();
if id.is_empty() {
return Err("入口 ID 不能为空".to_string());
}
if input.title.trim().is_empty() {
return Err("入口标题不能为空".to_string());
}
let row = CreationEntryTypeConfig {
id: id.clone(),
title: input.title.trim().to_string(),
subtitle: input.subtitle.trim().to_string(),
badge: input.badge.trim().to_string(),
image_src: input.image_src.trim().to_string(),
visible: input.visible,
open: input.open,
sort_order: input.sort_order,
updated_at: now,
};
if ctx.db.creation_entry_type_config().id().find(&id).is_some() {
ctx.db.creation_entry_type_config().id().update(row);
} else {
ctx.db.creation_entry_type_config().insert(row);
}
get_or_seed_creation_entry_config_snapshot(ctx)
}
fn get_or_seed_creation_entry_config_snapshot(
ctx: &ReducerContext,
) -> Result<CreationEntryConfigSnapshot, String> {