package store import "database/sql" type File struct { ID string `json:"id"` OriginalName string `json:"name"` StorageName string `json:"-"` Dir string `json:"dir"` Size int64 `json:"size"` CreatedAt int64 `json:"created_at"` } 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 }