scanfile/server/internal/database/file.go
2025-07-25 12:43:28 +02:00

81 lines
2.4 KiB
Go

package database
import (
"context"
"encoding/hex"
"log/slog"
"git.jmbit.de/jmb/scanfile/server/internal/sqlc"
"github.com/jackc/pgx/v5/pgtype"
)
func GetFileByID(fileID string) (sqlc.File, error) {
var pgUUID pgtype.UUID
err := pgUUID.Scan(fileID)
if err != nil {
slog.Error("Unable to convert string to UUID", "file-uuid", fileID, "error", err)
}
query := sqlc.New(pool)
file, err := query.GetFileByUUID(context.Background(), pgUUID)
return file, nil
}
func DeleteFileByID(fileID string) error {
var pgUUID pgtype.UUID
err := pgUUID.Scan(fileID)
if err != nil {
slog.Error("Unable to convert string to UUID", "file-uuid", fileID, "error", err)
}
query := sqlc.New(pool)
err = query.DeleteFile(context.Background(), pgUUID)
if err != nil {
slog.Error("Unable to delete file", "file-uuid", fileID, "error", err)
}
return err
}
func InsertFileProperties(properties sqlc.InsertFilePropertiesParams) error {
query := sqlc.New(pool)
slog.Debug("InsertFileProperties", "file-uuid", properties.FileID.String(), "file-sha256",
hex.EncodeToString(properties.Sha256), "file-md5", hex.EncodeToString(properties.Md5),
"file-mime", properties.LibmagicMime.String, "file-extension", properties.LibmagicExtension.String,
"file-apple", properties.LibmagicApple.String)
err := query.InsertFileProperties(context.Background(), properties)
if err != nil {
slog.Error("Unable to add file properties", "file-uuid", properties.FileID.String(), "error", err)
}
return err
}
// GetFileMime() returns the MimeType for a file
func GetFileMime(fileID pgtype.UUID) (string, error) {
query := sqlc.New(pool)
mimeType, err := query.GetFileMime(context.Background(), fileID)
if err != nil {
slog.Error("Error getting file Mimetype", "file-uuid", fileID.String(), "error", err)
return "", err
}
return mimeType, nil
}
func GetFileProperties(fileID pgtype.UUID) (sqlc.FileProperty, error) {
query := sqlc.New(pool)
fileProperties, err := query.GetFileProperties(context.Background(), fileID)
if err != nil {
slog.Error("Error in GetFileProperties", "file-uuid", fileID, "error", err)
}
return fileProperties, err
}
func GetAllFiles() ([]sqlc.File, error) {
query := sqlc.New(pool)
//TODO use actual request context to avoid murdering the DB
files, err := query.GetAllFiles(context.Background())
if err != nil {
slog.Error("Error in GetAllProperties", "error", err)
}
return files, err
}