Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
perxis-go
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Package registry
Operate
Terraform modules
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
perxis
perxis-go
Commits
5331ef1d
Commit
5331ef1d
authored
1 year ago
by
Anton Sattarov
Browse files
Options
Downloads
Plain Diff
Merge branch 'refs/heads/master' into hotfix/PRXS-2697-FixItemsCache
parents
30f6d532
0efe050e
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
pkg/items/item.go
+48
-18
48 additions, 18 deletions
pkg/items/item.go
with
48 additions
and
18 deletions
pkg/items/item.go
+
48
−
18
View file @
5331ef1d
...
...
@@ -3,14 +3,13 @@ package items
import
(
"context"
"fmt"
"reflect"
"time"
"git.perx.ru/perxis/perxis-go/pkg/data"
"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/field"
"git.perx.ru/perxis/perxis-go/pkg/schema/localizer"
pb
"git.perx.ru/perxis/perxis-go/proto/items"
"google.golang.org/protobuf/types/known/structpb"
"google.golang.org/protobuf/types/known/timestamppb"
...
...
@@ -162,21 +161,23 @@ func (i *Item) ToMap() map[string]interface{} {
}
}
func
(
i
*
Item
)
SetData
(
data
map
[
string
]
interface
{},
localizer
*
localizer
.
Localizer
)
(
err
error
)
{
if
localizer
!=
nil
&&
localizer
.
LocaleID
!=
locales
.
DefaultID
{
i
.
Translations
[
localizer
.
LocaleID
],
err
=
localizer
.
ExtractTranslation
(
i
.
Data
,
i
.
Translations
)
func
(
i
*
Item
)
SetData
(
locale
string
,
data
map
[
string
]
interface
{})
{
if
locale
!=
""
{
if
i
.
Translations
==
nil
{
i
.
Translations
=
make
(
map
[
string
]
map
[
string
]
interface
{})
}
i
.
Translations
[
locale
]
=
data
return
}
i
.
Data
=
data
return
}
func
(
i
*
Item
)
GetData
(
localizer
*
localizer
.
Localizer
)
(
map
[
string
]
interface
{},
error
)
{
if
localizer
!=
nil
{
return
localizer
.
Localize
(
i
.
Data
,
i
.
Translations
)
func
(
i
*
Item
)
GetData
(
locale
string
)
map
[
string
]
interface
{}
{
if
locale
!=
""
&&
i
.
Translations
!=
nil
{
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
)
{
...
...
@@ -214,9 +215,40 @@ func (i Item) Decode(ctx context.Context, s *schema.Schema) (res *Item, err erro
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
)
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
{
dt
,
err
:=
fn
(
ctx
,
sch
,
i
.
Data
)
if
err
!=
nil
{
...
...
@@ -227,16 +259,14 @@ func (i Item) ProcessData(ctx context.Context, sch *schema.Schema, fn ProcessDat
tr
:=
make
(
map
[
string
]
map
[
string
]
interface
{})
for
_
,
l
:=
range
locales
{
data
,
err
:=
i
.
GetData
(
localizer
.
NewLocalizer
(
sch
,
locales
,
l
.
ID
))
if
err
!=
nil
{
return
nil
,
errors
.
WithField
(
err
,
fmt
.
Sprintf
(
"translations.%s"
,
l
.
ID
))
}
data
:=
i
.
GetData
(
l
)
dt
,
err
:=
fn
(
ctx
,
sch
,
data
)
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
}
...
...
This diff is collapsed.
Click to expand it.
Pavel Antonov
@softzilla
mentioned in commit
0f5d76df
·
1 year ago
mentioned in commit
0f5d76df
mentioned in commit 0f5d76dff8be228934f555add73d7df51dea6b33
Toggle commit list
Pavel Antonov
@softzilla
mentioned in commit
923ccdd6
·
1 year ago
mentioned in commit
923ccdd6
mentioned in commit 923ccdd68cdd48f9e61d093b40de4eea114a5bed
Toggle commit list
Pavel Antonov
@softzilla
mentioned in commit
6dd858fe
·
1 year ago
mentioned in commit
6dd858fe
mentioned in commit 6dd858fe3edd7086cf90650db132a20141712cad
Toggle commit list
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment