Files
digital-psychology/proto/openapi.yaml
T
jackyu66gitandCursor dd94e57277 docs: freeze YuXinGu lexicon, journey, and P1 engineering sources
Establish product language contract, user journey with dual growth engines,
ERD/OpenAPI/Go boundaries, and H5 routes (/profile, /portrait, /relation,
/membership) before P1 implementation.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-02 16:12:10 +08:00

294 lines
6.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
openapi: 3.0.3
info:
title: YuXinGu API
version: 0.2.0
description: |
愈心谷 P1 API 契约(冻结草案)。
用户可见文案遵循 .ai/product/lexicon.md。
统一信封:{ code, message, data }code=0 成功。
servers:
- url: http://127.0.0.1:8080
tags:
- name: system
- name: profile
- name: portrait
- name: scale
- name: relation
- name: report
- name: ask
- name: companion
- name: commerce
paths:
/api/v1/healthz:
get:
tags: [system]
summary: Liveness
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
/api/v1/ping:
get:
tags: [system]
summary: Ping
responses:
'200':
description: OK
/api/v1/profiles:
get:
tags: [profile]
summary: 列出个人档案
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
post:
tags: [profile]
summary: 创建个人档案
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateProfileRequest'
responses:
'200':
description: OK
/api/v1/profiles/{id}:
patch:
tags: [profile]
summary: 更新个人档案
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: OK
delete:
tags: [profile]
summary: 删除个人档案
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: OK
/api/v1/reports/portrait:
post:
tags: [portrait]
summary: 生成个人画像成长报告
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [profile_id]
properties:
profile_id: { type: string, format: uuid }
responses:
'200':
description: 返回 GrowthReportdetail 按权益裁剪)
/api/v1/relation/insight:
post:
tags: [relation]
summary: 生成关系理解
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [profile_a_id, profile_b_id]
properties:
profile_a_id: { type: string, format: uuid }
profile_b_id: { type: string, format: uuid }
responses:
'200':
description: RelationInsight + 可选 report_id
/api/v1/reports/{id}:
get:
tags: [report]
summary: 获取成长报告(权益裁剪)
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: OK
/api/v1/scales:
get:
tags: [scale]
summary: 探索测试列表
responses:
'200':
description: OK
/api/v1/scales/{slug}:
get:
tags: [scale]
summary: 探索测试题目
parameters:
- name: slug
in: path
required: true
schema: { type: string }
responses:
'200':
description: OK
/api/v1/scales/{slug}/result:
post:
tags: [scale]
summary: 提交探索测试并计分
parameters:
- name: slug
in: path
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [profile_id, answers]
properties:
profile_id: { type: string, format: uuid }
answers: { type: object }
responses:
'200':
description: 探索结果
/api/v1/ask/threads:
post:
tags: [ask]
summary: 创建问答线程(须绑定 profile
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [profile_id]
properties:
profile_id: { type: string, format: uuid }
responses:
'200':
description: OK
/api/v1/ask/threads/{id}/messages:
post:
tags: [ask]
summary: 发送消息(扣额度)
parameters:
- $ref: '#/components/parameters/Id'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [content]
properties:
content: { type: string }
responses:
'200':
description: assistant 回复
/api/v1/solar-terms/today:
get:
tags: [companion]
summary: 今日节气生活建议
responses:
'200':
description: OK
/api/v1/moods:
post:
tags: [companion]
summary: 心情记录(P2 可完善)
responses:
'200':
description: OK
/api/v1/membership/me:
get:
tags: [commerce]
summary: 当前成长会员权益
responses:
'200':
description: OK
/api/v1/orders:
post:
tags: [commerce]
summary: 创建订单(membership | deep_access
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrderRequest'
responses:
'200':
description: OK
/api/v1/orders/{id}/pay-mock:
post:
tags: [commerce]
summary: 模拟支付成功
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: OK
components:
parameters:
Id:
name: id
in: path
required: true
schema: { type: string, format: uuid }
schemas:
Envelope:
type: object
required: [code, message]
properties:
code: { type: integer, example: 0 }
message: { type: string, example: success }
data: { type: object }
CreateProfileRequest:
type: object
required: [relation, birth_date]
properties:
relation: { type: string, enum: [self, other] }
display_name: { type: string }
birth_date: { type: string, format: date }
birth_time: { type: string, nullable: true }
birth_place: { type: string, nullable: true }
gender: { type: string, nullable: true }
relation_type: { type: string, nullable: true }
CreateOrderRequest:
type: object
required: [kind]
properties:
kind: { type: string, enum: [membership, deep_access] }
plan: { type: string, description: month|quarter|year when membership }
report_id: { type: string, format: uuid, description: when deep_access }