feat(admin): 分区增删、资料设置、操作条与交互收尾
- POST/DELETE /api/categories(需登录,级联,local 保护) - profile 设置(头像/名称/角色/简介/位置)应用到资料卡 - 详情操作条:浏览 +1、点赞切换、分享复制、跳转外链 - 编辑按钮垂直居中且留 12px;设置页按钮上间距、保存 Toast、Tabs 去滚动条 - 登录密码可见切换 - 测试 48 passed
This commit is contained in:
@@ -207,6 +207,33 @@ pub fn update(
|
||||
.ok_or_else(|| StashError::NotFound(format!("条目不存在: {key}")))
|
||||
}
|
||||
|
||||
/// 记录一次浏览:views +1,返回 (views, likes)。
|
||||
pub fn bump_view(conn: &Connection, key: &str) -> Result<(i64, i64), StashError> {
|
||||
conn.execute("UPDATE entry SET views = views + 1 WHERE key = ?1", [key])
|
||||
.map_err(map_error)?;
|
||||
counts(conn, key)
|
||||
}
|
||||
|
||||
/// 点赞 / 取消点赞:likes 加一或减一(不低于 0),返回 (views, likes)。
|
||||
pub fn set_like(conn: &Connection, key: &str, liked: bool) -> Result<(i64, i64), StashError> {
|
||||
let delta: i64 = if liked { 1 } else { -1 };
|
||||
conn.execute(
|
||||
"UPDATE entry SET likes = MAX(0, likes + ?1) WHERE key = ?2",
|
||||
params![delta, key],
|
||||
)
|
||||
.map_err(map_error)?;
|
||||
counts(conn, key)
|
||||
}
|
||||
|
||||
fn counts(conn: &Connection, key: &str) -> Result<(i64, i64), StashError> {
|
||||
conn.query_row("SELECT views, likes FROM entry WHERE key = ?1", [key], |row| {
|
||||
Ok((row.get(0)?, row.get(1)?))
|
||||
})
|
||||
.optional()
|
||||
.map_err(map_error)?
|
||||
.ok_or_else(|| StashError::NotFound(format!("条目不存在: {key}")))
|
||||
}
|
||||
|
||||
/// 记录一条审计(设置保存等)。
|
||||
pub fn audit(conn: &Connection, action: &str, target: &str, detail: &str) -> Result<(), StashError> {
|
||||
conn.execute(
|
||||
|
||||
Reference in New Issue
Block a user