82 lines
No EOL
3 KiB
Go
82 lines
No EOL
3 KiB
Go
package collection
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/gocql/gocql"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// IncrementFileCount increments the file count for a collection
|
|
func (impl *collectionRepositoryImpl) IncrementFileCount(ctx context.Context, collectionID gocql.UUID) error {
|
|
// Read current file count
|
|
var currentCount int64
|
|
readQuery := `SELECT file_count FROM maplefile.collections_by_id WHERE id = ?`
|
|
if err := impl.Session.Query(readQuery, collectionID).WithContext(ctx).Scan(¤tCount); err != nil {
|
|
if err == gocql.ErrNotFound {
|
|
impl.Logger.Warn("collection not found for file count increment",
|
|
zap.String("collection_id", collectionID.String()))
|
|
return nil // Collection doesn't exist, nothing to increment
|
|
}
|
|
impl.Logger.Error("failed to read file count for increment",
|
|
zap.String("collection_id", collectionID.String()),
|
|
zap.Error(err))
|
|
return fmt.Errorf("failed to read file count: %w", err)
|
|
}
|
|
|
|
// Write incremented count
|
|
newCount := currentCount + 1
|
|
updateQuery := `UPDATE maplefile.collections_by_id SET file_count = ? WHERE id = ?`
|
|
if err := impl.Session.Query(updateQuery, newCount, collectionID).WithContext(ctx).Exec(); err != nil {
|
|
impl.Logger.Error("failed to increment file count",
|
|
zap.String("collection_id", collectionID.String()),
|
|
zap.Error(err))
|
|
return fmt.Errorf("failed to increment file count: %w", err)
|
|
}
|
|
|
|
impl.Logger.Debug("incremented file count",
|
|
zap.String("collection_id", collectionID.String()),
|
|
zap.Int64("old_count", currentCount),
|
|
zap.Int64("new_count", newCount))
|
|
|
|
return nil
|
|
}
|
|
|
|
// DecrementFileCount decrements the file count for a collection
|
|
func (impl *collectionRepositoryImpl) DecrementFileCount(ctx context.Context, collectionID gocql.UUID) error {
|
|
// Read current file count
|
|
var currentCount int64
|
|
readQuery := `SELECT file_count FROM maplefile.collections_by_id WHERE id = ?`
|
|
if err := impl.Session.Query(readQuery, collectionID).WithContext(ctx).Scan(¤tCount); err != nil {
|
|
if err == gocql.ErrNotFound {
|
|
impl.Logger.Warn("collection not found for file count decrement",
|
|
zap.String("collection_id", collectionID.String()))
|
|
return nil // Collection doesn't exist, nothing to decrement
|
|
}
|
|
impl.Logger.Error("failed to read file count for decrement",
|
|
zap.String("collection_id", collectionID.String()),
|
|
zap.Error(err))
|
|
return fmt.Errorf("failed to read file count: %w", err)
|
|
}
|
|
|
|
// Write decremented count (don't go below 0)
|
|
newCount := currentCount - 1
|
|
if newCount < 0 {
|
|
newCount = 0
|
|
}
|
|
updateQuery := `UPDATE maplefile.collections_by_id SET file_count = ? WHERE id = ?`
|
|
if err := impl.Session.Query(updateQuery, newCount, collectionID).WithContext(ctx).Exec(); err != nil {
|
|
impl.Logger.Error("failed to decrement file count",
|
|
zap.String("collection_id", collectionID.String()),
|
|
zap.Error(err))
|
|
return fmt.Errorf("failed to decrement file count: %w", err)
|
|
}
|
|
|
|
impl.Logger.Debug("decremented file count",
|
|
zap.String("collection_id", collectionID.String()),
|
|
zap.Int64("old_count", currentCount),
|
|
zap.Int64("new_count", newCount))
|
|
|
|
return nil
|
|
} |