mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-28 15:09:53 -06:00
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package core
|
|
|
|
import (
|
|
"errors"
|
|
"io"
|
|
|
|
"codeberg.org/shroff/phylum/server/internal/storage"
|
|
"github.com/google/uuid"
|
|
"github.com/jackc/pgx/v5"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
// VersionInfo represents a single version of a resource
|
|
// json tags are needed for unmarshalling the json object in sql queries
|
|
type VersionInfo struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Created int `json:"created"`
|
|
Deleted int `json:"deleted"`
|
|
Size int64 `json:"size"`
|
|
MimeType string `json:"mime_type"`
|
|
SHA256 string `json:"sha256"`
|
|
}
|
|
|
|
type Version struct {
|
|
VersionInfo
|
|
Storage string
|
|
}
|
|
|
|
func scanVersion(row pgx.CollectableRow) (Version, error) {
|
|
var v Version
|
|
var created pgtype.Timestamp
|
|
var deleted pgtype.Timestamp
|
|
err := row.Scan(
|
|
&v.ID,
|
|
&created,
|
|
&deleted,
|
|
&v.Size,
|
|
&v.MimeType,
|
|
&v.SHA256,
|
|
&v.Storage,
|
|
)
|
|
v.Created = int(created.Time.Unix())
|
|
if deleted.Valid {
|
|
v.Deleted = int(deleted.Time.Unix())
|
|
}
|
|
return v, err
|
|
}
|
|
|
|
func (v Version) OpenRead(start, length int) (io.ReadCloser, error) {
|
|
if v.Storage == "" {
|
|
return nil, errors.New("unknown storage backend")
|
|
}
|
|
if b, err := storage.GetBackend(v.Storage); err != nil {
|
|
return nil, errors.New("failed to read " + v.ID.String() + ": " + err.Error())
|
|
} else {
|
|
return b.OpenRead(v.ID.String(), start, length)
|
|
}
|
|
}
|