实现 Expo + Supabase 冷启动安全架构,包括数据库结构、轻量 Edge Functions 与独立 Worker。
扮演资深 Expo + Supabase 架构师。 使用以下组件实现一种“冷启动安全”的架构: - Expo(React Native)客户端 - Supabase Postgres + Storage + Realtime - Supabase Edge Functions —— 仅用于轻量级准入控制(gating)和任务入队(job enqueue) - 一个独立的 Worker 服务 —— 专用于繁重的 AI 生成任务及存储写入操作 交付内容如下: 1) 数据库结构(SQL 迁移脚本),涵盖:jobs 表、generations 表、entitlements 表(含积分/是否付费字段),并包含索引定义与 RLS(行级安全策略)说明 2) Edge Functions: - ping(支持 HEAD/GET 方法) - enqueue_generation(验证身份认证、检查 is_paid/credits 余额、创建 job 记录、返回 jobId) - get_job_status(轻量读取) 所有函数须保持导入精简;禁止引入重型 SDK。 3) Expo 客户端流程: - 应用启动时执行非阻塞式预热 ping 请求 - “生成”按钮采用乐观 UI + 占位符(placeholder)机制 - 通过 Realtime 订阅任务更新;若不可用,则降级为轮询(polling)回退方案 - 最终生成结果将替换图库列表中的占位符 4) Worker 职责(描述其接口与最小化端点/逻辑,切勿过度设计): - 拉取已入队的任务(queued jobs) - 执行 AI 生成逻辑 - 将结果上传至 Storage - 更新 jobs 表 + 插入 generations 表记录 - 实现重试策略与幂等性保障 约束条件: - 任何 Edge Function 调用均不得阻塞应用启动流程 - 禁止在 Edge Functions 内执行 AI 调用 - 即使任务失败,也必须创建一条 generations 记录,且原始输入(original input)需可见 - 整体方案须面向生产环境就绪,但保持极简主义(minimal) 输出格式必须严格遵循以下结构: A) 架构概要 B) 迁移脚本(SQL) C) Edge Function 文件结构 + 关键代码块 D) Expo 集成说明 + 关键代码块 E) Worker 概述 + 伪代码
Act as a Senior Expo + Supabase Architect. Implement a “cold-start safe” architecture using: - Expo (React Native) client - Supabase Postgres + Storage + Realtime - Supabase Edge Functions ONLY for lightweight gating + job enqueue - A separate Worker service for heavy AI generation and storage writes Deliver: 1) Database schema (SQL migrations) for: jobs, generations, entitlements (credits/is_paid), including indexes and RLS notes 2) Edge Functions: - ping (HEAD/GET) - enqueue_generation (validate auth, check is_paid/credits, create job, return jobId) - get_job_status (light read) Keep imports minimal; no heavy SDKs. 3) Expo client flow: - non-blocking warm ping on app start - Generate button uses optimistic UI + placeholder - subscribe to job updates via Realtime or implement polling fallback - final generation replaces placeholder in gallery list 4) Worker responsibilities (describe interface and minimal endpoints/logic, do not overbuild): - fetch queued jobs - run AI generation - upload to storage - update jobs + insert generations - retry policy and idempotency Constraints: - Do NOT block app launch on any Edge call - Do NOT run AI calls inside Edge Functions - Ensure failed jobs still create a generation record with original input visible - Keep the solution production-friendly but minimal Output must be structured as: A) Architecture summary B) Migrations (SQL) C) Edge function file structure + key code blocks D) Expo integration notes + key code blocks E) Worker outline + pseudo-code