diff --git a/pkg/items/middleware/caching_middleware.go b/pkg/items/middleware/caching_middleware.go index f2d9bce6de7153c99bc9d116a538f59547b915b3..a9c3e79bb8351162fca52d9c9a3d0a6d09ed38dd 100644 --- a/pkg/items/middleware/caching_middleware.go +++ b/pkg/items/middleware/caching_middleware.go @@ -58,7 +58,7 @@ func (m cachingMiddleware) Get(ctx context.Context, spaceId, envId, collectionId if err == nil { env, err := m.envs.Get(ctx, itm.SpaceID, itm.EnvID) if err != nil { - return nil, errors.Wrap(err, "get environment") + return nil, errors.Wrapf(err, "failed to get environment %q", itm.EnvID) } // Сохраняем в кэш запись без Translations, поскольку значение из кэша также @@ -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) { env, err := m.envs.Get(ctx, item.SpaceID, item.EnvID) 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) { key := makeKey(item.SpaceID, a, item.CollectionID, item.ID) @@ -148,7 +148,7 @@ func (m cachingMiddleware) GetPublished(ctx context.Context, spaceId, envId, col if err == nil { env, err := m.envs.Get(ctx, itm.SpaceID, itm.EnvID) if err != nil { - return nil, err + return nil, errors.Wrapf(err, "failed to get environment %q", itm.EnvID) } // Сохраняем в кэш запись без Translations, поскольку значение из кэша также diff --git a/pkg/items/middleware/client_encode_middleware.go b/pkg/items/middleware/client_encode_middleware.go index 476687b84f2820537bddee79c00243f5ec05a475..0af96b7568d16a583839c656b90841ee707a1008 100644 --- a/pkg/items/middleware/client_encode_middleware.go +++ b/pkg/items/middleware/client_encode_middleware.go @@ -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) { coll, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) 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) if err != nil { + err = errors.Wrap(err, "failed to encode item") // Возвращаем исходные данные для возможности обработки полей с ошибками. return item, coll.Schema, err } @@ -42,7 +43,7 @@ func (m *encodeDecodeMiddleware) Introspect(ctx context.Context, item *items.Ite var err error 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 @@ -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) 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 { - 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 if col == nil { col, err = m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) 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) + err = errors.Wrap(err, "failed to decode item") } return res, err @@ -86,10 +88,10 @@ func (m *encodeDecodeMiddleware) Update(ctx context.Context, upd *items.Item, op if upd != nil && (upd.Data != nil || upd.Translations != nil) { col, err = m.colls.Get(ctx, upd.SpaceID, upd.EnvID, upd.CollectionID) 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 { - return err + return errors.Wrap(err, "failed to encode item") } } return m.next.Update(ctx, upd, options...) @@ -100,12 +102,13 @@ func (m *encodeDecodeMiddleware) Find(ctx context.Context, spaceId, envId, colle if err == nil && total > 0 { col, err := m.colls.Get(ctx, spaceId, envId, collectionId) if err != nil { - return nil, 0, err + return nil, 0, errors.Wrapf(err, "failed to get collection %q", collectionId) } for i, itm := range items { + itemID := itm.ID itm, err = itm.Decode(ctx, col.Schema) if err != nil { - return nil, 0, err + return nil, 0, errors.Wrapf(err, "failed to decode item %q", itemID) } items[i] = itm @@ -119,11 +122,11 @@ func (m *encodeDecodeMiddleware) Get(ctx context.Context, spaceId, envId, collec if err == nil && item != nil { col, err := m.colls.Get(ctx, spaceId, envId, collectionId) 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) 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, if item != nil && (item.Data != nil || item.Translations != nil) { col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) 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 { - return err + return errors.Wrap(err, "failed to encode item") } } @@ -149,11 +152,11 @@ func (m *encodeDecodeMiddleware) Unpublish(ctx context.Context, item *items.Item if item != nil && (item.Data != nil || item.Translations != nil) { col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) 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 { - return err + return errors.Wrap(err, "failed to encode item") } } @@ -165,11 +168,11 @@ func (m *encodeDecodeMiddleware) GetPublished(ctx context.Context, spaceId, envI if err == nil && item != nil { col, err := m.colls.Get(ctx, spaceId, envId, collectionId) 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) 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 if err == nil && total > 0 { col, err := m.colls.Get(ctx, spaceId, envId, collectionId) if err != nil { - return nil, 0, err + return nil, 0, errors.Wrapf(err, "failed to get collection %q", collectionId) } for i, itm := range items { + itemID := itm.ID itm, err = itm.Decode(ctx, col.Schema) if err != nil { - return nil, 0, err + return nil, 0, errors.Wrapf(err, "failed to decode item %q", itemID) } items[i] = itm @@ -200,11 +204,11 @@ func (m *encodeDecodeMiddleware) GetRevision(ctx context.Context, spaceId, envId if err == nil && item != nil { col, err := m.colls.Get(ctx, spaceId, envId, collectionId) 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) 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 if err == nil && len(items) > 0 { col, err := m.colls.Get(ctx, spaceId, envId, collectionId) if err != nil { - return nil, 0, err + return nil, 0, errors.Wrapf(err, "failed to get collection %q", collectionId) } for i, itm := range items { + itemID := itm.ID itm, err = itm.Decode(ctx, col.Schema) if err != nil { - return nil, 0, err + return nil, 0, errors.Wrapf(err, "failed to decode item %q", itemID) } items[i] = itm @@ -239,9 +244,13 @@ func (m *encodeDecodeMiddleware) GetArchived(ctx context.Context, spaceID, envID col, err := m.colls.Get(ctx, spaceID, envID, collectionID) 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) + if err != nil { + return nil, errors.Wrap(err, "failed to decode item") } - return item.Decode(ctx, col.Schema) + 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) { @@ -249,12 +258,13 @@ func (m *encodeDecodeMiddleware) FindArchived(ctx context.Context, spaceId, envI if err == nil && total > 0 { col, err := m.colls.Get(ctx, spaceId, envId, collectionId) if err != nil { - return nil, 0, err + return nil, 0, errors.Wrapf(err, "failed to get collection %q", collectionId) } for i, itm := range items { + itemID := itm.ID itm, err = itm.Decode(ctx, col.Schema) if err != nil { - return nil, 0, err + return nil, 0, errors.Wrapf(err, "failed to decode item %q", itemID) } items[i] = itm @@ -267,11 +277,11 @@ func (m *encodeDecodeMiddleware) Archive(ctx context.Context, item *items.Item, if item != nil && (item.Data != nil || item.Translations != nil) { col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) 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 { - return err + return errors.Wrap(err, "failed to encode item") } } @@ -282,11 +292,11 @@ func (m *encodeDecodeMiddleware) Unarchive(ctx context.Context, item *items.Item if item != nil && (item.Data != nil || item.Translations != nil) { col, err := m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID) 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 { - return err + return errors.Wrap(err, "failed to encode item") } } @@ -318,12 +328,12 @@ func (m *encodeDecodeMiddleware) Aggregate(ctx context.Context, spaceId, envId, if len(res) > 0 && len(options) > 0 { col, err := m.colls.Get(ctx, spaceId, envId, collectionId) 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...) res, err = items.DecodeAggregateResult(ctx, o.Fields, res, col.Schema) if err != nil { - return nil, errors.Wrap(err, "encode aggregate result") + return nil, errors.Wrap(err, "failed to decode aggregated result") } } return res, err @@ -334,12 +344,12 @@ func (m *encodeDecodeMiddleware) AggregatePublished(ctx context.Context, spaceId if len(res) > 0 && len(options) > 0 { col, err := m.colls.Get(ctx, spaceId, envId, collectionId) 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...) res, err = items.DecodeAggregateResult(ctx, o.Fields, res, col.Schema) if err != nil { - return nil, err + return nil, errors.Wrap(err, "failed to decode aggregated result") } } return res, err diff --git a/pkg/items/middleware/client_encode_middleware_test.go b/pkg/items/middleware/client_encode_middleware_test.go index 4adbdb655f164f650ab357e028dd18c9f95c6971..4f6ba6252f8ffbf79f6caa8278d3e944751699f5 100644 --- a/pkg/items/middleware/client_encode_middleware_test.go +++ b/pkg/items/middleware/client_encode_middleware_test.go @@ -80,7 +80,7 @@ func TestEncodeDecodeMiddleware_Introspect(t *testing.T) { require.EqualError( t, 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, map[string]any{ @@ -130,7 +130,7 @@ func TestEncodeDecodeMiddleware_Introspect(t *testing.T) { require.EqualError( t, 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, map[string]any{