Files
mal/internal/db/skip_segment_overrides.go

74 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package db
import (
"context"
"database/sql"
"fmt"
)
// Note: we intentionally avoid naming this struct SkipSegmentOverride because
// some environments may have an sqlc-generated SkipSegmentOverride model,
// which would cause a redeclare build error.
type SkipSegmentOverrideRow struct {
ID string
UserID string
AnimeID int64
Episode int64
SkipType string
StartTime float64
EndTime float64
}
func (q *Queries) ListSkipSegmentOverrides(ctx context.Context, userID string, animeID int64, episode int64) ([]SkipSegmentOverrideRow, error) {
const query = `
SELECT id, user_id, anime_id, episode, skip_type, start_time, end_time
FROM skip_segment_override
WHERE user_id = ? AND anime_id = ? AND episode = ?
ORDER BY skip_type ASC;
`
rows, err := q.db.QueryContext(ctx, query, userID, animeID, episode)
if err != nil {
return nil, fmt.Errorf("list skip segment overrides: %w", err)
}
defer func() { _ = rows.Close() }()
var out []SkipSegmentOverrideRow
for rows.Next() {
var r SkipSegmentOverrideRow
if err := rows.Scan(&r.ID, &r.UserID, &r.AnimeID, &r.Episode, &r.SkipType, &r.StartTime, &r.EndTime); err != nil {
return nil, fmt.Errorf("scan skip segment override: %w", err)
}
out = append(out, r)
}
if err := rows.Err(); err != nil {
return nil, fmt.Errorf("iterate skip segment overrides: %w", err)
}
return out, nil
}
func (q *Queries) UpsertSkipSegmentOverride(ctx context.Context, r SkipSegmentOverrideRow) error {
const query = `
INSERT INTO skip_segment_override (id, user_id, anime_id, episode, skip_type, start_time, end_time)
VALUES (?, ?, ?, ?, ?, ?, ?)
ON CONFLICT(user_id, anime_id, episode, skip_type) DO UPDATE SET
start_time = excluded.start_time,
end_time = excluded.end_time,
updated_at = CURRENT_TIMESTAMP;
`
_, err := q.db.ExecContext(ctx, query, r.ID, r.UserID, r.AnimeID, r.Episode, r.SkipType, r.StartTime, r.EndTime)
if err != nil {
return fmt.Errorf("upsert skip segment override: %w", err)
}
return nil
}
func (q *Queries) HasSkipSegmentOverrideTable(ctx context.Context) (bool, error) {
// Defensive: in case migrations havent run yet in some env.
const query = `SELECT name FROM sqlite_master WHERE type='table' AND name='skip_segment_override' LIMIT 1;`
var name sql.NullString
if err := q.db.QueryRowContext(ctx, query).Scan(&name); err != nil {
return false, fmt.Errorf("check skip segment override table: %w", err)
}
return name.Valid && name.String != "", nil
}