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

Merge branch 'feature/PRXS-3270-ClarifyingErrors' into 'master'

Улучшена информативность ошибок в middleware'ях сервиса Items

See merge request perxis/perxis-go!462
parents 58478a6b 976388ba
No related branches found
No related tags found
No related merge requests found
...@@ -58,7 +58,7 @@ func (m cachingMiddleware) Get(ctx context.Context, spaceId, envId, collectionId ...@@ -58,7 +58,7 @@ func (m cachingMiddleware) Get(ctx context.Context, spaceId, envId, collectionId
if err == nil { if err == nil {
env, err := m.envs.Get(ctx, itm.SpaceID, itm.EnvID) env, err := m.envs.Get(ctx, itm.SpaceID, itm.EnvID)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "get environment") return nil, errors.Wrapf(err, "failed to get environment %q", itm.EnvID)
} }
// Сохраняем в кэш запись без Translations, поскольку значение из кэша также // Сохраняем в кэш запись без Translations, поскольку значение из кэша также
...@@ -78,7 +78,7 @@ func (m cachingMiddleware) Get(ctx context.Context, spaceId, envId, collectionId ...@@ -78,7 +78,7 @@ func (m cachingMiddleware) Get(ctx context.Context, spaceId, envId, collectionId
func (m cachingMiddleware) invalidateCache(ctx context.Context, item *service.Item) (err error) { func (m cachingMiddleware) invalidateCache(ctx context.Context, item *service.Item) (err error) {
env, err := m.envs.Get(ctx, item.SpaceID, item.EnvID) env, err := m.envs.Get(ctx, item.SpaceID, item.EnvID)
if err != nil { if err != nil {
return errors.Wrap(err, "get environment") return errors.Wrapf(err, "failed to get environment %q", item.EnvID)
} }
for _, a := range append(env.Aliases, env.ID) { for _, a := range append(env.Aliases, env.ID) {
key := makeKey(item.SpaceID, a, item.CollectionID, item.ID) key := makeKey(item.SpaceID, a, item.CollectionID, item.ID)
...@@ -148,7 +148,7 @@ func (m cachingMiddleware) GetPublished(ctx context.Context, spaceId, envId, col ...@@ -148,7 +148,7 @@ func (m cachingMiddleware) GetPublished(ctx context.Context, spaceId, envId, col
if err == nil { if err == nil {
env, err := m.envs.Get(ctx, itm.SpaceID, itm.EnvID) env, err := m.envs.Get(ctx, itm.SpaceID, itm.EnvID)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrapf(err, "failed to get environment %q", itm.EnvID)
} }
// Сохраняем в кэш запись без Translations, поскольку значение из кэша также // Сохраняем в кэш запись без Translations, поскольку значение из кэша также
......
...@@ -28,11 +28,12 @@ type encodeDecodeMiddleware struct { ...@@ -28,11 +28,12 @@ type encodeDecodeMiddleware struct {
func (m *encodeDecodeMiddleware) Introspect(ctx context.Context, item *items.Item, opts ...*items.IntrospectOptions) (itm *items.Item, sch *schema.Schema, err error) { func (m *encodeDecodeMiddleware) Introspect(ctx context.Context, item *items.Item, opts ...*items.IntrospectOptions) (itm *items.Item, sch *schema.Schema, err error) {
coll, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) coll, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
encoded, err := item.Encode(ctx, coll.Schema) encoded, err := item.Encode(ctx, coll.Schema)
if err != nil { if err != nil {
err = errors.Wrap(err, "failed to encode item")
// Возвращаем исходные данные для возможности обработки полей с ошибками. // Возвращаем исходные данные для возможности обработки полей с ошибками.
return item, coll.Schema, err return item, coll.Schema, err
} }
...@@ -42,7 +43,7 @@ func (m *encodeDecodeMiddleware) Introspect(ctx context.Context, item *items.Ite ...@@ -42,7 +43,7 @@ func (m *encodeDecodeMiddleware) Introspect(ctx context.Context, item *items.Ite
var err error var err error
if introspected, err = introspected.Decode(ctx, sch); err != nil { if introspected, err = introspected.Decode(ctx, sch); err != nil {
// Возвращаем исходные данные для возможности обработки полей с ошибками. // Возвращаем исходные данные для возможности обработки полей с ошибками.
return item, coll.Schema, err return item, coll.Schema, errors.Wrap(err, "failed to decode item")
} }
} }
return introspected, sch, err return introspected, sch, err
...@@ -57,11 +58,11 @@ func (m *encodeDecodeMiddleware) Create(ctx context.Context, item *items.Item, o ...@@ -57,11 +58,11 @@ func (m *encodeDecodeMiddleware) Create(ctx context.Context, item *items.Item, o
col, err = m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) col, err = m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
if item, err = item.Encode(ctx, col.Schema); err != nil { if item, err = item.Encode(ctx, col.Schema); err != nil {
return nil, err return nil, errors.Wrap(err, "failed to encode item")
} }
} }
...@@ -71,11 +72,12 @@ func (m *encodeDecodeMiddleware) Create(ctx context.Context, item *items.Item, o ...@@ -71,11 +72,12 @@ func (m *encodeDecodeMiddleware) Create(ctx context.Context, item *items.Item, o
if col == nil { if col == nil {
col, err = m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) col, err = m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
} }
res, err = res.Decode(ctx, col.Schema) res, err = res.Decode(ctx, col.Schema)
err = errors.Wrap(err, "failed to decode item")
} }
return res, err return res, err
...@@ -86,10 +88,10 @@ func (m *encodeDecodeMiddleware) Update(ctx context.Context, upd *items.Item, op ...@@ -86,10 +88,10 @@ func (m *encodeDecodeMiddleware) Update(ctx context.Context, upd *items.Item, op
if upd != nil && (upd.Data != nil || upd.Translations != nil) { if upd != nil && (upd.Data != nil || upd.Translations != nil) {
col, err = m.colls.Get(ctx, upd.SpaceID, upd.EnvID, upd.CollectionID) col, err = m.colls.Get(ctx, upd.SpaceID, upd.EnvID, upd.CollectionID)
if err != nil { if err != nil {
return err return errors.Wrapf(err, "failed to get collection %q", upd.CollectionID)
} }
if upd, err = upd.Encode(ctx, col.Schema); err != nil { if upd, err = upd.Encode(ctx, col.Schema); err != nil {
return err return errors.Wrap(err, "failed to encode item")
} }
} }
return m.next.Update(ctx, upd, options...) return m.next.Update(ctx, upd, options...)
...@@ -100,12 +102,13 @@ func (m *encodeDecodeMiddleware) Find(ctx context.Context, spaceId, envId, colle ...@@ -100,12 +102,13 @@ func (m *encodeDecodeMiddleware) Find(ctx context.Context, spaceId, envId, colle
if err == nil && total > 0 { if err == nil && total > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId) col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, errors.Wrapf(err, "failed to get collection %q", collectionId)
} }
for i, itm := range items { for i, itm := range items {
itemID := itm.ID
itm, err = itm.Decode(ctx, col.Schema) itm, err = itm.Decode(ctx, col.Schema)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, errors.Wrapf(err, "failed to decode item %q", itemID)
} }
items[i] = itm items[i] = itm
...@@ -119,11 +122,11 @@ func (m *encodeDecodeMiddleware) Get(ctx context.Context, spaceId, envId, collec ...@@ -119,11 +122,11 @@ func (m *encodeDecodeMiddleware) Get(ctx context.Context, spaceId, envId, collec
if err == nil && item != nil { if err == nil && item != nil {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId) col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
item, err = item.Decode(ctx, col.Schema) item, err = item.Decode(ctx, col.Schema)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrap(err, "failed to decode item")
} }
} }
...@@ -134,11 +137,11 @@ func (m *encodeDecodeMiddleware) Publish(ctx context.Context, item *items.Item, ...@@ -134,11 +137,11 @@ func (m *encodeDecodeMiddleware) Publish(ctx context.Context, item *items.Item,
if item != nil && (item.Data != nil || item.Translations != nil) { if item != nil && (item.Data != nil || item.Translations != nil) {
col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID)
if err != nil { if err != nil {
return err return errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
if item, err = item.Encode(ctx, col.Schema); err != nil { if item, err = item.Encode(ctx, col.Schema); err != nil {
return err return errors.Wrap(err, "failed to encode item")
} }
} }
...@@ -149,11 +152,11 @@ func (m *encodeDecodeMiddleware) Unpublish(ctx context.Context, item *items.Item ...@@ -149,11 +152,11 @@ func (m *encodeDecodeMiddleware) Unpublish(ctx context.Context, item *items.Item
if item != nil && (item.Data != nil || item.Translations != nil) { if item != nil && (item.Data != nil || item.Translations != nil) {
col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID)
if err != nil { if err != nil {
return err return errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
if item, err = item.Encode(ctx, col.Schema); err != nil { if item, err = item.Encode(ctx, col.Schema); err != nil {
return err return errors.Wrap(err, "failed to encode item")
} }
} }
...@@ -165,11 +168,11 @@ func (m *encodeDecodeMiddleware) GetPublished(ctx context.Context, spaceId, envI ...@@ -165,11 +168,11 @@ func (m *encodeDecodeMiddleware) GetPublished(ctx context.Context, spaceId, envI
if err == nil && item != nil { if err == nil && item != nil {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId) col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
item, err = item.Decode(ctx, col.Schema) item, err = item.Decode(ctx, col.Schema)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrap(err, "failed to decode item")
} }
} }
...@@ -181,12 +184,13 @@ func (m *encodeDecodeMiddleware) FindPublished(ctx context.Context, spaceId, env ...@@ -181,12 +184,13 @@ func (m *encodeDecodeMiddleware) FindPublished(ctx context.Context, spaceId, env
if err == nil && total > 0 { if err == nil && total > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId) col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, errors.Wrapf(err, "failed to get collection %q", collectionId)
} }
for i, itm := range items { for i, itm := range items {
itemID := itm.ID
itm, err = itm.Decode(ctx, col.Schema) itm, err = itm.Decode(ctx, col.Schema)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, errors.Wrapf(err, "failed to decode item %q", itemID)
} }
items[i] = itm items[i] = itm
...@@ -200,11 +204,11 @@ func (m *encodeDecodeMiddleware) GetRevision(ctx context.Context, spaceId, envId ...@@ -200,11 +204,11 @@ func (m *encodeDecodeMiddleware) GetRevision(ctx context.Context, spaceId, envId
if err == nil && item != nil { if err == nil && item != nil {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId) col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
item, err = item.Decode(ctx, col.Schema) item, err = item.Decode(ctx, col.Schema)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrap(err, "failed to decode item")
} }
} }
...@@ -216,12 +220,13 @@ func (m *encodeDecodeMiddleware) ListRevisions(ctx context.Context, spaceId, env ...@@ -216,12 +220,13 @@ func (m *encodeDecodeMiddleware) ListRevisions(ctx context.Context, spaceId, env
if err == nil && len(items) > 0 { if err == nil && len(items) > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId) col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, errors.Wrapf(err, "failed to get collection %q", collectionId)
} }
for i, itm := range items { for i, itm := range items {
itemID := itm.ID
itm, err = itm.Decode(ctx, col.Schema) itm, err = itm.Decode(ctx, col.Schema)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, errors.Wrapf(err, "failed to decode item %q", itemID)
} }
items[i] = itm items[i] = itm
...@@ -239,9 +244,13 @@ func (m *encodeDecodeMiddleware) GetArchived(ctx context.Context, spaceID, envID ...@@ -239,9 +244,13 @@ func (m *encodeDecodeMiddleware) GetArchived(ctx context.Context, spaceID, envID
col, err := m.colls.Get(ctx, spaceID, envID, collectionID) col, err := m.colls.Get(ctx, spaceID, envID, collectionID)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
return item.Decode(ctx, col.Schema) item, err = item.Decode(ctx, col.Schema)
if err != nil {
return nil, errors.Wrap(err, "failed to decode item")
}
return item, nil
} }
func (m *encodeDecodeMiddleware) FindArchived(ctx context.Context, spaceId, envId, collectionId string, filter *items.Filter, options ...*items.FindArchivedOptions) (items []*items.Item, total int, err error) { func (m *encodeDecodeMiddleware) FindArchived(ctx context.Context, spaceId, envId, collectionId string, filter *items.Filter, options ...*items.FindArchivedOptions) (items []*items.Item, total int, err error) {
...@@ -249,12 +258,13 @@ func (m *encodeDecodeMiddleware) FindArchived(ctx context.Context, spaceId, envI ...@@ -249,12 +258,13 @@ func (m *encodeDecodeMiddleware) FindArchived(ctx context.Context, spaceId, envI
if err == nil && total > 0 { if err == nil && total > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId) col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, errors.Wrapf(err, "failed to get collection %q", collectionId)
} }
for i, itm := range items { for i, itm := range items {
itemID := itm.ID
itm, err = itm.Decode(ctx, col.Schema) itm, err = itm.Decode(ctx, col.Schema)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, errors.Wrapf(err, "failed to decode item %q", itemID)
} }
items[i] = itm items[i] = itm
...@@ -267,11 +277,11 @@ func (m *encodeDecodeMiddleware) Archive(ctx context.Context, item *items.Item, ...@@ -267,11 +277,11 @@ func (m *encodeDecodeMiddleware) Archive(ctx context.Context, item *items.Item,
if item != nil && (item.Data != nil || item.Translations != nil) { if item != nil && (item.Data != nil || item.Translations != nil) {
col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID)
if err != nil { if err != nil {
return err return errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
if item, err = item.Encode(ctx, col.Schema); err != nil { if item, err = item.Encode(ctx, col.Schema); err != nil {
return err return errors.Wrap(err, "failed to encode item")
} }
} }
...@@ -282,11 +292,11 @@ func (m *encodeDecodeMiddleware) Unarchive(ctx context.Context, item *items.Item ...@@ -282,11 +292,11 @@ func (m *encodeDecodeMiddleware) Unarchive(ctx context.Context, item *items.Item
if item != nil && (item.Data != nil || item.Translations != nil) { if item != nil && (item.Data != nil || item.Translations != nil) {
col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID)
if err != nil { if err != nil {
return err return errors.Wrapf(err, "failed to get collection %q", item.CollectionID)
} }
if item, err = item.Encode(ctx, col.Schema); err != nil { if item, err = item.Encode(ctx, col.Schema); err != nil {
return err return errors.Wrap(err, "failed to encode item")
} }
} }
...@@ -318,12 +328,12 @@ func (m *encodeDecodeMiddleware) Aggregate(ctx context.Context, spaceId, envId, ...@@ -318,12 +328,12 @@ func (m *encodeDecodeMiddleware) Aggregate(ctx context.Context, spaceId, envId,
if len(res) > 0 && len(options) > 0 { if len(res) > 0 && len(options) > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId) col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "encode aggregate result") return nil, errors.Wrapf(err, "failed to get collection %q", collectionId)
} }
o := items.MergeAggregateOptions(options...) o := items.MergeAggregateOptions(options...)
res, err = items.DecodeAggregateResult(ctx, o.Fields, res, col.Schema) res, err = items.DecodeAggregateResult(ctx, o.Fields, res, col.Schema)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "encode aggregate result") return nil, errors.Wrap(err, "failed to decode aggregated result")
} }
} }
return res, err return res, err
...@@ -334,12 +344,12 @@ func (m *encodeDecodeMiddleware) AggregatePublished(ctx context.Context, spaceId ...@@ -334,12 +344,12 @@ func (m *encodeDecodeMiddleware) AggregatePublished(ctx context.Context, spaceId
if len(res) > 0 && len(options) > 0 { if len(res) > 0 && len(options) > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId) col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "get collection") return nil, errors.Wrapf(err, "failed to get collection %q", collectionId)
} }
o := items.MergeAggregatePublishedOptions(options...) o := items.MergeAggregatePublishedOptions(options...)
res, err = items.DecodeAggregateResult(ctx, o.Fields, res, col.Schema) res, err = items.DecodeAggregateResult(ctx, o.Fields, res, col.Schema)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrap(err, "failed to decode aggregated result")
} }
} }
return res, err return res, err
......
...@@ -80,7 +80,7 @@ func TestEncodeDecodeMiddleware_Introspect(t *testing.T) { ...@@ -80,7 +80,7 @@ func TestEncodeDecodeMiddleware_Introspect(t *testing.T) {
require.EqualError( require.EqualError(
t, t,
err, err,
"encode error: 1 error occurred:\n\t* field 'date': TimeType: encode: unsupported value type : \"string\"\n\n", "failed to encode item: encode error: 1 error occurred:\n\t* field 'date': TimeType: encode: unsupported value type : \"string\"\n\n",
) )
assert.Equal(t, assert.Equal(t,
map[string]any{ map[string]any{
...@@ -130,7 +130,7 @@ func TestEncodeDecodeMiddleware_Introspect(t *testing.T) { ...@@ -130,7 +130,7 @@ func TestEncodeDecodeMiddleware_Introspect(t *testing.T) {
require.EqualError( require.EqualError(
t, t,
err, err,
"decode error: 1 error occurred:\n\t* field 'str': StringField decode error: unsupported value type : \"int\"\n\n", "failed to decode item: decode error: 1 error occurred:\n\t* field 'str': StringField decode error: unsupported value type : \"int\"\n\n",
) )
assert.Equal(t, assert.Equal(t,
map[string]any{ map[string]any{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment