hakobox/database/file.go
2025-04-21 17:59:57 -03:00

65 lines
1.3 KiB
Go

package database
import (
"database/sql"
"encoding/hex"
"foobar/model"
"time"
"github.com/google/uuid"
)
func InsertFile(tx *sql.Tx, boxId uuid.UUID, file model.File) error {
row, err := tx.Exec(
`INSERT INTO file (id, id_box, name, created_at, size, mime, md5)
VALUES
($1, $2, $3, $4, $5, $6, $7);`,
file.ID(), boxId, file.Name(), file.CreatedAt(),
file.Size(), file.Mime(), file.Checksum(),
)
if err != nil {
return err
}
affected, err := row.RowsAffected()
if err != nil {
return err
}
if affected != 1 {
return errNoRowsAffected
}
return nil
}
func SelectBoxFiles(boxID uuid.UUID) (f []model.File, e error) {
// TODO: teste
row, err := instance.Query(
`SELECT id, name, size, created_at, mime, md5
FROM file WHERE id_box = $1 ORDER BY created_at DESC`,
boxID,
)
if err != nil {
return nil, err
}
for row.Next() {
var (
id uuid.UUID
name model.Filename
size int64
createdAt time.Time
mime model.FileMime
encodedMd5 string
)
err = row.Scan(&id, &name, &size, &createdAt, &mime, &encodedMd5)
if err != nil {
return nil, err
}
decodedMD5, err := hex.DecodeString(encodedMd5)
if err != nil {
return nil, err
}
f = append(f, model.NewFile(id, name, size, createdAt, mime, model.MD5Checksum(decodedMD5)))
}
return f, nil
}