域名 AXUM.RS 将于2025年10月到期。我们无意再对其进行续费,我们希望你能够接续这个域名,让更多 AXUM 开发者继续受益。
  • 方案1️⃣AXUM.RS 域名 = 3000
  • 方案2️⃣方案1️⃣ + 本站所有专题原始 Markdown 文档 = 5000
  • 方案3️⃣方案2️⃣ + 本站原始数据库 = 5500
如果你有意接续这份 AXUM 情怀,请与我们取得联系。
说明:
  1. 如果有人购买 AXUM.RS 域名(方案1️⃣),或者该域名到期,本站将启用新的免费域名继续提供服务。
  2. 如果有人购买了 AXUM.RS 域名,且同时购买了内容和/或数据库(方案2️⃣/方案3️⃣),本站将关闭。届时我们或许会以另一种方式与你再相遇。

用户积分变动记录

// src/db/pointer_log.rs

pub async fn list_all<'a>(c: impl PgExecutor<'a>, user_id: &'a str) -> Result<Vec<Model>> {
    let mut q = QueryBuilder::new(
        r#"SELECT id, user_id, dateline, pointer_amount, before_pointer, after_pointer, "note" FROM pointer_logs WHERE user_id="#,
    );
    q.push_bind(user_id)
        .push(" ORDER BY id DESC")
        .push(" LIMIT 50");
    q.build_query_as().fetch_all(c).await
}
// src/handler/api/user.rs

pub async fn pointer_log(
    State(state): State<ArcAppState>,
    auth: mid::Auth,
) -> Result<resp::JsonResp<Vec<model::pointer_log::PointerLog>>> {
    let user = auth.get_user()?;

    let data = db::pointer_log::list_all(&*state.pool, &user.id).await?;
    Ok(resp::Resp::success(data).to_json())
}
  • 获取当前登录用户
  • 从数据库中查找该用户积分变动记录

前端

  • loadData():从 API 接口中获取数据
  • useEffect():组件加载后,调用 loadData()

本章代码位于09.积分变动分支。

要查看完整内容,请先登录