Maksutov Design MAKSUTOV DESIGN
v0.3.1 最新 NestJS Next.js 14 Expo YooKassa

Rigs Market

户外与运动装备租赁市场:房源信息、地图、预订、聊天、通过YooKassa收取押金、移动应用及商家后台。页面展示的是整个租赁流程,而不仅仅是展示页面。

01 / product scope

Rigs围绕一条链路运转:搜索 → 预订 → 支付 → 交付 → 归还

3 个单体仓库中的应用:API、web与mobile。
15 个NestJS模块:租赁、支付、聊天、搜索、后台管理及后台任务。
84 个旧页面中的API端点:REST API加上用于聊天的WebSocket。
0 个TypeScript错误(`v0.2.0`与`v0.3.0`版本发布之后)。

02 / stack & tags

一个TypeScript单体仓库:同一类型贯穿API、web与mobile

Rigs从两端运转:租客在地图上寻找装备,房东收到预订,支付模块保管押金,而聊天功能则在交付前解决有争议的细节。

代码中展示了`@rigs/types`、API、web与mobile之间的关联。如果预订或支付模型发生变化,这一变化应在所有部分中可见,而不是在支付完成后才以错误的形式暴露出来。

UX/UI NestJS Next.js TypeScript Expo Mapbox Socket.io YooKassa PostGIS Redis Elasticsearch MinIO Turborepo
TypeScript
99.2%
CSS
0.7%
Dockerfile
0.1%
JavaScript
0.0%

03 / release log

Rigs的版本发布聚焦于支付、安全及移动端兼容性

v0.3.1

支付Webhook与押金冻结热修复

一次简短的版本发布:修复了两个可能导致用户损失资金或卡在错误状态的场景。

  • YooKassa的webhook不再因`Authorization: Bearer`比较错误而被拒绝。
  • 支付成功后,预订会正确进入`paid/completed`状态,而不再处于悬而未决的状态。
  • 自动取消逾期预订时,会为每条记录调用`cancelDepositHold()`。
release notes
v0.3.0

Security Hardening & Code Quality

一次API审计之后的版本发布:安全性、日志记录、Socket.io类型化,以及规范的环境配置。

  • 新增`helmet`,Socket.io的CORS从`origin: '*'`改为基于`WEB_URL`的白名单。
  • `HttpLoggerMiddleware`现在会记录请求方法、路径、状态码及响应时间。
  • Socket.io新增类型化事件:`ServerToClientEvents`与`ClientToServerEvents`。
release notes
v0.2.0

Expo SDK 54迁移

移动端从Expo SDK 51全面升级到SDK 54。版本说明中分别记录了严重、中等及轻微修复。

  • `expo-router`升级至v6,路由已重写为类型化对象。
  • `expo-notifications`升级至v0.32:改用banner/list形式,替代已废弃的alert API。
  • 迁移完成后`npx tsc --noEmit`显示0个错误。
release notes

04 / file map

关键文件

05 / next projects