Select Git revision
extension.go 5.42 KiB
package service
import (
"context"
"fmt"
"git.perx.ru/perxis/perxis-go/pkg/clients"
"git.perx.ru/perxis/perxis-go/pkg/content"
"git.perx.ru/perxis/perxis-go/pkg/extension"
"git.perx.ru/perxis/perxis-go/pkg/roles"
"git.perx.ru/perxis/perxis-go/pkg/setup"
"go.uber.org/zap"
)
const (
roleID = "%s_extension"
roleDesc = "Роль расширения \"%s\""
clientID = "%s_extension"
clientName = "Клиент расширения \"%s\""
clientDesc = "Клиент используется при работе расширения \"%s\""
)
type SetupFunc func(spaceID, envID string) *setup.Setup
type SignatureFunc func(spaceID string) string
// Extension реализация сервиса с одним расширением
type Extension struct {
desc *extension.ExtensionDescriptor
setupFunc SetupFunc
Content *content.Content
Logger *zap.Logger
manager extension.Manager
router extension.ActionRouter
withClient bool
role *roles.Role
client *clients.Client
keyFn extension.KeyFunc
}
func NewExtension(desc *extension.ExtensionDescriptor, cnt *content.Content, setupFunc SetupFunc, router extension.ActionRouter, logger *zap.Logger) *Extension {
if logger == nil {
logger = zap.NewNop()
}
return &Extension{
desc: desc,
router: router,
setupFunc: setupFunc,
Content: cnt,
Logger: logger,
}
}
func (s *Extension) GetDescriptor() *extension.ExtensionDescriptor {
return s.desc
}
func (s *Extension) GetName() string {
return s.desc.Extension
}
// WithClient добавляет в процесс установки расширения создание роли и приложения для работы расширения
func (s *Extension) WithClient(role *roles.Role, client *clients.Client, fn extension.KeyFunc) *Extension {
s.withClient = true
s.keyFn = fn
s.role = role
s.client = client
return s
}