33 lines
2.0 KiB
Go
33 lines
2.0 KiB
Go
package domain
|
|
|
|
import (
|
|
"fmt"
|
|
"git.cin.su/m/Assistant/contracts/configuration"
|
|
"git.cin.su/m/Assistant/platform/ids"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
var ErrConfigurationAuthorityRequired = fmt.Errorf("configuration change requires Authority and Commit")
|
|
|
|
func AssignmentFromConversation(kind, principalID, definitionRef, typedValue, sessionRef, sourceRef string, temporaryOverride bool, definition configuration.SettingDefinition, now time.Time) (configuration.SettingAssignment, error) {
|
|
if kind != "SET" || principalID == "" || definitionRef != string(definition.ID) || strings.TrimSpace(typedValue) == "" || now.IsZero() || definition.ValueType == configuration.ValueSecretRef {
|
|
return configuration.SettingAssignment{}, ErrInvalidConfigurationCommand
|
|
}
|
|
if sourceRef == "" {
|
|
return configuration.SettingAssignment{}, ErrInvalidConfigurationCommand
|
|
}
|
|
id, err := ids.New()
|
|
if err != nil {
|
|
return configuration.SettingAssignment{}, err
|
|
}
|
|
return configuration.SettingAssignment{ID: configuration.SettingAssignmentID(id), PrincipalID: principalID, DefinitionRef: string(definition.ID), DefinitionRevision: definition.Revision, Revision: 1, Selector: configuration.ScopeSelector{PrincipalRef: principalID, SessionRef: sessionRef, TemporaryOverride: temporaryOverride}, TypedValue: strings.TrimSpace(typedValue), Source: configuration.SourceHumanDirective, SourceRef: sourceRef, Lifecycle: configuration.SettingActive, RecordedAtUnixMillis: now.UnixMilli()}, nil
|
|
}
|
|
|
|
func ExplainEffectiveSetting(definition configuration.SettingDefinition, effective configuration.EffectiveSetting) string {
|
|
if effective.WinningAssignmentRef == "" {
|
|
return fmt.Sprintf("Настройка %s сейчас имеет системное значение %q.", definition.StableKey, effective.Value)
|
|
}
|
|
return fmt.Sprintf("Настройка %s сейчас имеет значение %q; применено scoped-правило %s.", definition.StableKey, effective.Value, effective.WinningAssignmentRef)
|
|
}
|