This generates the transcript and shows the caption experience on the client side for media particles. It also simplifies other side effects that we must perform such as updating the `last_child_created_at` field for stream and container particles.
38 lines
965 B
Go
38 lines
965 B
Go
package particle
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
type ProcessingRepository interface {
|
|
IsProcessed(ctx context.Context, particleID string) (bool, error)
|
|
MarkProcessed(ctx context.Context, particleID string) error
|
|
}
|
|
|
|
type processingRepositoryImpl struct {
|
|
pool *pgxpool.Pool
|
|
}
|
|
|
|
func NewProcessingRepository(pool *pgxpool.Pool) ProcessingRepository {
|
|
return &processingRepositoryImpl{pool: pool}
|
|
}
|
|
|
|
func (r *processingRepositoryImpl) IsProcessed(ctx context.Context, particleID string) (bool, error) {
|
|
var exists bool
|
|
err := r.pool.QueryRow(ctx,
|
|
`SELECT EXISTS(SELECT 1 FROM processed_particles WHERE particle_id = $1)`,
|
|
particleID,
|
|
).Scan(&exists)
|
|
return exists, err
|
|
}
|
|
|
|
func (r *processingRepositoryImpl) MarkProcessed(ctx context.Context, particleID string) error {
|
|
_, err := r.pool.Exec(ctx,
|
|
`INSERT INTO processed_particles (particle_id) VALUES ($1) ON CONFLICT (particle_id) DO NOTHING`,
|
|
particleID,
|
|
)
|
|
return err
|
|
}
|