优化结构
This commit is contained in:
parent
5a548e0725
commit
56980c8087
|
|
@ -31,7 +31,7 @@ Thumbs.db
|
||||||
*.key
|
*.key
|
||||||
*.log
|
*.log
|
||||||
bin/
|
bin/
|
||||||
/cmd/kratos-admin/kratos-admin
|
/bin/kratos-admin
|
||||||
|
|
||||||
# Develop tools
|
# Develop tools
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
@ -41,4 +41,4 @@ bin/
|
||||||
|
|
||||||
web/dist/
|
web/dist/
|
||||||
web/node_modules/
|
web/node_modules/
|
||||||
.pnpm-store/
|
.pnpm-store/
|
||||||
|
|
|
||||||
2
Makefile
2
Makefile
|
|
@ -21,7 +21,7 @@ api:
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
# build
|
# build
|
||||||
build:
|
build:
|
||||||
mkdir -p bin/ && go build -ldflags "-X main.Version=$(VERSION)" -o ./bin/ ./...
|
mkdir -p bin/ && go build -ldflags "-X main.Version=$(VERSION)" -o ./bin/kratos-admin ./cmd
|
||||||
|
|
||||||
.PHONY: generate
|
.PHONY: generate
|
||||||
# generate
|
# generate
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ Kra 是基于 Kratos 生命周期与 Wire 依赖注入、使用 Gin 提供管理
|
||||||
## 目录
|
## 目录
|
||||||
|
|
||||||
```text
|
```text
|
||||||
cmd/kratos-admin/ 服务入口与 Wire
|
cmd/ 服务入口与 Wire
|
||||||
configs/ 运行配置
|
configs/ 运行配置
|
||||||
internal/biz/ 领域对象、用例和仓储接口
|
internal/biz/ 领域对象、用例和仓储接口
|
||||||
internal/data/ 数据库、缓存、对象存储及仓储实现
|
internal/data/ 数据库、缓存、对象存储及仓储实现
|
||||||
|
|
@ -20,7 +20,7 @@ web/ Vue 管理端
|
||||||
先修改 `configs/config.yaml`。首次启动时,如果目标数据库不可用,服务会保留初始化接口;在管理端初始化页面完成建库、建表和种子数据写入后即可登录。
|
先修改 `configs/config.yaml`。首次启动时,如果目标数据库不可用,服务会保留初始化接口;在管理端初始化页面完成建库、建表和种子数据写入后即可登录。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
go run ./cmd/kratos-admin -conf ./configs
|
go run ./cmd -conf ./configs
|
||||||
```
|
```
|
||||||
|
|
||||||
默认 HTTP 地址为 `http://127.0.0.1:8000`。生产环境必须替换 JWT 签名密钥和数据库凭据。
|
默认 HTTP 地址为 `http://127.0.0.1:8000`。生产环境必须替换 JWT 签名密钥和数据库凭据。
|
||||||
|
|
@ -48,7 +48,7 @@ make config
|
||||||
修改 Wire Provider 或构造函数后执行:
|
修改 Wire Provider 或构造函数后执行:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
go generate ./cmd/kratos-admin
|
go generate ./cmd
|
||||||
```
|
```
|
||||||
|
|
||||||
## 检查
|
## 检查
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ Kra 管理后台由 Kratos 应用承载生命周期,Gin 提供兼容管理端
|
||||||
## 验证
|
## 验证
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
go generate ./cmd/kratos-admin
|
go generate ./cmd
|
||||||
go test ./...
|
go test ./...
|
||||||
go vet ./...
|
go vet ./...
|
||||||
go build ./...
|
go build ./...
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# `app/system` 到 `pkg` 复用性审查
|
# `` 到 `pkg` 复用性审查
|
||||||
|
|
||||||
审查原则:公共包只提供跨模块稳定的机制、协议或无状态纯函数;不能依赖
|
审查原则:公共包只提供跨模块稳定的机制、协议或无状态纯函数;不能依赖
|
||||||
`app/*/internal`,也不承载 system 的业务表、用例、provider 客户端或运行时
|
`app/*/internal`,也不承载 system 的业务表、用例、provider 客户端或运行时
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# `app/system/internal` 目录结构优化结论
|
# `internal` 目录结构优化结论
|
||||||
|
|
||||||
参考 Go Kratos 的分层方式,顶层保留 `app`、`biz`、`conf`、`data`、
|
参考 Go Kratos 的分层方式,顶层保留 `app`、`biz`、`conf`、`data`、
|
||||||
`initialize`、`integration`、`security`、`server`、`service`、`worker` 十个
|
`initialize`、`integration`、`security`、`server`、`service`、`worker` 十个
|
||||||
|
|
|
||||||
|
|
@ -13,4 +13,4 @@
|
||||||
- `protoutil`:与业务无关的 protobuf JSON 局部合并工具
|
- `protoutil`:与业务无关的 protobuf JSON 局部合并工具
|
||||||
|
|
||||||
`pkg` 只能提供机制和稳定协议,不能引用任何 `app/*/internal`。数据库配置加载、
|
`pkg` 只能提供机制和稳定协议,不能引用任何 `app/*/internal`。数据库配置加载、
|
||||||
系统集成配置、系统表和 provider 生命周期仍由 `app/system` 负责。
|
系统集成配置、系统表和 provider 生命周期仍由 `` 负责。
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ func TestErrorEntryIncludesFinalApplicationSource(t *testing.T) {
|
||||||
if err := os.WriteFile(filename, []byte(content), 0o600); err != nil {
|
if err := os.WriteFile(filename, []byte(content), 0o600); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
entry := errorEntryFromZap(zapcore.Entry{Message: "task failed", Level: zapcore.ErrorLevel, Stack: "kra/app/system/internal/worker.execute\n" + filename + ":4"}, nil)
|
entry := errorEntryFromZap(zapcore.Entry{Message: "task failed", Level: zapcore.ErrorLevel, Stack: "kra/internal/worker.execute\n" + filename + ":4"}, nil)
|
||||||
if !strings.Contains(entry.Info, "最终调用方法:"+filename+":4 (execute lines 3-5)") || !strings.Contains(entry.Info, "func execute()") {
|
if !strings.Contains(entry.Info, "最终调用方法:"+filename+":4 (execute lines 3-5)") || !strings.Contains(entry.Info, "func execute()") {
|
||||||
t.Fatalf("expected final caller source in error entry: %s", entry.Info)
|
t.Fatalf("expected final caller source in error entry: %s", entry.Info)
|
||||||
}
|
}
|
||||||
|
|
@ -103,12 +103,12 @@ func TestSkipStackFileRecognizesServerTransportPackages(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
{name: "handler", path: `D:\workspace\app\system\internal\server\handler\user.go`, want: true},
|
{name: "handler", path: `D:\workspace\app\system\internal\server\handler\user.go`, want: true},
|
||||||
{name: "middleware", path: `D:\workspace\app\system\internal\server\middleware\auth.go`, want: true},
|
{name: "middleware", path: `D:\workspace\app\system\internal\server\middleware\auth.go`, want: true},
|
||||||
{name: "router", path: `/workspace/app/system/internal/server/router/user.go`, want: true},
|
{name: "router", path: `/workspace/internal/server/router/user.go`, want: true},
|
||||||
{name: "http helper", path: `/workspace/app/system/internal/server/httpx/response.go`, want: true},
|
{name: "http helper", path: `/workspace/internal/server/httpx/response.go`, want: true},
|
||||||
{name: "legacy flattened middleware", path: `D:\workspace\app\system\internal\server\middleware_auth.go`, want: true},
|
{name: "legacy flattened middleware", path: `D:\workspace\app\system\internal\server\middleware_auth.go`, want: true},
|
||||||
{name: "legacy flattened route", path: `/workspace/app/system/internal/server/route_user.go`, want: true},
|
{name: "legacy flattened route", path: `/workspace/internal/server/route_user.go`, want: true},
|
||||||
{name: "handler remains application boundary", path: `/workspace/app/system/internal/server/handler_user.go`, want: false},
|
{name: "handler remains application boundary", path: `/workspace/internal/server/handler_user.go`, want: false},
|
||||||
{name: "legacy middleware", path: `/workspace/app/system/internal/transport/middleware/auth.go`, want: true},
|
{name: "legacy middleware", path: `/workspace/internal/transport/middleware/auth.go`, want: true},
|
||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
Stateless payment protocol helpers live here: amount conversion, status
|
Stateless payment protocol helpers live here: amount conversion, status
|
||||||
normalization, JSON/XML extraction, and request signing. Provider adapters and
|
normalization, JSON/XML extraction, and request signing. Provider adapters and
|
||||||
their SDK clients remain under `app/system/internal/integration/payment`.
|
their SDK clients remain under `internal/integration/payment`.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue