1// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2// See LICENSE.txt for license information. 3 4package localcachelayer 5 6import ( 7 "bytes" 8 9 "github.com/mattermost/mattermost-server/v6/model" 10 "github.com/mattermost/mattermost-server/v6/store" 11) 12 13type LocalCacheSchemeStore struct { 14 store.SchemeStore 15 rootStore *LocalCacheStore 16} 17 18func (s *LocalCacheSchemeStore) handleClusterInvalidateScheme(msg *model.ClusterMessage) { 19 if bytes.Equal(msg.Data, clearCacheMessageData) { 20 s.rootStore.schemeCache.Purge() 21 } else { 22 s.rootStore.schemeCache.Remove(string(msg.Data)) 23 } 24} 25 26func (s LocalCacheSchemeStore) Save(scheme *model.Scheme) (*model.Scheme, error) { 27 if scheme.Id != "" { 28 defer s.rootStore.doInvalidateCacheCluster(s.rootStore.schemeCache, scheme.Id) 29 } 30 return s.SchemeStore.Save(scheme) 31} 32 33func (s LocalCacheSchemeStore) Get(schemeId string) (*model.Scheme, error) { 34 var scheme *model.Scheme 35 if err := s.rootStore.doStandardReadCache(s.rootStore.schemeCache, schemeId, &scheme); err == nil { 36 return scheme, nil 37 } 38 39 scheme, err := s.SchemeStore.Get(schemeId) 40 if err != nil { 41 return nil, err 42 } 43 44 s.rootStore.doStandardAddToCache(s.rootStore.schemeCache, schemeId, scheme) 45 46 return scheme, nil 47} 48 49func (s LocalCacheSchemeStore) Delete(schemeId string) (*model.Scheme, error) { 50 defer s.rootStore.doInvalidateCacheCluster(s.rootStore.schemeCache, schemeId) 51 defer s.rootStore.doClearCacheCluster(s.rootStore.roleCache) 52 defer s.rootStore.doClearCacheCluster(s.rootStore.rolePermissionsCache) 53 return s.SchemeStore.Delete(schemeId) 54} 55 56func (s LocalCacheSchemeStore) PermanentDeleteAll() error { 57 defer s.rootStore.doClearCacheCluster(s.rootStore.schemeCache) 58 defer s.rootStore.doClearCacheCluster(s.rootStore.roleCache) 59 defer s.rootStore.doClearCacheCluster(s.rootStore.rolePermissionsCache) 60 return s.SchemeStore.PermanentDeleteAll() 61} 62