DanXi & OpenTreeHole 后端
# 克隆本项目
git clone https://github.com/OpenTreeHole/backend.git
cd chatdan_backend
# 安装 swaggo 并且生成 API 文档
go install github.com/swaggo/swag/cmd/swag@latest
cd danke && swag init --pd --parseDepth 1
# 运行
go run danke/.
# 在 docker 中运行
docker compose up
API 文档详见启动项目之后的 http://localhost:8000/docs
docker run -d \
--name opentreehole_backend \
-p 8000:8000 \
-v opentreehole_data:/app/data \
opentreehole/backend:latest
修改 docker-compose.yml
环境变量:
TZ
: 生产环境默认Asia/Shanghai
MODE
: 开发环境默认dev
, 生产环境默认production
, 可选test
,bench
LOG_LEVEL
: 开发环境默认debug
, 生产环境默认info
, 可选warn
,error
,panic
,fatal
PORT
: 默认 8000DB_TYPE
: 默认sqlite
, 可选mysql
,postgres
DB_URL
: 默认sqlite.db
CACHE_TYPE
: 默认memory
, 可选redis
CACHE_URL
: 默认为空
数据卷:
/app/data
: 数据库文件存放位置
- 基于数据流的分层架构。本项目分层为
api
->model
。api
中包含所有的路由处理函数,负责接收请求和返回响应,其中的请求和响应模型定义在schema
中。model
中包含所有的数据库模型定义,负责数据库的 CURD 操作。- 简单的 CURD 操作可以直接在
api
中完成,复杂的、共享的业务逻辑应该在model
中完成。
- 分离接口请求和响应模型
schema
和数据库模型model
。api
接受和发送都只能使用schema
,数据库、缓存操作只能使用model
。- 如果
model
和schema
之间的转换逻辑冗余,可以在schema
中定义类似func (s *Schema) FromModel(m *Model) *Schema
和func (s *Schema) ToModel() *Model
绑定函数,保证模块的引用顺序是schema
->model
,避免循环引用。 - 避免在
model
和schema
中作数据库、缓存的CURD,这些都应该在加载model
时完成。 - 如果模型转换时需要用到其他辅助数据,需要作为函数参数传入转换函数。
- 迁移旧项目到此处
JingYiJun - [email protected]
Danxi-Dev - [email protected]