2025-07-13 16:36:20 +08:00
|
|
|
|
# TYAPI Server
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
基于 DDD 和 Clean Architecture 的企业级后端 API 服务,采用 Gin 框架构建,支持用户管理、JWT 认证、企业认证、财务管理等功能。
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
### 启动服务
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 开发模式启动
|
|
|
|
|
|
make dev
|
|
|
|
|
|
|
|
|
|
|
|
# 或者直接运行
|
|
|
|
|
|
go run cmd/api/main.go
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### API 文档
|
|
|
|
|
|
|
|
|
|
|
|
启动服务后,可以通过以下地址访问 API 文档:
|
|
|
|
|
|
|
|
|
|
|
|
- **Swagger UI**: http://localhost:8080/swagger/index.html
|
|
|
|
|
|
- **API 文档信息**: http://localhost:8080/api/docs
|
|
|
|
|
|
- **重定向地址**: http://localhost:8080/docs
|
|
|
|
|
|
|
|
|
|
|
|
详细的 API 文档使用说明请参考:[docs/swagger/README.md](docs/swagger/README.md)
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 功能特性
|
|
|
|
|
|
|
|
|
|
|
|
- 🔐 **用户认证**: 支持密码登录和短信验证码登录
|
|
|
|
|
|
- 👤 **用户管理**: 用户注册、信息管理、密码修改
|
|
|
|
|
|
- 👨💼 **管理员系统**: 管理员认证和权限管理
|
|
|
|
|
|
- 🏢 **企业认证**: 企业信息认证、营业执照上传、人脸验证
|
|
|
|
|
|
- 💰 **财务管理**: 钱包管理、充值提现、交易记录
|
|
|
|
|
|
- 🔑 **密钥管理**: API 访问密钥的创建和管理
|
|
|
|
|
|
- 📊 **监控统计**: 完整的业务数据统计和分析
|
|
|
|
|
|
|
|
|
|
|
|
## 🏗️ 技术架构
|
|
|
|
|
|
|
|
|
|
|
|
- **框架**: Gin (Go Web Framework)
|
|
|
|
|
|
- **架构**: DDD + Clean Architecture
|
|
|
|
|
|
- **数据库**: PostgreSQL + GORM
|
|
|
|
|
|
- **缓存**: Redis
|
|
|
|
|
|
- **认证**: JWT
|
|
|
|
|
|
- **文档**: Swagger/OpenAPI
|
|
|
|
|
|
- **依赖注入**: Uber FX
|
|
|
|
|
|
- **日志**: Zap
|
|
|
|
|
|
- **配置**: Viper
|
|
|
|
|
|
|
|
|
|
|
|
## 📁 项目结构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
tyapi-server-gin/
|
|
|
|
|
|
├── cmd/api/ # 应用入口
|
|
|
|
|
|
├── internal/ # 内部包
|
|
|
|
|
|
│ ├── app/ # 应用层
|
|
|
|
|
|
│ ├── application/ # 应用服务层
|
|
|
|
|
|
│ ├── config/ # 配置管理
|
|
|
|
|
|
│ ├── container/ # 依赖注入容器
|
|
|
|
|
|
│ ├── domains/ # 领域层
|
|
|
|
|
|
│ ├── infrastructure/ # 基础设施层
|
|
|
|
|
|
│ └── shared/ # 共享组件
|
|
|
|
|
|
├── docs/swagger/ # API 文档
|
|
|
|
|
|
├── scripts/ # 脚本文件
|
|
|
|
|
|
└── deployments/ # 部署配置
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔧 开发指南
|
|
|
|
|
|
|
|
|
|
|
|
### 环境要求
|
|
|
|
|
|
|
|
|
|
|
|
- Go 1.23+
|
|
|
|
|
|
- PostgreSQL 12+
|
|
|
|
|
|
- Redis 6+
|
|
|
|
|
|
- Docker (可选)
|
|
|
|
|
|
|
|
|
|
|
|
### 安装依赖
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 安装 Go 依赖
|
|
|
|
|
|
go mod download
|
|
|
|
|
|
go mod tidy
|
|
|
|
|
|
|
|
|
|
|
|
# 安装开发工具
|
|
|
|
|
|
go install github.com/swaggo/swag/cmd/swag@latest
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 数据库迁移
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 运行数据库迁移
|
|
|
|
|
|
make migrate
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 更新 API 文档
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 使用 Makefile
|
|
|
|
|
|
make docs
|
|
|
|
|
|
|
|
|
|
|
|
# 使用 PowerShell 脚本 (Windows)
|
|
|
|
|
|
.\scripts\update-docs.ps1
|
|
|
|
|
|
|
|
|
|
|
|
# 更新文档并重启服务器
|
|
|
|
|
|
.\scripts\update-docs.ps1 -Restart
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🐳 Docker 部署
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 开发环境
|
|
|
|
|
|
docker-compose -f docker-compose.dev.yml up -d
|
|
|
|
|
|
|
|
|
|
|
|
# 生产环境
|
|
|
|
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📝 配置系统
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
TYAPI 服务端采用分层配置系统,使配置管理更加灵活和清晰:
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
1. **基础配置文件** (`config.yaml`): 包含所有配置项和默认值
|
|
|
|
|
|
2. **环境特定配置文件** (`configs/env.<环境>.yaml`): 包含特定环境需要覆盖的配置项
|
|
|
|
|
|
3. **环境变量**: 可以覆盖任何配置项,优先级最高
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
### 配置文件格式
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
所有配置文件采用 YAML 格式,保持相同的结构层次。
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
#### 基础配置文件 (config.yaml)
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
包含所有配置项和默认值,作为配置的基础。
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
#### 环境配置文件
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
环境配置文件只需包含需要覆盖的配置项,保持与基础配置相同的层次结构:
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
- `configs/env.development.yaml`: 开发环境配置
|
|
|
|
|
|
- `configs/env.testing.yaml`: 测试环境配置
|
|
|
|
|
|
- `configs/env.production.yaml`: 生产环境配置
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
### 配置加载顺序
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
系统按以下顺序加载配置,后加载的会覆盖先加载的:
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
1. 首先加载基础配置文件 `config.yaml`
|
|
|
|
|
|
2. 然后加载环境特定配置文件 `configs/env.<环境>.yaml`
|
|
|
|
|
|
3. 最后应用环境变量覆盖
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
### 环境确定方式
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
系统按以下优先级确定当前环境:
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
1. `CONFIG_ENV` 环境变量
|
|
|
|
|
|
2. `ENV` 环境变量
|
|
|
|
|
|
3. `APP_ENV` 环境变量
|
|
|
|
|
|
4. 默认值 `development`
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
### 统一配置项
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
某些配置项在所有环境中保持一致,直接在基础配置文件中设置:
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
1. **短信配置**: 所有环境使用相同的短信服务配置
|
|
|
|
|
|
2. **基础服务地址**: 如第三方服务端点等
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
### 使用示例
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
#### 基础配置 (config.yaml)
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
app:
|
|
|
|
|
|
name: "TYAPI Server"
|
|
|
|
|
|
version: "1.0.0"
|
|
|
|
|
|
env: "development"
|
|
|
|
|
|
|
|
|
|
|
|
database:
|
|
|
|
|
|
host: "localhost"
|
|
|
|
|
|
port: "5432"
|
|
|
|
|
|
user: "postgres"
|
2025-07-02 16:17:59 +08:00
|
|
|
|
password: "default_password"
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
# 统一的短信配置
|
|
|
|
|
|
sms:
|
|
|
|
|
|
access_key_id: "LTAI5tKGB3TVJbMHSoZN3yr9"
|
|
|
|
|
|
access_key_secret: "OCQ30GWp4yENMjmfOAaagksE18bp65"
|
|
|
|
|
|
endpoint_url: "dysmsapi.aliyuncs.com"
|
2025-06-30 19:21:56 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
#### 环境配置 (configs/env.production.yaml)
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
```yaml
|
|
|
|
|
|
app:
|
|
|
|
|
|
env: "production"
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
database:
|
|
|
|
|
|
host: "prod-db.example.com"
|
|
|
|
|
|
password: "prod_secure_password"
|
2025-06-30 19:21:56 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
#### 运行时
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-07-02 16:17:59 +08:00
|
|
|
|
# 使用开发环境配置
|
|
|
|
|
|
go run cmd/api/main.go
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
# 使用生产环境配置
|
|
|
|
|
|
ENV=production go run cmd/api/main.go
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
# 使用环境变量覆盖特定配置
|
|
|
|
|
|
ENV=production DB_PASSWORD=custom_password go run cmd/api/main.go
|
2025-06-30 19:21:56 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
### 敏感信息处理
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
对于敏感信息(如密码、密钥等):
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
1. 开发环境:可以放在环境配置文件中
|
|
|
|
|
|
2. 生产环境:应通过环境变量注入,不应出现在配置文件中
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-13 16:36:20 +08:00
|
|
|
|
### 配置验证
|
2025-06-30 19:21:56 +08:00
|
|
|
|
|
2025-07-02 16:17:59 +08:00
|
|
|
|
系统在启动时会验证必要的配置项,确保应用能够正常运行。如果缺少关键配置,系统将拒绝启动并提供明确的错误信息。
|
2025-07-13 16:36:20 +08:00
|
|
|
|
|
|
|
|
|
|
## 📚 相关文档
|
|
|
|
|
|
|
|
|
|
|
|
- [API 文档使用指南](docs/swagger/README.md)
|
|
|
|
|
|
- [开发指南](docs/开始指南/开发指南.md)
|
|
|
|
|
|
- [架构设计文档](docs/开始指南/架构设计文档.md)
|
|
|
|
|
|
- [部署指南](docs/开始指南/部署指南.md)
|
|
|
|
|
|
|
|
|
|
|
|
## 🤝 贡献指南
|
|
|
|
|
|
|
|
|
|
|
|
1. Fork 本仓库
|
|
|
|
|
|
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
|
|
|
|
|
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
|
|
|
|
|
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
|
|
|
|
|
5. 打开 Pull Request
|
|
|
|
|
|
|
|
|
|
|
|
## 📄 许可证
|
|
|
|
|
|
|
|
|
|
|
|
本项目采用 Apache 2.0 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
|