# nest-demo **Repository Path**: felikschen/nest-demo ## Basic Information - **Project Name**: nest-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-06 - **Last Updated**: 2026-08-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # StockFlow 一个用于学习 NestJS、PostgreSQL 和 Vue 3 的采购与库存管理案例。项目不是接口演示集合,而是围绕采购入库建立了可操作、可追溯的业务闭环。 ## 当前功能 - JWT 登录与基于角色的接口权限(RBAC) - 商品、供应商和仓库基础资料 - 采购单创建、提交、审批、取消 - 分批采购入库与入库记录 - 库存余额、库存流水和低库存判断 - 工作台统计与近期采购单 - Swagger API 文档、DTO 校验、统一分页 - PostgreSQL 可串行化事务及冲突重试 采购单状态流转: ```text 草稿 -> 待审批 -> 已审批 -> 部分入库 -> 已入库 | | | +--------+----------+-> 已取消 ``` 一次入库在同一个数据库事务中完成:创建入库单、累计已收数量、更新库存余额、记录库存流水、更新采购单状态。 ## 技术栈 - `apps/api`: NestJS 11、Prisma 6、PostgreSQL、Passport JWT、Swagger - `apps/web`: Vue 3、Vite、TypeScript、Pinia、Vue Router、Element Plus - 工程管理:pnpm workspace、Docker Compose ## 本地启动 需要 Node.js 22+、pnpm 10+ 和 Docker Desktop。 ```bash pnpm install docker compose up -d pnpm db:generate pnpm --filter @stockflow/api exec prisma migrate deploy pnpm db:seed pnpm dev ``` 启动后访问: - 管理后台:http://localhost:5173 - API:http://localhost:3000/api - Swagger:http://localhost:3000/docs 演示账号的密码均为 `Stockflow123`: | 账号 | 角色 | 典型权限 | | --- | --- | --- | | `admin@stockflow.local` | 系统管理员 | 全部操作、审批采购单 | | `buyer@stockflow.local` | 采购专员 | 维护资料、创建和提交采购单 | | `warehouse@stockflow.local` | 仓库主管 | 执行采购入库 | | `viewer@stockflow.local` | 经营分析员 | 只读查询 | 种子数据还会创建两个仓库、三个供应商、六个商品,以及一张已经审批、可直接入库的 `PO-DEMO-001`。 ## 常用命令 ```bash pnpm dev # 同时启动 API 和 Web pnpm dev:api # 只启动 NestJS pnpm dev:web # 只启动 Vue pnpm typecheck # 全仓严格类型检查 pnpm build # 生产构建 pnpm db:migrate # 创建开发迁移 pnpm db:seed # 重置/补齐演示数据 ``` ## 项目结构 ```text apps/ api/ prisma/ # 数据模型、迁移、种子数据 src/auth/ # JWT、当前用户、角色守卫 src/products/ # 商品资料 src/suppliers/ # 供应商资料 src/purchase-orders/ # 状态流转与事务化入库 src/inventory/ # 库存余额和流水 src/dashboard/ # 经营统计 web/ src/api/ # Axios 实例与认证处理 src/layouts/ # 后台布局 src/stores/ # Pinia 登录状态 src/views/ # 业务页面 ``` ## 推荐学习顺序 1. 从 `schema.prisma` 理解采购、入库和库存三组模型的关系。 2. 跟踪登录请求,理解全局 JWT 守卫、公开路由和角色装饰器。 3. 从创建采购单学习 DTO 校验、关联校验和 Decimal 金额计算。 4. 重点阅读 `receiveInTransaction`,观察多表写入、库存并发与状态更新。 5. 从 Vue 页面跟踪 Pinia、路由守卫、Axios 拦截器和表单交互。 下一阶段适合加入销售出库、库存盘点、库存调整审批、操作审计、Excel 导入导出、BullMQ 库存预警和端到端测试。