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