Skip to content
Snippets Groups Projects
Commit 52f84beb authored by Danis Kirasirov's avatar Danis Kirasirov
Browse files

add allow_partial_decode option

parent 1f4cc53d
No related branches found
No related tags found
No related merge requests found
Subproject commit 0627c9f829178bc6de2623a0b6d42964c44de496
Subproject commit ae22ace4ca2ef2ecc5fd6ccfbca9d94879227881
......@@ -2,6 +2,7 @@ package items
import (
"maps"
"math"
"slices"
"git.perx.ru/perxis/perxis-go/pkg/options"
......@@ -96,6 +97,9 @@ type GetOptions struct {
// Список идентификаторов переводов/локалей, которых должны быть включены в результат
TranslationsIDs []string
// Получить записи без полей, которые не получилось декодировать
AllowPartialDecode bool
}
func MergeGetOptions(opts ...*GetOptions) *GetOptions {
......@@ -109,6 +113,7 @@ func MergeGetOptions(opts ...*GetOptions) *GetOptions {
o.LocaleID = opt.LocaleID
}
o.TranslationsIDs = append(o.TranslationsIDs, opt.TranslationsIDs...)
o.AllowPartialDecode = o.AllowPartialDecode || opt.AllowPartialDecode
}
return o
}
......@@ -119,6 +124,7 @@ func GetOptionsToProto(opts ...*GetOptions) *pb.GetOptions {
}
o := MergeGetOptions(opts...)
return &pb.GetOptions{
AllowPartialDecode: o.AllowPartialDecode,
LocaleId: o.LocaleID,
TranslationsIds: o.TranslationsIDs,
}
......@@ -129,8 +135,9 @@ func GetOptionsFromProto(opts *pb.GetOptions) *GetOptions {
return nil
}
return &GetOptions{
LocaleID: opts.LocaleId,
TranslationsIDs: opts.TranslationsIds,
AllowPartialDecode: opts.GetAllowPartialDecode(),
LocaleID: opts.GetLocaleId(),
TranslationsIDs: opts.GetTranslationsIds(),
}
}
......@@ -143,6 +150,9 @@ type FindOptions struct {
Hidden bool
Templates bool
// Получить записи без полей, которые не получилось декодировать
AllowPartialDecode bool
// Язык перевода, который будет использоваться. Если не указан, то возвращаются данные для языка по умолчанию
LocaleID string
......@@ -166,6 +176,7 @@ func MergeFindOptions(opts ...*FindOptions) *FindOptions {
o.Templates = o.Templates || opt.Templates
o.Hidden = o.Hidden || opt.Hidden
o.Deleted = o.Deleted || opt.Deleted
o.AllowPartialDecode = o.AllowPartialDecode || opt.AllowPartialDecode
o.Options = MergeOptions(o.Options, opt.Options)
o.FindOptions = *options.MergeFindOptions(&o.FindOptions, &opt.FindOptions)
if opt.LocaleID != "" {
......@@ -188,6 +199,7 @@ func FindOptionsToProto(opts ...*FindOptions) *pb.FindOptions {
Templates: o.Templates,
LocaleId: o.LocaleID,
TranslationsIds: o.TranslationsIDs,
AllowPartialDecode: o.AllowPartialDecode,
Options: options.FindOptionsToPB(&o.FindOptions),
}
}
......@@ -197,12 +209,13 @@ func FindOptionsFromProto(opts *pb.FindOptions) *FindOptions {
return nil
}
o := &FindOptions{
Deleted: opts.Deleted,
Regular: opts.Regular,
Hidden: opts.Hidden,
Templates: opts.Templates,
LocaleID: opts.LocaleId,
TranslationsIDs: opts.TranslationsIds,
Deleted: opts.GetDeleted(),
Regular: opts.GetRegular(),
Hidden: opts.GetHidden(),
Templates: opts.GetTemplates(),
AllowPartialDecode: opts.GetAllowPartialDecode(),
LocaleID: opts.GetLocaleId(),
TranslationsIDs: opts.GetTranslationsIds(),
}
if fo := options.FindOptionsFromPB(opts.Options); fo != nil {
o.FindOptions = *fo
......@@ -543,6 +556,9 @@ type GetRevisionOptions struct {
// Список идентификаторов переводов/локалей, которых должны быть включены в результат
TranslationsIDs []string
// Получить записи без полей, которые не получилось декодировать
AllowPartialDecode bool
}
func MergeGetRevisionOptions(opts ...*GetRevisionOptions) *GetRevisionOptions {
......@@ -552,6 +568,7 @@ func MergeGetRevisionOptions(opts ...*GetRevisionOptions) *GetRevisionOptions {
continue
}
o.Options = MergeOptions(o.Options, opt.Options)
o.AllowPartialDecode = o.AllowPartialDecode || opt.AllowPartialDecode
if opt.LocaleID != "" {
o.LocaleID = opt.LocaleID
......@@ -567,6 +584,7 @@ func GetRevisionOptionsToProto(opts ...*GetRevisionOptions) *pb.GetRevisionOptio
}
o := MergeGetRevisionOptions(opts...)
return &pb.GetRevisionOptions{
AllowPartialDecode: o.AllowPartialDecode,
LocaleId: o.LocaleID,
TranslationsIds: o.TranslationsIDs,
}
......@@ -577,8 +595,9 @@ func GetRevisionOptionsFromProto(opts *pb.GetRevisionOptions) *GetRevisionOption
return nil
}
o := &GetRevisionOptions{
LocaleID: opts.LocaleId,
TranslationsIDs: opts.TranslationsIds,
AllowPartialDecode: opts.GetAllowPartialDecode(),
LocaleID: opts.GetLocaleId(),
TranslationsIDs: opts.GetTranslationsIds(),
}
return o
}
......@@ -592,6 +611,9 @@ type ListRevisionsOptions struct {
// Список идентификаторов переводов/локалей, которых должны быть включены в результат
TranslationsIDs []string
// Получить записи без полей, которые не получилось декодировать
AllowPartialDecode bool
}
func MergeListRevisionsOptions(opts ...*ListRevisionsOptions) *ListRevisionsOptions {
......@@ -602,6 +624,7 @@ func MergeListRevisionsOptions(opts ...*ListRevisionsOptions) *ListRevisionsOpti
}
o.Options = MergeOptions(o.Options, opt.Options)
o.FindOptions = *options.MergeFindOptions(&o.FindOptions, &opt.FindOptions)
o.AllowPartialDecode = o.AllowPartialDecode || opt.AllowPartialDecode
if opt.LocaleID != "" {
o.LocaleID = opt.LocaleID
......@@ -616,13 +639,20 @@ func ListRevisionsOptionsToProto(opts ...*ListRevisionsOptions) *pb.ListRevision
return nil
}
o := MergeListRevisionsOptions(opts...)
if o.Offset < 0 || o.Offset > math.MaxInt32 {
o.Offset = 0
}
if o.Limit < 0 || o.Limit > math.MaxInt32 {
o.Limit = 0
}
return &pb.ListRevisionsOptions{
Offset: int32(o.Offset),
Limit: int32(o.Limit),
Offset: int32(o.Offset), //nolint:gosec // int -> int32 overflow check is performed above
Limit: int32(o.Limit), //nolint:gosec // int -> int32 overflow check is performed above
Fields: o.Fields,
ExcludeFields: o.ExcludeFields,
LocaleId: o.LocaleID,
TranslationsIds: o.TranslationsIDs,
AllowPartialDecode: o.AllowPartialDecode,
}
}
......@@ -637,8 +667,9 @@ func ListRevisionsOptionsFromProto(opts *pb.ListRevisionsOptions) *ListRevisions
}
return &ListRevisionsOptions{
FindOptions: *fo,
LocaleID: opts.LocaleId,
TranslationsIDs: opts.TranslationsIds,
LocaleID: opts.GetLocaleId(),
TranslationsIDs: opts.GetTranslationsIds(),
AllowPartialDecode: opts.GetAllowPartialDecode(),
}
}
......@@ -666,6 +697,9 @@ type FindArchivedOptions struct {
// Список идентификаторов переводов/локалей, которых должны быть включены в результат
TranslationsIDs []string
// Получить записи без полей, которые не получилось декодировать
AllowPartialDecode bool
}
func NewFindArchivedOptions(oo ...interface{}) *FindArchivedOptions {
......@@ -682,6 +716,7 @@ func MergeFindArchivedOptions(opts ...*FindArchivedOptions) *FindArchivedOptions
}
o.Options = MergeOptions(o.Options, opt.Options)
o.FindOptions = *options.MergeFindOptions(o.FindOptions, opt.FindOptions)
o.AllowPartialDecode = o.AllowPartialDecode || opt.AllowPartialDecode
if opt.LocaleID != "" {
o.LocaleID = opt.LocaleID
......@@ -700,6 +735,7 @@ func FindArchivedOptionsToProto(opts ...*FindArchivedOptions) *pb.FindArchivedOp
LocaleId: o.LocaleID,
TranslationsIds: o.TranslationsIDs,
Options: options.FindOptionsToPB(&o.FindOptions),
AllowPartialDecode: o.AllowPartialDecode,
}
}
......@@ -708,8 +744,9 @@ func FindArchivedOptionsFromProto(opts *pb.FindArchivedOptions) *FindArchivedOpt
return nil
}
o := &FindArchivedOptions{
LocaleID: opts.LocaleId,
TranslationsIDs: opts.TranslationsIds,
LocaleID: opts.GetLocaleId(),
TranslationsIDs: opts.GetTranslationsIds(),
AllowPartialDecode: opts.GetAllowPartialDecode(),
}
if fo := options.FindOptionsFromPB(opts.Options); fo != nil {
o.FindOptions = *fo
......@@ -725,6 +762,9 @@ type GetArchivedOptions struct {
// Список идентификаторов переводов/локалей, которых должны быть включены в результат
TranslationsIDs []string
// Получить записи без полей, которые не получилось декодировать
AllowPartialDecode bool
}
func MergeGetArchivedOptions(opts ...*GetArchivedOptions) *GetArchivedOptions {
......@@ -734,6 +774,7 @@ func MergeGetArchivedOptions(opts ...*GetArchivedOptions) *GetArchivedOptions {
continue
}
o.Options = MergeOptions(o.Options, opt.Options)
o.AllowPartialDecode = o.AllowPartialDecode || opt.AllowPartialDecode
if opt.LocaleID != "" {
o.LocaleID = opt.LocaleID
......@@ -749,6 +790,7 @@ func GetArchivedOptionsToProto(opts ...*GetArchivedOptions) *pb.GetArchivedOptio
}
o := MergeGetArchivedOptions(opts...)
return &pb.GetArchivedOptions{
AllowPartialDecode: o.AllowPartialDecode,
LocaleId: o.LocaleID,
TranslationsIds: o.TranslationsIDs,
}
......@@ -759,6 +801,7 @@ func GetArchivedOptionsFromProto(opts *pb.GetArchivedOptions) *GetArchivedOption
return nil
}
o := &GetArchivedOptions{
AllowPartialDecode: opts.GetAllowPartialDecode(),
LocaleID: opts.GetLocaleId(),
TranslationsIDs: opts.GetTranslationsIds(),
}
......
......@@ -22,6 +22,9 @@ type StorageFindOptions struct {
// Список локалей пространства
Locales []*locales.Locale
// Получить записи без полей, которые не получилось декодировать
AllowPartialDecode bool
}
func NewStorageFindOptions(opts ...interface{}) *StorageFindOptions {
......@@ -37,6 +40,7 @@ func NewStorageFindOptions(opts ...interface{}) *StorageFindOptions {
fo.Templates = o.Templates
fo.LocaleID = o.LocaleID
fo.TranslationsIDs = o.TranslationsIDs
fo.AllowPartialDecode = o.AllowPartialDecode
case *FindPublishedOptions:
fo.Options = o.Options
fo.FindOptions = o.FindOptions
......@@ -51,15 +55,18 @@ func NewStorageFindOptions(opts ...interface{}) *StorageFindOptions {
fo.FindOptions = o.FindOptions
fo.LocaleID = o.LocaleID
fo.TranslationsIDs = o.TranslationsIDs
fo.AllowPartialDecode = o.AllowPartialDecode
case *GetRevisionOptions:
fo.Options = o.Options
fo.LocaleID = o.LocaleID
fo.TranslationsIDs = o.TranslationsIDs
fo.AllowPartialDecode = o.AllowPartialDecode
case *ListRevisionsOptions:
fo.Options = o.Options
fo.FindOptions = o.FindOptions
fo.LocaleID = o.LocaleID
fo.TranslationsIDs = o.TranslationsIDs
fo.AllowPartialDecode = o.AllowPartialDecode
case *locales.Locale:
fo.Locales = []*locales.Locale{o}
case []*locales.Locale:
......@@ -84,6 +91,8 @@ func MergeStorageFindOptions(opts ...*StorageFindOptions) *StorageFindOptions {
o.Templates = o.Templates || opt.Templates
o.Hidden = o.Hidden || opt.Hidden
o.AllowPartialDecode = o.AllowPartialDecode || opt.AllowPartialDecode
if opt.LocaleID != "" {
o.LocaleID = opt.LocaleID
}
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment