feat: store layer with file CRUD

This commit is contained in:
2026-08-26 21:41:47 +08:00
parent a547b69725
commit 245497999e
4 changed files with 182 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
package store
import "database/sql"
type File struct {
ID string
OriginalName string
StorageName string
Dir string
Size int64
CreatedAt int64
}
func (s *Store) FileCreate(f *File) error {
_, err := s.db.Exec(
`INSERT INTO files (id, original_name, storage_name, dir, size, created_at)
VALUES (?, ?, ?, ?, ?, ?)`,
f.ID, f.OriginalName, f.StorageName, f.Dir, f.Size, f.CreatedAt,
)
return err
}
func (s *Store) FileGet(id string) (*File, error) {
row := s.db.QueryRow(
`SELECT id, original_name, storage_name, dir, size, created_at
FROM files WHERE id = ?`, id,
)
return scanFile(row)
}
func (s *Store) FileList(dir string) ([]*File, error) {
query := `SELECT id, original_name, storage_name, dir, size, created_at FROM files`
var args []any
if dir != "" {
query += ` WHERE dir = ?`
args = []any{dir}
}
query += ` ORDER BY created_at DESC`
rows, err := s.db.Query(query, args...)
if err != nil {
return nil, err
}
defer rows.Close()
var files []*File
for rows.Next() {
f, err := scanFile(rows)
if err != nil {
return nil, err
}
files = append(files, f)
}
return files, rows.Err()
}
func (s *Store) FileDelete(id string) error {
_, err := s.db.Exec(`DELETE FROM files WHERE id = ?`, id)
return err
}
func scanFile(row interface {
Scan(dest ...any) error
}) (*File, error) {
f := &File{}
err := row.Scan(&f.ID, &f.OriginalName, &f.StorageName, &f.Dir, &f.Size, &f.CreatedAt)
if err == sql.ErrNoRows {
return nil, err
}
return f, err
}