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 }