65 lines
1.3 KiB
Go
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
|
|
}
|