986a389606
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
|
|
}
|