diff --git a/internal/biz/container_compose.go b/internal/biz/container_compose.go index 28a9f8b2..4e3a9852 100644 --- a/internal/biz/container_compose.go +++ b/internal/biz/container_compose.go @@ -4,6 +4,7 @@ type ContainerComposeRepo interface { List() ([]string, error) Get(name string) (string, string, error) Create(name, compose, env string) error + Update(name, compose, env string) error Up(name string, force bool) error Down(name string) error Remove(name string) error diff --git a/internal/data/container_compose.go b/internal/data/container_compose.go index 36161fdc..f2d9bbf1 100644 --- a/internal/data/container_compose.go +++ b/internal/data/container_compose.go @@ -60,6 +60,19 @@ func (r *containerComposeRepo) Create(name, compose, env string) error { return nil } +// Update 更新编排文件 +func (r *containerComposeRepo) Update(name, compose, env string) error { + dir := filepath.Join(app.Root, "server", "compose", name) + if err := os.WriteFile(filepath.Join(dir, "docker-compose.yml"), []byte(compose), 0644); err != nil { + return err + } + if err := os.WriteFile(filepath.Join(dir, ".env"), []byte(env), 0644); err != nil { + return err + } + + return nil +} + // Up 启动编排 func (r *containerComposeRepo) Up(name string, force bool) error { file := filepath.Join(app.Root, "server", "compose", name, "docker-compose.yml") diff --git a/internal/http/request/container_compose.go b/internal/http/request/container_compose.go index b78855ef..88e11dc9 100644 --- a/internal/http/request/container_compose.go +++ b/internal/http/request/container_compose.go @@ -10,6 +10,12 @@ type ContainerComposeCreate struct { Env string `json:"env"` } +type ContainerComposeUpdate struct { + Name string `uri:"name" validate:"required"` + Compose string `json:"compose" validate:"required"` + Env string `json:"env"` +} + type ContainerComposeUp struct { Name string `uri:"name" validate:"required"` Force bool `json:"force"` diff --git a/internal/service/container_compose.go b/internal/service/container_compose.go index ceee803f..f62c1b33 100644 --- a/internal/service/container_compose.go +++ b/internal/service/container_compose.go @@ -68,6 +68,21 @@ func (s *ContainerComposeService) Create(w http.ResponseWriter, r *http.Request) Success(w, nil) } +func (s *ContainerComposeService) Update(w http.ResponseWriter, r *http.Request) { + req, err := Bind[request.ContainerComposeUpdate](r) + if err != nil { + Error(w, http.StatusUnprocessableEntity, "%v", err) + return + } + + if err = s.containerComposeRepo.Update(req.Name, req.Compose, req.Env); err != nil { + Error(w, http.StatusInternalServerError, "%v", err) + return + } + + Success(w, nil) +} + func (s *ContainerComposeService) Up(w http.ResponseWriter, r *http.Request) { req, err := Bind[request.ContainerComposeUp](r) if err != nil {