package sqlite import ( "database/sql" "fmt" "git.vakhrushev.me/av/transcriber/internal/entity" "github.com/doug-martin/goqu/v9" ) type FileRepository struct { db *sql.DB gq *goqu.Database } func NewFileRepository(conn *sql.DB, gq *goqu.Database) *FileRepository { return &FileRepository{conn, gq} } func (repo *FileRepository) Create(file *entity.File) error { record := goqu.Record{ "id": file.Id, "storage": file.Storage, "size": file.Size, "created_at": file.CreatedAt, } query := repo.gq.Insert("files").Rows(record) sql, args, err := query.ToSQL() if err != nil { return fmt.Errorf("failed to build query: %w", err) } _, err = repo.db.Exec(sql, args...) if err != nil { return fmt.Errorf("failed to insert file: %w", err) } return nil } func (repo *FileRepository) GetByID(id string) (*entity.File, error) { query := repo.gq.From("files").Select("id", "storage", "size", "created_at").Where(goqu.C("id").Eq(id)) sql, args, err := query.ToSQL() if err != nil { return nil, fmt.Errorf("failed to build query: %w", err) } var file entity.File err = repo.db.QueryRow(sql, args...).Scan(&file.Id, &file.Storage, &file.Size, &file.CreatedAt) if err != nil { return nil, fmt.Errorf("failed to get file: %w", err) } return &file, nil }