🏃 跑步星球 · API 文档

云端存储结构说明(Supabase)· 如实描述,不夸大不虚构

一、总体架构

跑步星球的云端数据存储基于 Supabase(supabase.co)PostgreSQL 数据库。应用通过 Supabase 匿名 Key 直连数据库,没有自建后端服务。客户端使用用户名(username)作为业务主键进行读写。

说明:本应用为个人开发项目,云端能力受 Supabase 免费额度与数据表结构约束。以下为当前应用实际使用的数据表与字段。

二、数据表结构

1. run_data — 用户数据总表(核心)

整包存储:用户的跑步记录、跳绳记录、积分、商城已兑换商品、挑战进度、跑团列表等全部 userData 字段,以单行密文形式保存。

create table run_data (
  username   text primary key,   -- 用户名(业务主键)
  data       text,               -- 整包 userData 加密后的密文(见加密方式)
  updated_at timestamptz         -- 最后更新时间
);
alter table run_data disable row level security;

2. club_data — 跑团归属表

单独存储每个用户的跑团归属信息(团号、加入时间等)。

create table club_data (
  username   text primary key,
  data       text,
  updated_at timestamptz
);
alter table club_data disable row level security;

3. club_chat — 跑团聊天表

跑团内实时聊天消息,明文存储,客户端轮询获取;云端自动清理 7 天前的消息以节省空间并缩小隐私暴露面。

create table club_chat (
  id       bigint generated always as identity primary key,
  club_id  text,      -- 跑团号
  username text,      -- 发送者
  msg      text,      -- 消息内容
  ts       bigint     -- 时间戳(ms)
);

4. risk_review — 异常记录审批表

疑似异常运动记录自动上传,由管理员通过 / 驳回;record_id 带唯一约束用于去重。

create table risk_review (
  id          bigint generated always as identity primary key,
  username    text,
  record_id   bigint unique,     -- 关联本地记录ID(唯一去重)
  distance    real,
  time        real,
  pace        real,
  sport       text,
  risk_reason text,
  create_time bigint,
  status      integer,           -- 审批状态
  updated_at  bigint
);
alter table risk_review disable row level security;

5. rank_interactions — 排行榜互动表(用户自建,自动降级)

排行榜点赞 / 评论 / 送花数据。该表需在 Supabase 后台手动执行 SQL 创建;未创建时应用自动降级隐藏互动入口,不影响其他功能。

create table rank_interactions (
  id          bigint generated always as identity primary key,
  target_user text not null,     -- 被互动用户
  actor_user  text not null,     -- 互动用户
  type        text not null,     -- like / comment / flower
  content     text,
  create_time bigint
);
alter table rank_interactions disable row level security;

6. beacon_share — 实时位置分享表(独立)

跨设备双向实时位置共享:分享者与接收者各自 upsert 自己的位置字段,每约 3 秒轮询一次展示双方位置;任一方停止即标记失效。

create table beacon_share (
  id          text primary key,   -- 分享链接ID
  host_user   text,
  host_lat    double precision,
  host_lon    double precision,
  host_ts     bigint,
  host_active boolean,
  guest_user  text,
  guest_lat   double precision,
  guest_lon   double precision,
  guest_ts    bigint,
  guest_active boolean,
  updated_at  timestamptz default now()
);

三、加密方式(如实说明)

重要声明:本应用的云端数据加密为 XOR + Base64 基础混淆,目的是防止直接明文读取,并非强加密。数据通过 HTTPS 加密通道传输。请勿在应用中保存银行账号、证件号等高度敏感信息。

四、同步机制

五、限制与说明

← 返回介绍页
跑步星球 · 让每一次奔跑都有意义