91 lines
2.2 KiB
Go
Raw Permalink Normal View History

2026-02-23 22:48:31 +03:00
// /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
}