mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-18 10:25:57 +08:00
167 lines
5.2 KiB
Go
167 lines
5.2 KiB
Go
package implpreference
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/SigNoz/signoz/pkg/errors"
|
|
"github.com/SigNoz/signoz/pkg/modules/preference"
|
|
"github.com/SigNoz/signoz/pkg/types/preferencetypes"
|
|
"github.com/SigNoz/signoz/pkg/valuer"
|
|
)
|
|
|
|
// Do not take inspiration from this code, it is a work in progress. See Organization module for a better implementation.
|
|
type module struct {
|
|
store preferencetypes.Store
|
|
available map[preferencetypes.Name]preferencetypes.Preference
|
|
}
|
|
|
|
func NewModule(store preferencetypes.Store, available map[preferencetypes.Name]preferencetypes.Preference) preference.Module {
|
|
return &module{store: store, available: available}
|
|
}
|
|
|
|
func (module *module) ListByOrg(ctx context.Context, orgID valuer.UUID) ([]*preferencetypes.GettablePreference, error) {
|
|
storableOrgPreferences, err := module.store.ListByOrg(ctx, orgID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var gettablePreferences []*preferencetypes.GettablePreference
|
|
for _, preference := range module.available {
|
|
copyOfPreference, err := preferencetypes.NewPreferenceFromAvailable(preference.Name, module.available)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
for _, storableOrgPreference := range storableOrgPreferences {
|
|
if storableOrgPreference.Name == preference.Name {
|
|
gettablePreferences = append(gettablePreferences, preferencetypes.NewGettablePreference(copyOfPreference, storableOrgPreference.Value))
|
|
continue
|
|
}
|
|
|
|
gettablePreferences = append(gettablePreferences, preferencetypes.NewGettablePreference(copyOfPreference, preference.DefaultValue))
|
|
}
|
|
}
|
|
|
|
return gettablePreferences, nil
|
|
}
|
|
|
|
func (module *module) GetByOrg(ctx context.Context, orgID valuer.UUID, name preferencetypes.Name) (*preferencetypes.GettablePreference, error) {
|
|
preference, err := preferencetypes.NewPreference(name, preferencetypes.ScopeOrg, module.available)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
org, err := module.store.GetByOrg(ctx, orgID, name)
|
|
if err != nil {
|
|
if errors.As(err, errors.TypeNotFound) {
|
|
return preferencetypes.NewGettablePreference(preference, preference.DefaultValue), nil
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
return preferencetypes.NewGettablePreference(preference, org.Value), nil
|
|
}
|
|
|
|
func (module *module) UpdateByOrg(ctx context.Context, orgID valuer.UUID, name preferencetypes.Name, preferenceValue string) error {
|
|
preference, err := preferencetypes.NewPreference(name, preferencetypes.ScopeOrg, module.available)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = preferencetypes.NewPreferenceValueFromString(preference, preferenceValue)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
storableOrgPreference, err := module.store.GetByOrg(ctx, orgID, name)
|
|
if err != nil {
|
|
if !errors.As(err, errors.TypeNotFound) {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if storableOrgPreference == nil {
|
|
storableOrgPreference = preferencetypes.NewStorableOrgPreference(preference, preferenceValue, orgID)
|
|
}
|
|
|
|
err = module.store.UpsertByOrg(ctx, storableOrgPreference)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (module *module) ListByUser(ctx context.Context, userID valuer.UUID) ([]*preferencetypes.GettablePreference, error) {
|
|
storableUserPreferences, err := module.store.ListByUser(ctx, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var gettablePreferences []*preferencetypes.GettablePreference
|
|
for _, preference := range module.available {
|
|
copyOfPreference, err := preferencetypes.NewPreferenceFromAvailable(preference.Name, module.available)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
for _, storableUserPreference := range storableUserPreferences {
|
|
if storableUserPreference.Name == preference.Name {
|
|
gettablePreferences = append(gettablePreferences, preferencetypes.NewGettablePreference(copyOfPreference, storableUserPreference.Value))
|
|
continue
|
|
}
|
|
|
|
gettablePreferences = append(gettablePreferences, preferencetypes.NewGettablePreference(copyOfPreference, preference.DefaultValue))
|
|
}
|
|
}
|
|
|
|
return gettablePreferences, nil
|
|
}
|
|
|
|
func (module *module) GetByUser(ctx context.Context, userID valuer.UUID, name preferencetypes.Name) (*preferencetypes.GettablePreference, error) {
|
|
preference, err := preferencetypes.NewPreference(name, preferencetypes.ScopeUser, module.available)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
storableUserPreference, err := module.store.GetByUser(ctx, userID, name)
|
|
if err != nil {
|
|
if errors.As(err, errors.TypeNotFound) {
|
|
return preferencetypes.NewGettablePreference(preference, preference.DefaultValue), nil
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
return preferencetypes.NewGettablePreference(preference, storableUserPreference.Value), nil
|
|
}
|
|
|
|
func (module *module) UpdateByUser(ctx context.Context, userID valuer.UUID, name preferencetypes.Name, preferenceValue string) error {
|
|
preference, err := preferencetypes.NewPreference(name, preferencetypes.ScopeUser, module.available)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = preferencetypes.NewPreferenceValueFromString(preference, preferenceValue)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
storableUserPreference, err := module.store.GetByUser(ctx, userID, name)
|
|
if err != nil {
|
|
if !errors.As(err, errors.TypeNotFound) {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if storableUserPreference == nil {
|
|
storableUserPreference = preferencetypes.NewStorableUserPreference(preference, preferenceValue, userID)
|
|
}
|
|
|
|
err = module.store.UpsertByUser(ctx, storableUserPreference)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|