monorepo/cloud/maplefile-backend/internal/repo/filemetadata/impl.go

68 lines
2.2 KiB
Go

// monorepo/cloud/maplefile-backend/internal/maplefile/repo/filemetadata/impl.go
package filemetadata
import (
"encoding/json"
"github.com/gocql/gocql"
"go.uber.org/zap"
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
dom_collection "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/domain/collection"
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/domain/crypto"
dom_file "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/domain/file"
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/domain/tag"
)
type fileMetadataRepositoryImpl struct {
Logger *zap.Logger
Session *gocql.Session
CollectionRepo dom_collection.CollectionRepository
}
func NewRepository(appCfg *config.Configuration, session *gocql.Session, loggerp *zap.Logger, collectionRepo dom_collection.CollectionRepository) dom_file.FileMetadataRepository {
loggerp = loggerp.Named("FileMetadataRepository")
return &fileMetadataRepositoryImpl{
Logger: loggerp,
Session: session,
CollectionRepo: collectionRepo,
}
}
// Helper functions for JSON serialization
func (impl *fileMetadataRepositoryImpl) serializeEncryptedFileKey(key crypto.EncryptedFileKey) (string, error) {
data, err := json.Marshal(key)
return string(data), err
}
func (impl *fileMetadataRepositoryImpl) deserializeEncryptedFileKey(data string) (crypto.EncryptedFileKey, error) {
if data == "" {
return crypto.EncryptedFileKey{}, nil
}
var key crypto.EncryptedFileKey
err := json.Unmarshal([]byte(data), &key)
return key, err
}
func (impl *fileMetadataRepositoryImpl) serializeTags(tags []tag.EmbeddedTag) (string, error) {
if len(tags) == 0 {
return "[]", nil
}
data, err := json.Marshal(tags)
return string(data), err
}
func (impl *fileMetadataRepositoryImpl) deserializeTags(data string) ([]tag.EmbeddedTag, error) {
if data == "" || data == "[]" {
return []tag.EmbeddedTag{}, nil
}
var tags []tag.EmbeddedTag
err := json.Unmarshal([]byte(data), &tags)
return tags, err
}
// isValidUUID checks if UUID is not nil/empty
func (impl *fileMetadataRepositoryImpl) isValidUUID(id gocql.UUID) bool {
return id.String() != "00000000-0000-0000-0000-000000000000"
}