scanfile/server/internal/database/file.go

140 lines
4 KiB
Go

package database
import (
"context"
"encoding/hex"
"encoding/json"
"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
}
func InsertFileDiec(params sqlc.InsertFileDIECParams) error {
query := sqlc.New(pool)
err := query.InsertFileDIEC(context.Background(), params)
if err != nil {
slog.Error("Error from query in InsertFileDiec", "file-uuid", params.FileID.String(), "error", err)
}
return err
}
func GetFileDiec(fileID pgtype.UUID) (Diec, error){
var r Diec
var data DiecData
query := sqlc.New(pool)
rawDiec, err := query.GetFileDIEC(context.Background(), fileID)
if err != nil {
slog.Error("Error from query in GetFileDiec", "file-uuid", fileID.String(), "error", err)
return r, err
}
r.ID = rawDiec.ID
r.FileID = rawDiec.FileID
err = json.Unmarshal(rawDiec.Data, &data)
if err != nil {
slog.Error("Error in GetFileDiec", "file-uuid", fileID.String(), "error", err)
return r, err
}
r.Data = data
return r, nil
}
func InsertFileCapa(params sqlc.InsertFileCapaParams) error {
query := sqlc.New(pool)
err := query.InsertFileCapa(context.Background(), params)
if err != nil {
slog.Error("Error from Query in InsertFileCapa", "file-uuid", params.FileID.String(), "error", err)
}
return err
}
func GetFileCapa(fileID pgtype.UUID) (CapaResult, error) {
var r CapaResult
var data CapaData
query := sqlc.New(pool)
rawResult, err := query.GetFileCapa(context.Background(), fileID)
if err != nil {
slog.Error("Error from Query in GetFileCapa", "file-uuid", fileID.String(), "error", err)
}
r.ID = rawResult.ID
r.FileID = rawResult.FileID
err = json.Unmarshal(rawResult.Data, &data)
if err != nil {
slog.Error("Error in GetFileCapa", "file-uuid", fileID.String(), "error", err)
return r, err
}
return r, nil
}