fix(backend): JWT config mapstructure tag 修复 + 模型从 hotel 重构为 shop
- 修复 JWTConfig 缺少 mapstructure tag 导致 access_expire_min 解析为 0, token 签发即过期,所有 API 请求返回 401 - 全部 config struct 补齐 mapstructure tag(secret/dsn/hmac_secret 等) - 模型层从 hotel/HotelID 统一重命名为 shop/ShopID - 删除旧 migrations(001-004),新增 001_init 综合迁移文件 - 更新 schema.sql、testutil、handler/service/model 相关引用 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,8 +4,8 @@
|
||||
|
||||
## 项目简介
|
||||
|
||||
面向酒店的酒水仓库管理系统。核心特点:
|
||||
- **多租户**:一个账号对应一个酒店,数据完全隔离(通过 `hotel_id` 字段)
|
||||
面向酒水门店的仓库管理系统。核心特点:
|
||||
- **多租户**:一个账号对应一个门店,数据完全隔离(通过 `shop_id` 字段)
|
||||
- **付费授权**:许可证绑定设备 ID,支持试用/年付/买断
|
||||
- **跨端客户端**:Flutter 单一代码库,支持 Windows / Web / macOS / iOS / Android
|
||||
|
||||
@@ -64,8 +64,8 @@ jiu/
|
||||
|
||||
```yaml
|
||||
主要表:
|
||||
hotels: # 酒店(租户)
|
||||
users: # 用户(含 hotel_id)
|
||||
shops: # 酒店(租户)
|
||||
users: # 用户(含 shop_id)
|
||||
licenses: # 许可证(含 device_id 绑定)
|
||||
products: # 商品(含 custom_fields JSON 动态扩展)
|
||||
warehouses: # 仓库
|
||||
@@ -74,7 +74,7 @@ jiu/
|
||||
stock_in_items: # 入库单明细
|
||||
stock_out_orders: # 出库单
|
||||
stock_out_items: # 出库单明细
|
||||
inventory: # 实时库存(唯一键:hotel_id+warehouse_id+product_id)
|
||||
inventory: # 实时库存(唯一键:shop_id+warehouse_id+product_id)
|
||||
inventory_logs: # 库存流水(每次变动记录)
|
||||
inventory_checks: # 盘点单
|
||||
finance_records: # 财务流水
|
||||
@@ -83,7 +83,7 @@ jiu/
|
||||
|
||||
## 关键业务规则
|
||||
|
||||
1. **多租户**:所有查询必须带 `hotel_id` 条件,`hotel_id` 只从 JWT 获取,不信任请求参数
|
||||
1. **多租户**:所有查询必须带 `shop_id` 条件,`shop_id` 只从 JWT 获取,不信任请求参数
|
||||
2. **库存变更**:入库/出库审核通过时,在同一事务中更新 `inventory` + 写 `inventory_logs`
|
||||
3. **出库前检查**:出库审核时必须校验库存充足,不足时返回错误并回滚事务
|
||||
4. **单号生成**:通过 `number_rules` 表事务安全生成,格式 `{前缀}{日期}{6位序号}`
|
||||
|
||||
Reference in New Issue
Block a user