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
|
||
}
|