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) }