Files
silo-server/internal/userdb/home_dismissals.go
T

77 lines
2.0 KiB
Go

package userdb
import (
"database/sql"
"fmt"
"github.com/Silo-Server/silo-server/internal/userstore"
)
type HomeItemDismissal = userstore.HomeItemDismissal
func ListHomeDismissals(db *sql.DB, profileID, surface string) ([]HomeItemDismissal, error) {
rows, err := db.Query(
`SELECT profile_id, surface, media_item_id, series_id, progress_updated_at, dismissed_at
FROM home_item_dismissals
WHERE profile_id = ? AND surface = ?
ORDER BY dismissed_at DESC`,
profileID, surface,
)
if err != nil {
return nil, fmt.Errorf("listing home dismissals: %w", err)
}
defer rows.Close()
var dismissals []HomeItemDismissal
for rows.Next() {
var dismissal HomeItemDismissal
if err := rows.Scan(
&dismissal.ProfileID,
&dismissal.Surface,
&dismissal.MediaItemID,
&dismissal.SeriesID,
&dismissal.ProgressUpdatedAt,
&dismissal.DismissedAt,
); err != nil {
return nil, fmt.Errorf("scanning home dismissal: %w", err)
}
dismissals = append(dismissals, dismissal)
}
return dismissals, rows.Err()
}
func UpsertHomeDismissal(db *sql.DB, dismissal HomeItemDismissal) error {
_, err := db.Exec(
`INSERT INTO home_item_dismissals (
profile_id, surface, media_item_id, series_id, progress_updated_at, dismissed_at
) VALUES (?, ?, ?, ?, ?, ?)
ON CONFLICT(profile_id, surface, media_item_id) DO UPDATE SET
series_id = excluded.series_id,
progress_updated_at = excluded.progress_updated_at,
dismissed_at = excluded.dismissed_at`,
dismissal.ProfileID,
dismissal.Surface,
dismissal.MediaItemID,
dismissal.SeriesID,
dismissal.ProgressUpdatedAt,
dismissal.DismissedAt,
)
if err != nil {
return fmt.Errorf("upserting home dismissal: %w", err)
}
return nil
}
func DeleteHomeDismissal(db *sql.DB, profileID, surface, mediaItemID string) error {
_, err := db.Exec(
`DELETE FROM home_item_dismissals WHERE profile_id = ? AND surface = ? AND media_item_id = ?`,
profileID,
surface,
mediaItemID,
)
if err != nil {
return fmt.Errorf("deleting home dismissal: %w", err)
}
return nil
}