Skip to content
Snippets Groups Projects
Commit 0efe050e authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

Merge branch 'fix/RevertBreakingChanges' into 'master'

Revert изменений сигнатур методов Item для работы с localizer'ом

See merge request perxis/perxis-go!259
parents 62b3db3e f3bfae44
No related branches found
No related tags found
No related merge requests found
...@@ -3,14 +3,13 @@ package items ...@@ -3,14 +3,13 @@ package items
import ( import (
"context" "context"
"fmt" "fmt"
"reflect"
"time" "time"
"git.perx.ru/perxis/perxis-go/pkg/data" "git.perx.ru/perxis/perxis-go/pkg/data"
"git.perx.ru/perxis/perxis-go/pkg/errors" "git.perx.ru/perxis/perxis-go/pkg/errors"
"git.perx.ru/perxis/perxis-go/pkg/locales"
"git.perx.ru/perxis/perxis-go/pkg/schema" "git.perx.ru/perxis/perxis-go/pkg/schema"
"git.perx.ru/perxis/perxis-go/pkg/schema/field" "git.perx.ru/perxis/perxis-go/pkg/schema/field"
"git.perx.ru/perxis/perxis-go/pkg/schema/localizer"
pb "git.perx.ru/perxis/perxis-go/proto/items" pb "git.perx.ru/perxis/perxis-go/proto/items"
"google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/structpb"
"google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/timestamppb"
...@@ -162,21 +161,23 @@ func (i *Item) ToMap() map[string]interface{} { ...@@ -162,21 +161,23 @@ func (i *Item) ToMap() map[string]interface{} {
} }
} }
func (i *Item) SetData(data map[string]interface{}, localizer *localizer.Localizer) (err error) { func (i *Item) SetData(locale string, data map[string]interface{}) {
if localizer != nil && localizer.LocaleID != locales.DefaultID { if locale != "" {
i.Translations[localizer.LocaleID], err = localizer.ExtractTranslation(i.Data, i.Translations) if i.Translations == nil {
i.Translations = make(map[string]map[string]interface{})
}
i.Translations[locale] = data
return return
} }
i.Data = data i.Data = data
return
} }
func (i *Item) GetData(localizer *localizer.Localizer) (map[string]interface{}, error) { func (i *Item) GetData(locale string) map[string]interface{} {
if localizer != nil { if locale != "" && i.Translations != nil {
return localizer.Localize(i.Data, i.Translations) translation := i.Translations[locale]
return MergeData(i.Data, translation)
} }
return i.Data, nil return i.Data
} }
func (i Item) Encode(ctx context.Context, s *schema.Schema) (*Item, error) { func (i Item) Encode(ctx context.Context, s *schema.Schema) (*Item, error) {
...@@ -214,9 +215,40 @@ func (i Item) Decode(ctx context.Context, s *schema.Schema) (res *Item, err erro ...@@ -214,9 +215,40 @@ func (i Item) Decode(ctx context.Context, s *schema.Schema) (res *Item, err erro
return &i, nil return &i, nil
} }
// MergeData дополняет отсутствующие данные из оригинальных данных
func MergeData(data ...map[string]interface{}) map[string]interface{} {
merge := make(map[string]interface{})
for _, d := range data {
for k, v := range d {
merge[k] = v
}
}
return merge
}
// ClearData убирает данные которые не изменились по сравнению с оригинальными данными
func ClearData(data ...map[string]interface{}) map[string]interface{} {
var clear map[string]interface{}
for _, d := range data {
if clear == nil {
clear = d
continue
}
for k, v := range d {
if reflect.DeepEqual(clear[k], v) {
delete(clear, k)
}
}
}
return clear
}
type ProcessDataFunc func(ctx context.Context, sch *schema.Schema, data map[string]interface{}) (map[string]interface{}, error) type ProcessDataFunc func(ctx context.Context, sch *schema.Schema, data map[string]interface{}) (map[string]interface{}, error)
func (i Item) ProcessData(ctx context.Context, sch *schema.Schema, fn ProcessDataFunc, locales ...*locales.Locale) (*Item, error) { func (i Item) ProcessData(ctx context.Context, sch *schema.Schema, fn ProcessDataFunc, locales ...string) (*Item, error) {
if i.Data != nil { if i.Data != nil {
dt, err := fn(ctx, sch, i.Data) dt, err := fn(ctx, sch, i.Data)
if err != nil { if err != nil {
...@@ -227,16 +259,14 @@ func (i Item) ProcessData(ctx context.Context, sch *schema.Schema, fn ProcessDat ...@@ -227,16 +259,14 @@ func (i Item) ProcessData(ctx context.Context, sch *schema.Schema, fn ProcessDat
tr := make(map[string]map[string]interface{}) tr := make(map[string]map[string]interface{})
for _, l := range locales { for _, l := range locales {
data, err := i.GetData(localizer.NewLocalizer(sch, locales, l.ID))
if err != nil { data := i.GetData(l)
return nil, errors.WithField(err, fmt.Sprintf("translations.%s", l.ID))
}
dt, err := fn(ctx, sch, data) dt, err := fn(ctx, sch, data)
if err != nil { if err != nil {
return nil, errors.WithField(err, fmt.Sprintf("translations.%s", l.ID)) return nil, errors.WithField(err, fmt.Sprintf("translations.%s", l))
} }
tr[l.ID] = dt tr[l] = dt
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment