Files
kandev/apps/backend/internal/task/controller/environment.go
T
2026-01-15 20:31:39 +00:00

81 lines
2.6 KiB
Go

package controller
import (
"context"
"errors"
"github.com/kandev/kandev/internal/task/dto"
"github.com/kandev/kandev/internal/task/service"
)
type EnvironmentController struct {
service *service.Service
}
func NewEnvironmentController(svc *service.Service) *EnvironmentController {
return &EnvironmentController{service: svc}
}
func (c *EnvironmentController) ListEnvironments(ctx context.Context, _ dto.ListEnvironmentsRequest) (dto.ListEnvironmentsResponse, error) {
environments, err := c.service.ListEnvironments(ctx)
if err != nil {
return dto.ListEnvironmentsResponse{}, err
}
resp := dto.ListEnvironmentsResponse{
Environments: make([]dto.EnvironmentDTO, 0, len(environments)),
Total: len(environments),
}
for _, environment := range environments {
resp.Environments = append(resp.Environments, dto.FromEnvironment(environment))
}
return resp, nil
}
func (c *EnvironmentController) GetEnvironment(ctx context.Context, req dto.GetEnvironmentRequest) (dto.EnvironmentDTO, error) {
environment, err := c.service.GetEnvironment(ctx, req.ID)
if err != nil {
return dto.EnvironmentDTO{}, err
}
return dto.FromEnvironment(environment), nil
}
func (c *EnvironmentController) CreateEnvironment(ctx context.Context, req dto.CreateEnvironmentRequest) (dto.EnvironmentDTO, error) {
environment, err := c.service.CreateEnvironment(ctx, &service.CreateEnvironmentRequest{
Name: req.Name,
Kind: req.Kind,
WorktreeRoot: req.WorktreeRoot,
ImageTag: req.ImageTag,
Dockerfile: req.Dockerfile,
BuildConfig: req.BuildConfig,
})
if err != nil {
return dto.EnvironmentDTO{}, err
}
return dto.FromEnvironment(environment), nil
}
func (c *EnvironmentController) UpdateEnvironment(ctx context.Context, req dto.UpdateEnvironmentRequest) (dto.EnvironmentDTO, error) {
environment, err := c.service.UpdateEnvironment(ctx, req.ID, &service.UpdateEnvironmentRequest{
Name: req.Name,
Kind: req.Kind,
WorktreeRoot: req.WorktreeRoot,
ImageTag: req.ImageTag,
Dockerfile: req.Dockerfile,
BuildConfig: req.BuildConfig,
})
if err != nil {
return dto.EnvironmentDTO{}, err
}
return dto.FromEnvironment(environment), nil
}
func (c *EnvironmentController) DeleteEnvironment(ctx context.Context, req dto.DeleteEnvironmentRequest) (dto.SuccessResponse, error) {
if err := c.service.DeleteEnvironment(ctx, req.ID); err != nil {
if errors.Is(err, service.ErrActiveTaskSessions) {
return dto.SuccessResponse{}, ErrActiveTaskSessions
}
return dto.SuccessResponse{}, err
}
return dto.SuccessResponse{Success: true}, nil
}