// Package benadis_rac provides functionality for managing 1C service mode package benadis_rac import ( "context" "fmt" "git.benadis.ru/gitops/benadis-rac/internal/config" "git.benadis.ru/gitops/benadis-rac/internal/logger" "git.benadis.ru/gitops/benadis-rac/internal/service" ) // ServiceModeManager интерфейс для управления сервисным режимом type ServiceModeManager interface { // EnableServiceMode включает сервисный режим EnableServiceMode(ctx context.Context) error // DisableServiceMode выключает сервисный режим DisableServiceMode(ctx context.Context) error // GetServiceModeStatus получает текущий статус сервисного режима GetServiceModeStatus(ctx context.Context) (bool, error) } // Client клиент для работы с 1C сервисным режимом type Client struct { service *service.ServiceModeService } // Config конфигурация для создания клиента type Config struct { ConfigPath string // Путь к файлу конфигурации SecretPath string // Путь к файлу с секретами ProjectPath string // Путь к файлу проекта LogLevel string // Уровень логирования (Debug, Info, Warn, Error) } // NewClient создает новый клиент для управления сервисным режимом func NewClient(cfg Config) (*Client, error) { if cfg.ConfigPath == "" { cfg.ConfigPath = "config.yaml" } if cfg.SecretPath == "" { cfg.SecretPath = "secret.yaml" } if cfg.ProjectPath == "" { cfg.ProjectPath = "project.yaml" } if cfg.LogLevel == "" { cfg.LogLevel = "Info" } // Загружаем конфигурацию appConfig, err := config.LoadConfig(cfg.ConfigPath, cfg.SecretPath, cfg.ProjectPath) if err != nil { return nil, fmt.Errorf("failed to load config: %w", err) } // Переопределяем уровень логирования если указан if appConfig.Project != nil && appConfig.Project.ServiceMode != nil { appConfig.Project.ServiceMode.LogLevel = cfg.LogLevel } // Валидируем конфигурацию if err := appConfig.Validate(); err != nil { return nil, fmt.Errorf("config validation failed: %w", err) } // Создаем логгер logLevel := "Info" if appConfig.Project != nil && appConfig.Project.ServiceMode != nil && appConfig.Project.ServiceMode.LogLevel != "" { logLevel = appConfig.Project.ServiceMode.LogLevel } log := logger.NewLogger(logLevel) // Создаем сервис svc := service.NewServiceModeService(appConfig, log) return &Client{ service: svc, }, nil } // EnableServiceMode включает сервисный режим func (c *Client) EnableServiceMode(ctx context.Context) error { return c.service.EnableServiceMode(ctx) } // DisableServiceMode выключает сервисный режим func (c *Client) DisableServiceMode(ctx context.Context) error { return c.service.DisableServiceMode(ctx) } // GetServiceModeStatus получает текущий статус сервисного режима // Возвращает true если сервисный режим включен, false если выключен func (c *Client) GetServiceModeStatus(ctx context.Context) (bool, error) { return c.service.GetServiceModeStatus(ctx) } // NewClientFromConfig создает клиент из готовой конфигурации func NewClientFromConfig(appConfig *config.AppConfig, logLevel string) (*Client, error) { if logLevel != "" && appConfig.Project != nil && appConfig.Project.ServiceMode != nil { appConfig.Project.ServiceMode.LogLevel = logLevel } // Валидируем конфигурацию if err := appConfig.Validate(); err != nil { return nil, fmt.Errorf("config validation failed: %w", err) } // Создаем логгер logLevelToUse := "Info" if appConfig.Project != nil && appConfig.Project.ServiceMode != nil && appConfig.Project.ServiceMode.LogLevel != "" { logLevelToUse = appConfig.Project.ServiceMode.LogLevel } log := logger.NewLogger(logLevelToUse) // Создаем сервис svc := service.NewServiceModeService(appConfig, log) return &Client{ service: svc, }, nil }