mattermost-plugin-bridge-xmpp/server/store/kvstore/startertemplate.go

77 lines
2.3 KiB
Go

package kvstore
import (
"github.com/mattermost/mattermost/server/public/pluginapi"
"github.com/pkg/errors"
)
// We expose our calls to the KVStore pluginapi methods through this interface for testability and stability.
// This allows us to better control which values are stored with which keys.
// Client wraps the Mattermost plugin API client for KV store operations.
type Client struct {
client *pluginapi.Client
}
// NewKVStore creates a new KVStore implementation using the provided plugin API client.
func NewKVStore(client *pluginapi.Client) KVStore {
return Client{
client: client,
}
}
// GetTemplateData retrieves template data for a specific user from the KV store.
func (kv Client) GetTemplateData(userID string) (string, error) {
var templateData string
err := kv.client.KV.Get("template_key-"+userID, &templateData)
if err != nil {
return "", errors.Wrap(err, "failed to get template data")
}
return templateData, nil
}
// Get retrieves a value from the KV store by key.
func (kv Client) Get(key string) ([]byte, error) {
var data []byte
err := kv.client.KV.Get(key, &data)
if err != nil {
return nil, errors.Wrap(err, "failed to get key from KV store")
}
return data, nil
}
// Set stores a key-value pair in the KV store.
func (kv Client) Set(key string, value []byte) error {
_, appErr := kv.client.KV.Set(key, value)
if appErr != nil {
return errors.Wrap(appErr, "failed to set key in KV store")
}
return nil
}
// Delete removes a key-value pair from the KV store.
func (kv Client) Delete(key string) error {
appErr := kv.client.KV.Delete(key)
if appErr != nil {
return errors.Wrap(appErr, "failed to delete key from KV store")
}
return nil
}
// ListKeys retrieves a paginated list of keys from the KV store.
func (kv Client) ListKeys(page, perPage int) ([]string, error) {
keys, appErr := kv.client.KV.ListKeys(page, perPage)
if appErr != nil {
return nil, errors.Wrap(appErr, "failed to list keys from KV store")
}
return keys, nil
}
// ListKeysWithPrefix retrieves a paginated list of keys with a specific prefix from the KV store.
func (kv Client) ListKeysWithPrefix(page, perPage int, prefix string) ([]string, error) {
keys, appErr := kv.client.KV.ListKeys(page, perPage, pluginapi.WithPrefix(prefix))
if appErr != nil {
return nil, errors.Wrap(appErr, "failed to list keys with prefix from KV store")
}
return keys, nil
}