mirror of
https://github.com/tnb-labs/panel.git
synced 2026-09-01 14:55:12 +08:00
443516a2cf
依赖注入:
- 移除 google/wire(含 wire.go/wire_gen.go 与全部 ProviderSet),
改用 samber/do v2 单注入器 + 双入口惰性构建
- 贡献模型替代命令式注册:路由 routes:、命令 commands:、
任务 jobs: 前缀经 internal/registry 收集与校验
- 构造函数统一 func NewXxx(i do.Injector) (T, error)
三层架构:
- 补全用例层:每个 biz.XxxRepo 配 XxxUsecase,
service/command/job 表现层只依赖用例,不再直接引用仓储
路由与文档:
- route/http.go 按域拆为声明式 Endpoint 贡献,
Endpoint 承载登录白名单与端点限流语义
- 调试模式下提供 OpenAPI 3.1 文档:/openapi.json 与 /docs(Scalar),
从 validate 标签生成
目录与依赖:
- internal/http/{middleware,request,rule} 拍平至 internal/*
- CLI 命令拆至 internal/command
- 日志轮转 timberjack 换为 libtnb/logrotate
- 升级 validator/cron/sessions/gormstore/sqlite/securecookie
- 数据库迁移保持 gormigrate 不变
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
52 lines
2.8 KiB
Go
52 lines
2.8 KiB
Go
package request
|
|
|
|
import "github.com/acepanel/panel/v3/pkg/types"
|
|
|
|
type ProjectCreate struct {
|
|
Name string `form:"name" json:"name" validate:"required && regex:\"^[a-zA-Z0-9_-]+$\""`
|
|
Type types.ProjectType `form:"type" json:"type" validate:"required && in:general,php,java,go,python,nodejs,dotnet"`
|
|
Description string `form:"description" json:"description"`
|
|
RootDir string `form:"root_dir" json:"root_dir"`
|
|
WorkingDir string `form:"working_dir" json:"working_dir"`
|
|
ExecStart string `form:"exec_start" json:"exec_start"`
|
|
User string `form:"user" json:"user"`
|
|
Restart string `json:"restart"`
|
|
Environments []types.KV
|
|
}
|
|
|
|
type ProjectUpdate struct {
|
|
ID uint `form:"id" json:"id" validate:"required && exists:projects,id"`
|
|
Name string `form:"name" json:"name" validate:"required && regex:\"^[a-zA-Z0-9_-]+$\""`
|
|
Description string `form:"description" json:"description"`
|
|
RootDir string `form:"root_dir" json:"root_dir" validate:"required"`
|
|
WorkingDir string `form:"working_dir" json:"working_dir"`
|
|
ExecStartPre string `form:"exec_start_pre" json:"exec_start_pre"`
|
|
ExecStartPost string `form:"exec_start_post" json:"exec_start_post"`
|
|
ExecStart string `form:"exec_start" json:"exec_start"`
|
|
ExecStop string `form:"exec_stop" json:"exec_stop"`
|
|
ExecReload string `form:"exec_reload" json:"exec_reload"`
|
|
User string `form:"user" json:"user"`
|
|
Restart string `json:"restart"`
|
|
RestartSec string `json:"restart_sec"`
|
|
RestartMax int `json:"restart_max" validate:"min:0"`
|
|
TimeoutStartSec int `json:"timeout_start_sec" validate:"min:0"`
|
|
TimeoutStopSec int `json:"timeout_stop_sec" validate:"min:0"`
|
|
Environments []types.KV `form:"environments" json:"environments"`
|
|
StandardOutput string `form:"standard_output" json:"standard_output"`
|
|
StandardError string `form:"standard_error" json:"standard_error"`
|
|
Requires []string `form:"requires" json:"requires"`
|
|
Wants []string `form:"wants" json:"wants"`
|
|
After []string `form:"after" json:"after"`
|
|
Before []string `form:"before" json:"before"`
|
|
|
|
MemoryLimit float64 `form:"memory_limit" json:"memory_limit" validate:"min:0"`
|
|
CPUQuota string `form:"cpu_quota" json:"cpu_quota"`
|
|
|
|
NoNewPrivileges bool `form:"no_new_privileges" json:"no_new_privileges"`
|
|
ProtectTmp bool `form:"protect_tmp" json:"protect_tmp"`
|
|
ProtectHome bool `form:"protect_home" json:"protect_home"`
|
|
ProtectSystem string `form:"protect_system" json:"protect_system"`
|
|
ReadWritePaths []string `form:"read_write_paths" json:"read_write_paths"`
|
|
ReadOnlyPaths []string `form:"read_only_paths" json:"read_only_paths"`
|
|
}
|