package service import ( "context" "os" "github.com/google/uuid" "github.com/ocdp/cluster-service/internal/domain/entity" "github.com/ocdp/cluster-service/internal/domain/repository" ) // RegistryService Registry 管理领域服务 type RegistryService struct { registryRepo repository.RegistryRepository ociClient repository.OCIClient } // NewRegistryService 创建 Registry 服务 func NewRegistryService( registryRepo repository.RegistryRepository, ociClient repository.OCIClient, ) *RegistryService { return &RegistryService{ registryRepo: registryRepo, ociClient: ociClient, } } // CreateRegistry 创建新 Registry func (s *RegistryService) CreateRegistry(ctx context.Context, registry *entity.Registry) error { // 生成 ID registry.ID = uuid.New().String() // 验证 if err := registry.Validate(); err != nil { return err } // 检查是否已存在 existingRegistry, _ := s.registryRepo.GetByName(ctx, registry.Name) if existingRegistry != nil { return entity.ErrRegistryExists } // 非 mock 模式下验证连接 if os.Getenv("ADAPTER_MODE") != "mock" { if err := s.ociClient.CheckHealth(ctx, registry); err != nil { return err } } return s.registryRepo.Create(ctx, registry) } // GetRegistry 获取 Registry func (s *RegistryService) GetRegistry(ctx context.Context, id string) (*entity.Registry, error) { return s.registryRepo.GetByID(ctx, id) } // UpdateRegistry 更新 Registry func (s *RegistryService) UpdateRegistry(ctx context.Context, registry *entity.Registry) error { // 检查是否存在 _, err := s.registryRepo.GetByID(ctx, registry.ID) if err != nil { return entity.ErrRegistryNotFound } // 验证 if err := registry.Validate(); err != nil { return err } return s.registryRepo.Update(ctx, registry) } // DeleteRegistry 删除 Registry func (s *RegistryService) DeleteRegistry(ctx context.Context, id string) error { // 检查是否存在 _, err := s.registryRepo.GetByID(ctx, id) if err != nil { return entity.ErrRegistryNotFound } return s.registryRepo.Delete(ctx, id) } // ListRegistries 列出所有 Registries func (s *RegistryService) ListRegistries(ctx context.Context) ([]*entity.Registry, error) { return s.registryRepo.List(ctx) } // CheckHealth 检查 Registry 健康状态 func (s *RegistryService) CheckHealth(ctx context.Context, id string) error { registry, err := s.registryRepo.GetByID(ctx, id) if err != nil { return entity.ErrRegistryNotFound } return s.ociClient.CheckHealth(ctx, registry) }