Skip to content
Snippets Groups Projects
Commit dfaca492 authored by Valera Shaitorov's avatar Valera Shaitorov :alien:
Browse files

Добавлены Items middlewares

parent 7ec68608
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
"time" "time"
"git.perx.ru/perxis/perxis-go/pkg/cache" "git.perx.ru/perxis/perxis-go/pkg/cache"
"git.perx.ru/perxis/perxis-go/pkg/errors"
"git.perx.ru/perxis/perxis-go/pkg/invitations" "git.perx.ru/perxis/perxis-go/pkg/invitations"
invmocks "git.perx.ru/perxis/perxis-go/pkg/invitations/mocks" invmocks "git.perx.ru/perxis/perxis-go/pkg/invitations/mocks"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
...@@ -24,6 +25,8 @@ func TestLocalesCache(t *testing.T) { ...@@ -24,6 +25,8 @@ func TestLocalesCache(t *testing.T) {
ttl = 20 * time.Millisecond ttl = 20 * time.Millisecond
) )
errNotFound := errors.NotFound(errors.New("not found"))
ctx := context.Background() ctx := context.Background()
t.Run("Get from Cache", func(t *testing.T) { t.Run("Get from Cache", func(t *testing.T) {
...@@ -59,7 +62,7 @@ func TestLocalesCache(t *testing.T) { ...@@ -59,7 +62,7 @@ func TestLocalesCache(t *testing.T) {
assert.Same(t, v1, v2, "Ожидается что при повторном запросе объект будет получен из кэша.") assert.Same(t, v1, v2, "Ожидается что при повторном запросе объект будет получен из кэша.")
inv.On("Accept", mock.Anything, invID, usrID).Return(nil).Once() inv.On("Accept", mock.Anything, invID, usrID).Return(nil).Once()
inv.On("Get", mock.Anything, invID).Return(nil, services.ErrNotFound).Once() inv.On("Get", mock.Anything, invID).Return(nil, errNotFound).Once()
err = svc.Accept(ctx, invID, usrID) err = svc.Accept(ctx, invID, usrID)
require.NoError(t, err) require.NoError(t, err)
...@@ -86,7 +89,7 @@ func TestLocalesCache(t *testing.T) { ...@@ -86,7 +89,7 @@ func TestLocalesCache(t *testing.T) {
assert.Same(t, v1, v2, "Ожидается что при повторном запросе объект будет получен из кэша.") assert.Same(t, v1, v2, "Ожидается что при повторном запросе объект будет получен из кэша.")
inv.On("Delete", mock.Anything, invID).Return(nil).Once() inv.On("Delete", mock.Anything, invID).Return(nil).Once()
inv.On("Get", mock.Anything, invID).Return(nil, services.ErrNotFound).Once() inv.On("Get", mock.Anything, invID).Return(nil, errNotFound).Once()
err = svc.Delete(ctx, invID) err = svc.Delete(ctx, invID)
require.NoError(t, err) require.NoError(t, err)
......
package service
import (
"context"
"strings"
"git.perx.ru/perxis/perxis-go/pkg/cache"
envService "git.perx.ru/perxis/perxis-go/pkg/environments"
service "git.perx.ru/perxis/perxis-go/pkg/items"
)
func makeKey(ss ...string) string {
return strings.Join(ss, "-")
}
func CachingMiddleware(cache, cachePublished *cache.Cache, envs envService.Environments) Middleware {
return func(next service.Items) service.Items {
return &cachingMiddleware{
cache: cache,
cachePublished: cachePublished,
Items: next,
envs: envs,
}
}
}
type cachingMiddleware struct {
cache *cache.Cache
cachePublished *cache.Cache
envs envService.Environments
service.Items
}
func (m cachingMiddleware) Get(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*service.GetOptions) (itm *service.Item, err error) {
value, e := m.cache.Get(makeKey(spaceId, envId, collectionId, itemId))
if e == nil {
return value.(*service.Item), err
}
itm, err = m.Items.Get(ctx, spaceId, envId, collectionId, itemId, options...)
if err == nil {
env, err := m.envs.Get(ctx, itm.SpaceID, itm.EnvID)
if err != nil {
return nil, err
}
m.cache.Set(makeKey(itm.SpaceID, env.ID, itm.CollectionID, itm.ID), itm)
for _, al := range env.Aliases {
m.cache.Set(makeKey(itm.SpaceID, al, itm.CollectionID, itm.ID), itm)
}
}
return itm, err
}
func (m cachingMiddleware) Update(ctx context.Context, item *service.Item, options ...*service.UpdateOptions) (err error) {
err = m.Items.Update(ctx, item, options...)
if err == nil {
env, err := m.envs.Get(ctx, item.SpaceID, item.EnvID)
if err != nil {
return err
}
m.cache.Remove(makeKey(item.SpaceID, env.ID, item.CollectionID, item.ID))
m.cachePublished.Remove(makeKey(item.SpaceID, env.ID, item.CollectionID, item.ID))
for _, al := range env.Aliases {
m.cache.Remove(makeKey(item.SpaceID, al, item.CollectionID, item.ID))
m.cachePublished.Remove(makeKey(item.SpaceID, al, item.CollectionID, item.ID))
}
}
return err
}
func (m cachingMiddleware) Delete(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*service.DeleteOptions) (err error) {
err = m.Items.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
if err == nil {
env, err := m.envs.Get(ctx, spaceId, envId)
if err != nil {
return err
}
m.cache.Remove(makeKey(spaceId, env.ID, collectionId, itemId))
m.cachePublished.Remove(makeKey(spaceId, env.ID, collectionId, itemId))
for _, al := range env.Aliases {
m.cache.Remove(makeKey(spaceId, al, collectionId, itemId))
m.cachePublished.Remove(makeKey(spaceId, al, collectionId, itemId))
}
}
return err
}
func (m cachingMiddleware) Publish(ctx context.Context, item *service.Item, options ...*service.PublishOptions) (err error) {
err = m.Items.Publish(ctx, item, options...)
if err == nil {
env, err := m.envs.Get(ctx, item.SpaceID, item.EnvID)
if err != nil {
return err
}
m.cache.Remove(makeKey(item.SpaceID, env.ID, item.CollectionID, item.ID))
m.cachePublished.Remove(makeKey(item.SpaceID, env.ID, item.CollectionID, item.ID))
for _, al := range env.Aliases {
m.cache.Remove(makeKey(item.SpaceID, al, item.CollectionID, item.ID))
m.cachePublished.Remove(makeKey(item.SpaceID, al, item.CollectionID, item.ID))
}
}
return err
}
func (m cachingMiddleware) Unpublish(ctx context.Context, item *service.Item, options ...*service.UnpublishOptions) (err error) {
err = m.Items.Unpublish(ctx, item, options...)
if err == nil {
env, err := m.envs.Get(ctx, item.SpaceID, item.EnvID)
if err != nil {
return err
}
m.cache.Remove(makeKey(item.SpaceID, env.ID, item.CollectionID, item.ID))
m.cachePublished.Remove(makeKey(item.SpaceID, env.ID, item.CollectionID, item.ID))
for _, al := range env.Aliases {
m.cache.Remove(makeKey(item.SpaceID, al, item.CollectionID, item.ID))
m.cachePublished.Remove(makeKey(item.SpaceID, al, item.CollectionID, item.ID))
}
}
return err
}
func (m cachingMiddleware) GetPublished(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*service.GetPublishedOptions) (itm *service.Item, err error) {
opts := service.MergeGetPublishedOptions(options...)
val, e := m.cachePublished.Get(makeKey(spaceId, envId, collectionId, itemId))
if e == nil {
value := val.(map[string]*service.Item)
if i, ok := value[opts.LocaleID]; ok {
return i, nil
}
}
itm, err = m.Items.GetPublished(ctx, spaceId, envId, collectionId, itemId, opts)
if err == nil {
env, err := m.envs.Get(ctx, itm.SpaceID, itm.EnvID)
if err != nil {
return nil, err
}
var value = make(map[string]*service.Item)
if val != nil {
value = val.(map[string]*service.Item)
}
value[opts.LocaleID] = itm
m.cachePublished.Set(makeKey(itm.SpaceID, env.ID, itm.CollectionID, itm.ID), value)
for _, al := range env.Aliases {
m.cachePublished.Set(makeKey(itm.SpaceID, al, itm.CollectionID, itm.ID), value)
}
}
return itm, err
}
func (m cachingMiddleware) Archive(ctx context.Context, item *service.Item, options ...*service.ArchiveOptions) (err error) {
err = m.Items.Archive(ctx, item, options...)
if err == nil {
env, err := m.envs.Get(ctx, item.SpaceID, item.EnvID)
if err != nil {
return err
}
m.cache.Remove(makeKey(item.SpaceID, env.ID, item.CollectionID, item.ID))
m.cachePublished.Remove(makeKey(item.SpaceID, env.ID, item.CollectionID, item.ID))
for _, al := range env.Aliases {
m.cache.Remove(makeKey(item.SpaceID, al, item.CollectionID, item.ID))
m.cachePublished.Remove(makeKey(item.SpaceID, al, item.CollectionID, item.ID))
}
}
return err
}
This diff is collapsed.
package service
import (
"context"
"git.perx.ru/perxis/perxis-go/pkg/collections"
"git.perx.ru/perxis/perxis-go/pkg/errors"
"git.perx.ru/perxis/perxis-go/pkg/items"
"git.perx.ru/perxis/perxis-go/pkg/schema"
)
// ClientEncodeMiddleware выполняет операции encode/decode для передаваемых данных
func ClientEncodeMiddleware(colls collections.Collections) Middleware {
return func(items items.Items) items.Items {
return &encodeDecodeMiddleware{
next: items,
colls: colls,
}
}
}
type encodeDecodeMiddleware struct {
next items.Items
colls collections.Collections
}
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
}
if item, err = item.Encode(ctx, coll.Schema); err != nil {
return
}
itm, sch, err = m.next.Introspect(ctx, item, opts...)
if itm != nil && sch != nil {
var err error
if itm, err = itm.Decode(ctx, sch); err != nil {
return nil, nil, err
}
}
return itm, sch, err
}
func (m *encodeDecodeMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) {
var col *collections.Collection
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 nil, err
}
if item, err = item.Encode(ctx, col.Schema); err != nil {
return nil, err
}
}
res, err := m.next.Create(ctx, item, opts...)
if err == nil && (res.Data != nil || res.Translations != nil) {
if col == nil {
col, err = m.colls.Get(ctx, item.SpaceID, item.EnvID, item.CollectionID)
if err != nil {
return nil, err
}
}
res, err = res.Decode(ctx, col.Schema)
}
return res, err
}
func (m *encodeDecodeMiddleware) Update(ctx context.Context, upd *items.Item, options ...*items.UpdateOptions) (err error) {
var col *collections.Collection
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
}
if upd, err = upd.Encode(ctx, col.Schema); err != nil {
return err
}
}
return m.next.Update(ctx, upd, options...)
}
func (m *encodeDecodeMiddleware) Find(ctx context.Context, spaceId, envId, collectionId string, filter *items.Filter, options ...*items.FindOptions) (items []*items.Item, total int, err error) {
items, total, err = m.next.Find(ctx, spaceId, envId, collectionId, filter, options...)
if err == nil && total > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil {
return nil, 0, err
}
for i, itm := range items {
itm, err = itm.Decode(ctx, col.Schema)
if err != nil {
return nil, 0, err
}
items[i] = itm
}
}
return
}
func (m *encodeDecodeMiddleware) Get(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*items.GetOptions) (item *items.Item, err error) {
item, err = m.next.Get(ctx, spaceId, envId, collectionId, itemId, options...)
if err == nil && item != nil {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil {
return nil, err
}
item, err = item.Decode(ctx, col.Schema)
if err != nil {
return nil, err
}
}
return
}
func (m *encodeDecodeMiddleware) Publish(ctx context.Context, item *items.Item, opts ...*items.PublishOptions) (err error) {
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
}
if item, err = item.Encode(ctx, col.Schema); err != nil {
return err
}
}
return m.next.Publish(ctx, item, opts...)
}
func (m *encodeDecodeMiddleware) Unpublish(ctx context.Context, item *items.Item, opts ...*items.UnpublishOptions) (err error) {
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
}
if item, err = item.Encode(ctx, col.Schema); err != nil {
return err
}
}
return m.next.Unpublish(ctx, item, opts...)
}
func (m *encodeDecodeMiddleware) GetPublished(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*items.GetPublishedOptions) (item *items.Item, err error) {
item, err = m.next.GetPublished(ctx, spaceId, envId, collectionId, itemId, options...)
if err == nil && item != nil {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil {
return nil, err
}
item, err = item.Decode(ctx, col.Schema)
if err != nil {
return nil, err
}
}
return
}
func (m *encodeDecodeMiddleware) FindPublished(ctx context.Context, spaceId, envId, collectionId string, filter *items.Filter, options ...*items.FindPublishedOptions) (items []*items.Item, total int, err error) {
items, total, err = m.next.FindPublished(ctx, spaceId, envId, collectionId, filter, options...)
if err == nil && total > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil {
return nil, 0, err
}
for i, itm := range items {
itm, err = itm.Decode(ctx, col.Schema)
if err != nil {
return nil, 0, err
}
items[i] = itm
}
}
return
}
func (m *encodeDecodeMiddleware) GetRevision(ctx context.Context, spaceId, envId, collectionId, itemId, revisionId string, options ...*items.GetRevisionOptions) (item *items.Item, err error) {
item, err = m.next.GetRevision(ctx, spaceId, envId, collectionId, itemId, revisionId, options...)
if err == nil && item != nil {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil {
return nil, err
}
item, err = item.Decode(ctx, col.Schema)
if err != nil {
return nil, err
}
}
return
}
func (m *encodeDecodeMiddleware) ListRevisions(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*items.ListRevisionsOptions) (items []*items.Item, err error) {
items, err = m.next.ListRevisions(ctx, spaceId, envId, collectionId, itemId, options...)
if err == nil && len(items) > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil {
return nil, err
}
for i, itm := range items {
itm, err = itm.Decode(ctx, col.Schema)
if err != nil {
return nil, err
}
items[i] = itm
}
}
return
}
func (m *encodeDecodeMiddleware) FindArchived(ctx context.Context, spaceId, envId, collectionId string, filter *items.Filter, options ...*items.FindArchivedOptions) (items []*items.Item, total int, err error) {
items, total, err = m.next.FindArchived(ctx, spaceId, envId, collectionId, filter, options...)
if err == nil && total > 0 {
col, err := m.colls.Get(ctx, spaceId, envId, collectionId)
if err != nil {
return nil, 0, err
}
for i, itm := range items {
itm, err = itm.Decode(ctx, col.Schema)
if err != nil {
return nil, 0, err
}
items[i] = itm
}
}
return
}
func (m *encodeDecodeMiddleware) Archive(ctx context.Context, item *items.Item, opts ...*items.ArchiveOptions) (err error) {
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
}
if item, err = item.Encode(ctx, col.Schema); err != nil {
return err
}
}
return m.next.Archive(ctx, item, opts...)
}
func (m *encodeDecodeMiddleware) Unarchive(ctx context.Context, item *items.Item, opts ...*items.UnarchiveOptions) (err error) {
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
}
if item, err = item.Encode(ctx, col.Schema); err != nil {
return err
}
}
return m.next.Unarchive(ctx, item, opts...)
}
func (m *encodeDecodeMiddleware) Delete(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*items.DeleteOptions) (err error) {
return m.next.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *encodeDecodeMiddleware) Undelete(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*items.UndeleteOptions) (err error) {
return m.next.Undelete(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *encodeDecodeMiddleware) Aggregate(ctx context.Context, spaceId, envId, collectionId string, filter *items.Filter, options ...*items.AggregateOptions) (result map[string]interface{}, err error) {
res, err := m.next.Aggregate(ctx, spaceId, envId, collectionId, filter, options...)
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")
}
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 res, err
}
func (m *encodeDecodeMiddleware) AggregatePublished(ctx context.Context, spaceId, envId, collectionId string, filter *items.Filter, options ...*items.AggregatePublishedOptions) (result map[string]interface{}, err error) {
res, err := m.next.AggregatePublished(ctx, spaceId, envId, collectionId, filter, options...)
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")
}
o := items.MergeAggregatePublishedOptions(options...)
res, err = items.DecodeAggregateResult(ctx, o.Fields, res, col.Schema)
if err != nil {
return nil, err
}
}
return res, err
}
// Code generated by gowrap. DO NOT EDIT.
// template: ../../../assets/templates/middleware/error_log
// gowrap: http://github.com/hexdigest/gowrap
package service
//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/items -i Items -t ../../../assets/templates/middleware/error_log -o error_logging_middleware.go -l ""
import (
"context"
"git.perx.ru/perxis/perxis-go/pkg/items"
"git.perx.ru/perxis/perxis-go/pkg/schema"
"go.uber.org/zap"
)
// errorLoggingMiddleware implements items.Items that is instrumented with logging
type errorLoggingMiddleware struct {
logger *zap.Logger
next items.Items
}
// ErrorLoggingMiddleware instruments an implementation of the items.Items with simple logging
func ErrorLoggingMiddleware(logger *zap.Logger) Middleware {
return func(next items.Items) items.Items {
return &errorLoggingMiddleware{
next: next,
logger: logger,
}
}
}
func (m *errorLoggingMiddleware) Aggregate(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregateOptions) (result map[string]interface{}, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Aggregate(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *errorLoggingMiddleware) AggregatePublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregatePublishedOptions) (result map[string]interface{}, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.AggregatePublished(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *errorLoggingMiddleware) Archive(ctx context.Context, item *items.Item, options ...*items.ArchiveOptions) (err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Archive(ctx, item, options...)
}
func (m *errorLoggingMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Create(ctx, item, opts...)
}
func (m *errorLoggingMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.DeleteOptions) (err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *errorLoggingMiddleware) Find(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindOptions) (items []*items.Item, total int, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Find(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *errorLoggingMiddleware) FindArchived(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindArchivedOptions) (items []*items.Item, total int, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.FindArchived(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *errorLoggingMiddleware) FindPublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindPublishedOptions) (items []*items.Item, total int, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.FindPublished(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *errorLoggingMiddleware) Get(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetOptions) (item *items.Item, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Get(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *errorLoggingMiddleware) GetPublished(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetPublishedOptions) (item *items.Item, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.GetPublished(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *errorLoggingMiddleware) GetRevision(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, revisionId string, options ...*items.GetRevisionOptions) (item *items.Item, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.GetRevision(ctx, spaceId, envId, collectionId, itemId, revisionId, options...)
}
func (m *errorLoggingMiddleware) Introspect(ctx context.Context, item *items.Item, opts ...*items.IntrospectOptions) (itm *items.Item, sch *schema.Schema, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Introspect(ctx, item, opts...)
}
func (m *errorLoggingMiddleware) ListRevisions(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.ListRevisionsOptions) (items []*items.Item, err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.ListRevisions(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *errorLoggingMiddleware) Publish(ctx context.Context, item *items.Item, options ...*items.PublishOptions) (err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Publish(ctx, item, options...)
}
func (m *errorLoggingMiddleware) Unarchive(ctx context.Context, item *items.Item, options ...*items.UnarchiveOptions) (err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Unarchive(ctx, item, options...)
}
func (m *errorLoggingMiddleware) Undelete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.UndeleteOptions) (err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Undelete(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *errorLoggingMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Unpublish(ctx, item, options...)
}
func (m *errorLoggingMiddleware) Update(ctx context.Context, item *items.Item, options ...*items.UpdateOptions) (err error) {
logger := m.logger
defer func() {
if err != nil {
logger.Warn("response error", zap.Error(err))
}
}()
return m.next.Update(ctx, item, options...)
}
// Code generated by gowrap. DO NOT EDIT.
// template: ../../../assets/templates/middleware/access_log
// gowrap: http://github.com/hexdigest/gowrap
package service
//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/items -i Items -t ../../../assets/templates/middleware/access_log -o logging_middleware.go -l ""
import (
"context"
"fmt"
"time"
"git.perx.ru/perxis/perxis-go/pkg/auth"
"git.perx.ru/perxis/perxis-go/pkg/items"
"git.perx.ru/perxis/perxis-go/pkg/schema"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// loggingMiddleware implements items.Items that is instrumented with logging
type loggingMiddleware struct {
logger *zap.Logger
next items.Items
}
// LoggingMiddleware instruments an implementation of the items.Items with simple logging
func LoggingMiddleware(logger *zap.Logger) Middleware {
return func(next items.Items) items.Items {
return &loggingMiddleware{
next: next,
logger: logger,
}
}
}
func (m *loggingMiddleware) Aggregate(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregateOptions) (result map[string]interface{}, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"filter": filter,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Aggregate.Request", fields...)
result, err = m.next.Aggregate(ctx, spaceId, envId, collectionId, filter, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"result": result,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Aggregate.Response", fields...)
return result, err
}
func (m *loggingMiddleware) AggregatePublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregatePublishedOptions) (result map[string]interface{}, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"filter": filter,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("AggregatePublished.Request", fields...)
result, err = m.next.AggregatePublished(ctx, spaceId, envId, collectionId, filter, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"result": result,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("AggregatePublished.Response", fields...)
return result, err
}
func (m *loggingMiddleware) Archive(ctx context.Context, item *items.Item, options ...*items.ArchiveOptions) (err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"item": item,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Archive.Request", fields...)
err = m.next.Archive(ctx, item, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Archive.Response", fields...)
return err
}
func (m *loggingMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"item": item,
"opts": opts} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Create.Request", fields...)
created, err = m.next.Create(ctx, item, opts...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"created": created,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Create.Response", fields...)
return created, err
}
func (m *loggingMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.DeleteOptions) (err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"itemId": itemId,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Delete.Request", fields...)
err = m.next.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Delete.Response", fields...)
return err
}
func (m *loggingMiddleware) Find(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindOptions) (items []*items.Item, total int, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"filter": filter,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Find.Request", fields...)
items, total, err = m.next.Find(ctx, spaceId, envId, collectionId, filter, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"items": items,
"total": total,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Find.Response", fields...)
return items, total, err
}
func (m *loggingMiddleware) FindArchived(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindArchivedOptions) (items []*items.Item, total int, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"filter": filter,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("FindArchived.Request", fields...)
items, total, err = m.next.FindArchived(ctx, spaceId, envId, collectionId, filter, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"items": items,
"total": total,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("FindArchived.Response", fields...)
return items, total, err
}
func (m *loggingMiddleware) FindPublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindPublishedOptions) (items []*items.Item, total int, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"filter": filter,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("FindPublished.Request", fields...)
items, total, err = m.next.FindPublished(ctx, spaceId, envId, collectionId, filter, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"items": items,
"total": total,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("FindPublished.Response", fields...)
return items, total, err
}
func (m *loggingMiddleware) Get(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetOptions) (item *items.Item, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"itemId": itemId,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Get.Request", fields...)
item, err = m.next.Get(ctx, spaceId, envId, collectionId, itemId, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"item": item,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Get.Response", fields...)
return item, err
}
func (m *loggingMiddleware) GetPublished(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetPublishedOptions) (item *items.Item, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"itemId": itemId,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("GetPublished.Request", fields...)
item, err = m.next.GetPublished(ctx, spaceId, envId, collectionId, itemId, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"item": item,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("GetPublished.Response", fields...)
return item, err
}
func (m *loggingMiddleware) GetRevision(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, revisionId string, options ...*items.GetRevisionOptions) (item *items.Item, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"itemId": itemId,
"revisionId": revisionId,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("GetRevision.Request", fields...)
item, err = m.next.GetRevision(ctx, spaceId, envId, collectionId, itemId, revisionId, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"item": item,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("GetRevision.Response", fields...)
return item, err
}
func (m *loggingMiddleware) Introspect(ctx context.Context, item *items.Item, opts ...*items.IntrospectOptions) (itm *items.Item, sch *schema.Schema, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"item": item,
"opts": opts} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Introspect.Request", fields...)
itm, sch, err = m.next.Introspect(ctx, item, opts...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"itm": itm,
"sch": sch,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Introspect.Response", fields...)
return itm, sch, err
}
func (m *loggingMiddleware) ListRevisions(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.ListRevisionsOptions) (items []*items.Item, err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"itemId": itemId,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("ListRevisions.Request", fields...)
items, err = m.next.ListRevisions(ctx, spaceId, envId, collectionId, itemId, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"items": items,
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("ListRevisions.Response", fields...)
return items, err
}
func (m *loggingMiddleware) Publish(ctx context.Context, item *items.Item, options ...*items.PublishOptions) (err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"item": item,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Publish.Request", fields...)
err = m.next.Publish(ctx, item, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Publish.Response", fields...)
return err
}
func (m *loggingMiddleware) Unarchive(ctx context.Context, item *items.Item, options ...*items.UnarchiveOptions) (err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"item": item,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Unarchive.Request", fields...)
err = m.next.Unarchive(ctx, item, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Unarchive.Response", fields...)
return err
}
func (m *loggingMiddleware) Undelete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.UndeleteOptions) (err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"spaceId": spaceId,
"envId": envId,
"collectionId": collectionId,
"itemId": itemId,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Undelete.Request", fields...)
err = m.next.Undelete(ctx, spaceId, envId, collectionId, itemId, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Undelete.Response", fields...)
return err
}
func (m *loggingMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"item": item,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Unpublish.Request", fields...)
err = m.next.Unpublish(ctx, item, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Unpublish.Response", fields...)
return err
}
func (m *loggingMiddleware) Update(ctx context.Context, item *items.Item, options ...*items.UpdateOptions) (err error) {
begin := time.Now()
var fields []zapcore.Field
for k, v := range map[string]interface{}{
"ctx": ctx,
"item": item,
"options": options} {
if k == "ctx" {
fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Update.Request", fields...)
err = m.next.Update(ctx, item, options...)
fields = []zapcore.Field{
zap.Duration("time", time.Since(begin)),
zap.Error(err),
}
for k, v := range map[string]interface{}{
"err": err} {
if k == "err" {
continue
}
fields = append(fields, zap.Reflect(k, v))
}
m.logger.Debug("Update.Response", fields...)
return err
}
// Code generated by gowrap. DO NOT EDIT.
// template: ../../../assets/templates/middleware/middleware
// gowrap: http://github.com/hexdigest/gowrap
package service
//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/items -i Items -t ../../../assets/templates/middleware/middleware -o middleware.go -l ""
import (
"git.perx.ru/perxis/perxis-go/pkg/items"
"go.uber.org/zap"
)
type Middleware func(items.Items) items.Items
func WithLog(s items.Items, logger *zap.Logger, log_access bool) items.Items {
if logger == nil {
logger = zap.NewNop()
}
logger = logger.Named("Items")
s = ErrorLoggingMiddleware(logger)(s)
if log_access {
s = LoggingMiddleware(logger)(s)
}
s = RecoveringMiddleware(logger)(s)
return s
}
// Code generated by gowrap. DO NOT EDIT.
// template: ../../../assets/templates/middleware/recovery
// gowrap: http://github.com/hexdigest/gowrap
package service
//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/items -i Items -t ../../../assets/templates/middleware/recovery -o recovering_middleware.go -l ""
import (
"context"
"fmt"
"git.perx.ru/perxis/perxis-go/pkg/items"
"git.perx.ru/perxis/perxis-go/pkg/schema"
"go.uber.org/zap"
)
// recoveringMiddleware implements items.Items that is instrumented with logging
type recoveringMiddleware struct {
logger *zap.Logger
next items.Items
}
// RecoveringMiddleware instruments an implementation of the items.Items with simple logging
func RecoveringMiddleware(logger *zap.Logger) Middleware {
return func(next items.Items) items.Items {
return &recoveringMiddleware{
next: next,
logger: logger,
}
}
}
func (m *recoveringMiddleware) Aggregate(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregateOptions) (result map[string]interface{}, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Aggregate(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *recoveringMiddleware) AggregatePublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregatePublishedOptions) (result map[string]interface{}, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.AggregatePublished(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *recoveringMiddleware) Archive(ctx context.Context, item *items.Item, options ...*items.ArchiveOptions) (err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Archive(ctx, item, options...)
}
func (m *recoveringMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Create(ctx, item, opts...)
}
func (m *recoveringMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.DeleteOptions) (err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *recoveringMiddleware) Find(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindOptions) (items []*items.Item, total int, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Find(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *recoveringMiddleware) FindArchived(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindArchivedOptions) (items []*items.Item, total int, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.FindArchived(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *recoveringMiddleware) FindPublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindPublishedOptions) (items []*items.Item, total int, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.FindPublished(ctx, spaceId, envId, collectionId, filter, options...)
}
func (m *recoveringMiddleware) Get(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetOptions) (item *items.Item, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Get(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *recoveringMiddleware) GetPublished(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetPublishedOptions) (item *items.Item, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.GetPublished(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *recoveringMiddleware) GetRevision(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, revisionId string, options ...*items.GetRevisionOptions) (item *items.Item, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.GetRevision(ctx, spaceId, envId, collectionId, itemId, revisionId, options...)
}
func (m *recoveringMiddleware) Introspect(ctx context.Context, item *items.Item, opts ...*items.IntrospectOptions) (itm *items.Item, sch *schema.Schema, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Introspect(ctx, item, opts...)
}
func (m *recoveringMiddleware) ListRevisions(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.ListRevisionsOptions) (items []*items.Item, err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.ListRevisions(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *recoveringMiddleware) Publish(ctx context.Context, item *items.Item, options ...*items.PublishOptions) (err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Publish(ctx, item, options...)
}
func (m *recoveringMiddleware) Unarchive(ctx context.Context, item *items.Item, options ...*items.UnarchiveOptions) (err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Unarchive(ctx, item, options...)
}
func (m *recoveringMiddleware) Undelete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.UndeleteOptions) (err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Undelete(ctx, spaceId, envId, collectionId, itemId, options...)
}
func (m *recoveringMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Unpublish(ctx, item, options...)
}
func (m *recoveringMiddleware) Update(ctx context.Context, item *items.Item, options ...*items.UpdateOptions) (err error) {
logger := m.logger
defer func() {
if r := recover(); r != nil {
logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
err = fmt.Errorf("%v", r)
}
}()
return m.next.Update(ctx, item, options...)
}
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