Files
Thesisly/docs/paper-api.md
T

3.0 KiB
Raw Blame History

论文只读 HTTP 接口

状态:用户要求等待既有论文库从 SQLite 迁移至 PostgreSQL。此前 SQLite 实现方案已撤回,未部署;Foundry Core 的 codex/research-api 分支在迁移完成后按实际 PostgreSQL schema实现。本任务包括后端实现与联调,不把接口开发留给用户。

地址与配置

实际契约:GET /projects/{project}/research/papers 和 GET /projects/{project}/research/papers/{id}。上线后前端配置:

PAPER_API_ORIGIN=https://api.foundry.entroia.com/projects/thesisly/research/

未配置时显式显示20条真实数据库样本;配置后只请求远程接口,错误不会退回样本。前端不携带数据库或服务账户凭据。

列表

GET {PAPER_API_ORIGIN}/papers?q=&searchIn=text&topic=&sort=recent&page=1&pageSize=8

  • q:最多200个Unicode字符、20个词。searchIn=text时检索标题/摘要,searchIn=author时检索显示作者名。不会把用户输入作为任意SQL或FTS操作符。
  • topic:精确arxiv:category值。
  • sort:recent是稳定论文ID降序,即收录顺序,不是发表日期排序;title使用现有title_key索引。
  • page:1–1000;pageSize:1–50,前端当前为8。
  • 返回{items:Paper[],total,topics,page,pageSize},同一只读事务内计数及取页;无效、重复、未知参数返回400。

论文

Paper包含id、title、abstract(可空)、authors字符串数组、publishedAt(保留来源格式,可空)、topics、sources(label/url/externalId),以及publications(venue/year/track/status/evidenceUrl)。可选doi、journal、comments。

source_records按paper_id关联;作者兼容[family,given,suffix]数组与字符串。会议记录通过submissions→editions→venues,状态取最新决定观察;没有决定时保持unknown,不推断拒稿。不虚构代码库、数据集、引用量、热门或AI结论。详情不存在返回404。

读取边界

待 PostgreSQL 迁移任务完成后,核对实际数据库/schema、字段类型、全文索引及最小只读权限,在 Foundry Core 中实现查询。不部署 SQLite sidecar,不复制整库,不从浏览器持有数据库连接串。

最多两个并行查询、8秒查询预算;繁忙返回429,超时/存储异常明确报错。作者筛选可能全库扫描,需要在真实库上验证性能。语料库是共享公开数据;账户与未来私有收藏仍须按项目隔离。

联调前置

  • 用户手动合并后端PR;后端沿用已确认ECS runner验证与部署。
  • 保留FOUNDRY_PROJECTS旧条目,追加thesisly→http://localhost:17322/auth/callback。
  • 用户已确认新增 FOUNDRY_PROJECTS;无需添加 FOUNDRY_RESEARCH_DATABASE。PostgreSQL 的后端接入配置待迁移完成后确定。
  • 前端仓库为Zayden-Jung/Thesisly,不配置CI/CD;本地build按用户最新要求暂不执行。
  • 真实Google/Slack、邮箱验证、刷新恢复与退出需要实际浏览器授权验收;302与fixture测试不代表登录成功。