feat: add transactional InTx to playback and watchlist repos

This commit is contained in:
2026-05-28 12:17:19 +02:00
committed by Milas Holsting
parent 86586ed344
commit d528f6b372
6 changed files with 115 additions and 62 deletions

View File

@@ -2,16 +2,37 @@ package repository
import (
"context"
"database/sql"
"mal/internal/db"
"mal/internal/domain"
)
type playbackRepository struct {
sqlDB *sql.DB
queries *db.Queries
}
func NewPlaybackRepository(queries *db.Queries) domain.PlaybackRepository {
return &playbackRepository{queries: queries}
func NewPlaybackRepository(sqlDB *sql.DB, queries *db.Queries) domain.PlaybackRepository {
return &playbackRepository{sqlDB: sqlDB, queries: queries}
}
func (r *playbackRepository) InTx(ctx context.Context, fn func(ctx context.Context, repo domain.PlaybackRepository) error) error {
if r.sqlDB == nil {
return fn(ctx, r)
}
tx, err := r.sqlDB.BeginTx(ctx, nil)
if err != nil {
return err
}
txRepo := &playbackRepository{sqlDB: nil, queries: r.queries.WithTx(tx)}
if err := fn(ctx, txRepo); err != nil {
_ = tx.Rollback()
return err
}
return tx.Commit()
}
func (r *playbackRepository) GetWatchListEntry(ctx context.Context, params db.GetWatchListEntryParams) (db.WatchListEntry, error) {