CREATE TABLE users (
    no SERIAL PRIMARY KEY,                 -- 고유 번호 (자동 증가)
    user_id TEXT NOT NULL UNIQUE,         -- 사용자 아이디
    email TEXT NOT NULL UNIQUE,     -- 이메일
    password TEXT NOT NULL,         -- 비밀번호 (해시 저장 권장)
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- 생성일
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP   -- 수정일
);

CREATE EXTENSION IF NOT EXISTS pgcrypto;
INSERT INTO users (user_id, email, password) VALUES ('admin', 'dosangyoon@gmail.com', crypt('dsyoon5004!', gen_salt('bf')));
select * from users;


CREATE TABLE qna_board (
    id SERIAL PRIMARY KEY,                             -- 게시글 고유 번호 (자동 증가)
    title TEXT NOT NULL,                       -- 제목
    content TEXT NOT NULL,                             -- 내용
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,    -- 등록일
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,    -- 수정일
    views INTEGER DEFAULT 0,                           -- 조회수, 기본값 0
    author_id INTEGER NOT NULL,                        -- 작성자 ID (users.no 참조)
    CONSTRAINT fk_author FOREIGN KEY (author_id) REFERENCES users(no) ON DELETE CASCADE
);
select * from qna_board;



CREATE TABLE ai_news_board (
    id SERIAL PRIMARY KEY,                             -- 뉴스 고유 번호 (자동 증가)
    url TEXT NOT NULL,                         -- 뉴스 URL
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,    -- 등록일
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,    -- 수정일
    views INTEGER DEFAULT 0,                           -- 조회수 (기본값 0)
    author_id INTEGER NOT NULL,                        -- 작성자 ID (users.no 참조)
    CONSTRAINT fk_ai_news_author FOREIGN KEY (author_id)
        REFERENCES users(no) ON DELETE CASCADE
);



-- 챗봇(도구) 목록
CREATE TABLE chat_tools (
    tool_id       TEXT PRIMARY KEY,          -- 예: 'chatgpt', 'dev_chatbot'
    name          TEXT NOT NULL,
    description   TEXT,
    created_at    TIMESTAMPTZ DEFAULT NOW()
);
INSERT INTO chat_tools (tool_id, name, description)
VALUES
-- 기본 챗봇
('chatgpt',       'ChatGPT',          '일반 대화 및 모델 선택 기능을 제공합니다.'),
-- PDF 벡터검색 개발 챗봇
('dev_chatbot',   '개발자 챗봇',      'PDF 업로드 후 벡터 검색 기반 Q&A 기능을 제공합니다.'),
-- 문서 번역 도구
('doc_translation','문서 번역',       'MS-Word 문서를 업로드하여 한글→영어 번역을 수행합니다.'),
-- LIMS Text-to-SQL
('lims_text2sql', 'LIMS Text2SQL',    'LIMS DB에 대한 자연어 질의를 SQL로 변환하여 결과를 제공합니다.'),
-- 연구·논문 QA
('research_qa',   'R&D 문헌 QA',      '사내 논문·보고서 기반 질의응답 서비스를 제공합니다.');



-- 대화방(히스토리 목록 하나당 1 row)
CREATE TABLE chat_rooms (
    room_id     UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id     TEXT REFERENCES users(user_id) ON DELETE CASCADE,
    tool_id     TEXT REFERENCES chat_tools(tool_id) ON DELETE CASCADE,
    title       TEXT,                               -- 방 제목(첫 메시지 요약 등)
    created_at  TIMESTAMPTZ DEFAULT NOW(),
    updated_at  TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_chat_rooms_user ON chat_rooms(user_id, updated_at DESC);

-- 실제 메시지
CREATE TABLE chat_messages (
    msg_id       BIGSERIAL PRIMARY KEY,
    room_id      UUID REFERENCES chat_rooms(room_id) ON DELETE CASCADE,
    sender_type  VARCHAR(8)  NOT NULL,              -- 'user' | 'bot' | 'system'
    content      TEXT        NOT NULL,
    content_type VARCHAR(16) DEFAULT 'text',        -- 'text' | 'image' 등
    metadata     JSONB,                             -- 모델/프롬프트 등 추가 정보
    created_at   TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_chat_messages_room ON chat_messages(room_id, created_at ASC);




