-- Posimai Events - PostgreSQL スキーマ（Synology NAS用）
-- Brain DB と同じ PostgreSQL インスタンスに events テーブルを追加する
-- 実行: psql -U postgres -d posimai -f synology-events-migration.sql

CREATE TABLE IF NOT EXISTS events (
    id          SERIAL PRIMARY KEY,
    event_id    TEXT UNIQUE NOT NULL,            -- 外部ID（Peatix ID等）または UUID
    title       TEXT NOT NULL,
    start_date  DATE NOT NULL,
    start_time  TIME,
    end_date    DATE,
    end_time    TIME,
    location    TEXT,
    address     TEXT,
    description TEXT,
    category    TEXT,
    url         TEXT,
    source      TEXT,                            -- 情報元 (Peatix / 市役所HP / n8n-scrape 等)

    -- パーソナライズ用タグ（Gemini が自動付与）
    interest_tags  TEXT[] DEFAULT '{}',          -- ['sake', 'food', 'market'] 等
    audience_tags  TEXT[] DEFAULT '{}',          -- ['couple', 'family', 'solo'] 等
    is_free        BOOLEAN DEFAULT FALSE,
    no_rsvp        BOOLEAN DEFAULT FALSE,
    is_outdoor     BOOLEAN DEFAULT FALSE,

    -- メタデータ
    created_at  TIMESTAMPTZ DEFAULT NOW(),
    updated_at  TIMESTAMPTZ DEFAULT NOW(),
    scraped_at  TIMESTAMPTZ DEFAULT NOW()        -- n8n が最後に取得した日時
);

-- インデックス: 日付範囲・ステータス検索用
CREATE INDEX IF NOT EXISTS idx_events_start_date ON events(start_date);
CREATE INDEX IF NOT EXISTS idx_events_end_date   ON events(end_date);
CREATE INDEX IF NOT EXISTS idx_events_source     ON events(source);
CREATE INDEX IF NOT EXISTS idx_events_interest   ON events USING GIN(interest_tags);
CREATE INDEX IF NOT EXISTS idx_events_audience   ON events USING GIN(audience_tags);

-- 更新時刻の自動更新
CREATE OR REPLACE FUNCTION update_events_updated_at()
RETURNS TRIGGER AS $$
BEGIN NEW.updated_at = NOW(); RETURN NEW; END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS trg_events_updated_at ON events;
CREATE TRIGGER trg_events_updated_at
BEFORE UPDATE ON events
FOR EACH ROW EXECUTE FUNCTION update_events_updated_at();
