-- Per-user like/dislike reactions on mangas — a private taste signal that
-- powers content-based recommendations. One row per (user, manga); the
-- `reaction` column toggles between 'like' and 'dislike', and clearing a
-- reaction deletes the row. Reactions are never exposed publicly (no counts).
CREATE TABLE manga_reactions (
    user_id    uuid NOT NULL REFERENCES users(id)  ON DELETE CASCADE,
    manga_id   uuid NOT NULL REFERENCES mangas(id) ON DELETE CASCADE,
    reaction   text NOT NULL CHECK (reaction IN ('like', 'dislike')),
    created_at timestamptz NOT NULL DEFAULT now(),
    PRIMARY KEY (user_id, manga_id)
);

-- Recommendations aggregate a user's reacted mangas by tag; the PK covers
-- per-user lookups, this covers the reverse (all reactions on a manga).
CREATE INDEX manga_reactions_manga_idx ON manga_reactions (manga_id);
