85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"github.com/cortezaproject/corteza-server/compose/types"
|
|
"github.com/cortezaproject/corteza-server/pkg/locale"
|
|
sysService "github.com/cortezaproject/corteza-server/system/service"
|
|
sysTypes "github.com/cortezaproject/corteza-server/system/types"
|
|
)
|
|
|
|
type (
|
|
dataPrivacy struct {
|
|
ns NamespaceService
|
|
m ModuleService
|
|
dalConn dalConnectionService
|
|
locale ResourceTranslationsManagerService
|
|
}
|
|
|
|
dalConnectionService interface {
|
|
FindByID(ctx context.Context, ID uint64) (q *sysTypes.DalConnection, err error)
|
|
}
|
|
|
|
DataPrivacyService interface {
|
|
FindModules(ctx context.Context, filter types.PrivacyModuleFilter) (types.PrivacyModuleSet, types.PrivacyModuleFilter, error)
|
|
}
|
|
)
|
|
|
|
func DataPrivacy() *dataPrivacy {
|
|
return &dataPrivacy{
|
|
ns: DefaultNamespace,
|
|
m: DefaultModule,
|
|
dalConn: sysService.DefaultDalConnection,
|
|
locale: DefaultResourceTranslation,
|
|
}
|
|
}
|
|
|
|
func (svc dataPrivacy) FindModules(ctx context.Context, filter types.PrivacyModuleFilter) (out types.PrivacyModuleSet, f types.PrivacyModuleFilter, err error) {
|
|
var (
|
|
modules []types.PrivacyModule
|
|
cc = make(map[uint64]*sysTypes.DalConnection, 0)
|
|
)
|
|
|
|
namespaces, _, err := svc.ns.Find(ctx, types.NamespaceFilter{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
for _, n := range namespaces {
|
|
tag := locale.GetAcceptLanguageFromContext(ctx)
|
|
n.DecodeTranslations(svc.locale.Locale().ResourceTranslations(tag, n.ResourceTranslation()))
|
|
|
|
modules, f, err = svc.m.SearchSensitive(ctx, types.PrivacyModuleFilter{
|
|
NamespaceID: n.ID,
|
|
ConnectionID: filter.ConnectionID,
|
|
})
|
|
if err != nil {
|
|
return
|
|
}
|
|
if len(modules) == 0 {
|
|
continue
|
|
}
|
|
|
|
for _, m := range modules {
|
|
connID := m.ConnectionID
|
|
if val, ok := cc[connID]; ok {
|
|
m.Connection = val
|
|
} else {
|
|
m.Connection, err = svc.dalConn.FindByID(ctx, connID)
|
|
if err != nil {
|
|
cc[connID] = m.Connection
|
|
}
|
|
}
|
|
|
|
m.Namespace = types.PrivacyNamespaceMeta{
|
|
ID: n.ID,
|
|
Slug: n.Slug,
|
|
Name: n.Name,
|
|
}
|
|
out = append(out, &m)
|
|
}
|
|
}
|
|
|
|
return out, f, nil
|
|
}
|