LivDot共享合同
用于跨LivDot平台使用的模式和面向api的共享类型的中央契约存储库。
目的
这个存储库的存在是为了保持后端、前端和移动端在相同的契约表面上对齐,而不需要将代码库耦合到一个单线程中。 它是以下内容的单一共享源:
- 请求和响应模式
- 域枚举和状态常数
- 规范错误码
- 共享dto和验证规则
- 其他api边界定义必须在服务和客户端之间保持一致
使用此包的存储库
livdot-backendlivdot-frontendlivdot-mobile
属于这里的东西
只有跨堆栈契约工件。 示例:
CreateEventRequestBookingStateEventStateApiErrorCode- 用于有效负载验证的模式
- 共享的授权/令牌有效负载形状(如适用)
这里不能添加什么
这个存储库是 不 共享代码的垃圾场。 做。 不 添加:
- 后端业务逻辑
- ORM /数据库模型
- 库/服务/用例
- 前端UI组件
- 特定于移动设备的运行时代码
- 基础设施或部署逻辑
- 不属于跨堆栈契约的实用程序 如果它不是合同边界的一部分,它就不属于这里。
所有权
后端仍然是系统行为和API真实性的权威。 这个存储库定义了 合同的形状,而不是实现或业务逻辑。
版本控制
发布是自动化的。 semantic-release 读取常规提交消息 main 并决定
他写道: CHANGELOG.md,标记,并发布到npm。 不要编辑 version 场
package.json 用手 - CI拥有它。
commit前缀决定了bump:
fix:→ 补丁,向后兼容的修复feat:→ 小,向后兼容的添加feat!:或者一个BREAKING CHANGE:页脚→ 主要的
因为碰撞是从提交消息而不是从模式差异派生的,所以中断
提交的更改 fix: 将作为补丁发布。字段删除和重命名必须带有分隔符
标记。
消费者确定一个符号范围,并通过审查升级。
变化的规则
任何契约变更都必须谨慎对待,因为它可能影响多个代码库。 在合并更改之前:
- 确认更改确实是跨堆栈的
- 确定它是否断开或不断开
- 适当更新版本
- 如果消费者需要更改代码,则记录迁移说明
结构
每个域一个文件夹,每个导出 *.enums.ts, *.schemas.ts 和 *.types.ts 通过一个
index.ts 桶。
src/
auth/ user/ event/
booking/ marketplace/ joblisting/
host/ moment/ chat/
payment/ streaming/ dispute/
notification/ common/ errors/
index.ts # master barrel
common/ 持有 CurrencyEnum、分页、审计枚举和 ResponseMessages; errors/ 拥有
ApiErrorCode 目录; booking/ 另外拥有 booking-state-machine.ts -有效的
转换、每个转换参与者RBAC以及哪些目标状态需要 reason.
添加域意味着三次编辑:创建包含其的文件夹 index.ts,重新出口
src/index.ts, 把它加到 entry 数组中 tsup.config.ts -错过了最后一个和
@livdot-tech/contracts/<domain> Subpath解析为空。
安装与使用
npm install @livdot-tech/contracts zod
zod 是一个 同行的依赖,而不是捆绑——包没有运行时依赖,并且保持
Zod在消费者端意味着只有一个Zod实例在运行。
import { BookingState, CurrencyEnum } from '@livdot-tech/contracts';
import { VALID_BOOKING_TRANSITIONS } from '@livdot-tech/contracts/booking';
看到 文档/ README.md 有关使用详情,请参阅 文档/ ONBOARDING.md 对于设置,以及 架构/ SAD.md 加上 架构决策/ 对于设计决策。
目标
保持契约明确、版本化和稳定。
这个存储库的存在是为了提高后端、前端和移动端的一致性,同时在独立的LivDot代码库之间保持清晰的所有权界限。