91 lines
2.2 KiB
Go
91 lines
2.2 KiB
Go
|
|
// /futriis/internal/storage/tapple.go
|
|||
|
|
// Пакет storage реализует операции с тапплами (базами данных)
|
|||
|
|
|
|||
|
|
package storage
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"errors"
|
|||
|
|
"sync/atomic"
|
|||
|
|
|
|||
|
|
"futriis/pkg/types"
|
|||
|
|
"futriis/pkg/utils"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// TappleManager управляет операциями с тапплами
|
|||
|
|
type TappleManager struct {
|
|||
|
|
tapples map[string]*types.Tapple
|
|||
|
|
sliceManager *SliceManager
|
|||
|
|
stats struct {
|
|||
|
|
created int64
|
|||
|
|
deleted int64
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// NewTappleManager создаёт новый менеджер тапплов
|
|||
|
|
func NewTappleManager() *TappleManager {
|
|||
|
|
return &TappleManager{
|
|||
|
|
tapples: make(map[string]*types.Tapple),
|
|||
|
|
sliceManager: NewSliceManager(),
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// CreateTapple создаёт новый таппл
|
|||
|
|
func (tm *TappleManager) CreateTapple(name string) (*types.Tapple, error) {
|
|||
|
|
if _, exists := tm.tapples[name]; exists {
|
|||
|
|
return nil, errors.New("tapple already exists")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tapple := types.NewTapple(name)
|
|||
|
|
tm.tapples[name] = tapple
|
|||
|
|
|
|||
|
|
atomic.AddInt64(&tm.stats.created, 1)
|
|||
|
|
|
|||
|
|
logger := utils.GetLogger()
|
|||
|
|
if logger != nil {
|
|||
|
|
logger.Log("INFO", "Created tapple: "+name)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return tapple, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetTapple возвращает таппл по имени
|
|||
|
|
func (tm *TappleManager) GetTapple(name string) (*types.Tapple, error) {
|
|||
|
|
tapple, exists := tm.tapples[name]
|
|||
|
|
if !exists {
|
|||
|
|
return nil, errors.New("tapple not found")
|
|||
|
|
}
|
|||
|
|
return tapple, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// DeleteTapple удаляет таппл
|
|||
|
|
func (tm *TappleManager) DeleteTapple(name string) error {
|
|||
|
|
if _, exists := tm.tapples[name]; !exists {
|
|||
|
|
return errors.New("tapple not found")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
delete(tm.tapples, name)
|
|||
|
|
|
|||
|
|
atomic.AddInt64(&tm.stats.deleted, 1)
|
|||
|
|
|
|||
|
|
logger := utils.GetLogger()
|
|||
|
|
if logger != nil {
|
|||
|
|
logger.Log("INFO", "Deleted tapple: "+name)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ListTapples возвращает список всех тапплов
|
|||
|
|
func (tm *TappleManager) ListTapples() []string {
|
|||
|
|
tapples := make([]string, 0, len(tm.tapples))
|
|||
|
|
for name := range tm.tapples {
|
|||
|
|
tapples = append(tapples, name)
|
|||
|
|
}
|
|||
|
|
return tapples
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetSliceManager возвращает менеджер слайсов
|
|||
|
|
func (tm *TappleManager) GetSliceManager() *SliceManager {
|
|||
|
|
return tm.sliceManager
|
|||
|
|
}
|