Files
panel/internal/request/project.go
T
耗子 443516a2cf refactor!: 迁移至 samber/do 依赖注入与三层架构
依赖注入:
- 移除 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>
2026-07-09 21:54:22 +08:00

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"`
}