Select Git revision
core_test.go
storage.go 2.42 KiB
package extension
import (
"context"
pb "git.perx.ru/perxis/perxis-go/proto/extensions"
"git.perx.ru/perxis/perxis-go/pkg/content"
"git.perx.ru/perxis/perxis-go/pkg/items"
)
type Status = pb.GetExtensionsResponse_Status
// Storage описывает интерфейс хранилища состояний расширений
type Storage interface {
GetStatus(ctx context.Context, spaceID, envID string, extension string) (*Status, error)
SetStatus(ctx context.Context, spaceID, envID string, extension string, status *Status) error
DeleteStatus(ctx context.Context, spaceID, envID string, extension string) error
}
type storage struct {
content *content.Content
}
func NewStorage(content *content.Content) Storage {
return &storage{content: content}
}
// GetStatus возвращает состояние расширения в пространстве
func (s *storage) GetStatus(ctx context.Context, spaceID, envID string, extension string) (*Status, error) {
res, err := s.content.Items.Get(ctx, spaceID, envID, StatusCollectionID, extension)
if err != nil {
return nil, err
}
d := res.Data
msg, _ := d["status_msg"].(string)
errmsg, _ := d["status_error"].(string)
ver, _ := d["version"].(string)
return &Status{
Msg: msg,
Error: errmsg,
Installed: true,
InstalledVersion: ver,
}, nil
}
// SetStatus устанавливает состояние расширения в пространстве
func (s *storage) SetStatus(ctx context.Context, spaceID, envID string, extension string, status *Status) error {
item := &items.Item{
ID: extension,
SpaceID: spaceID,
EnvID: envID,
CollectionID: StatusCollectionID,
}
item.Set("version", status.InstalledVersion)
item.Set("status_msg", status.Msg)
item.Set("status_error", status.Error)
i, _ := s.content.Items.Get(ctx, spaceID, envID, StatusCollectionID, extension)
if i == nil {
_, err := s.content.Items.Create(ctx, i)
return err
}
return s.content.Items.Update(ctx, i)
}
// DeleteStatus удаляет состояние расширения в пространстве (при удалении расширения)
func (s *storage) DeleteStatus(ctx context.Context, spaceID, envID string, extension string) error {
item := &items.Item{
ID: extension,
SpaceID: spaceID,
EnvID: envID,
CollectionID: StatusCollectionID,
}
return s.content.Items.Delete(ctx, item)
}