-- MySQL 메인 홈 팔로잉 탭 최근 소식 inbox 테이블
-- 날짜/시간 표시 컬럼은 TIMESTAMP를 사용한다.

create table home_following_news_inbox (
    id bigint not null auto_increment comment '팔로잉 최근 소식 inbox ID',
    member_id bigint not null comment '수신 회원 ID(member.id)',
    creator_id bigint not null comment '소식 발신 크리에이터 회원 ID(member.id)',
    news_type varchar(30) not null comment '소식 타입(CREATOR_RANKING, CONTENT_RANKING, COMMUNITY_POST, AUDIO_CONTENT, PHOTO_CONTENT)',
    source_key varchar(200) not null comment '중복 방지용 원천 소식 식별자',
    target_id bigint not null comment '터치 액션 대상 ID',
    occurred_at_utc timestamp not null comment '소식 발생 시각(UTC)',
    visible_from_at_utc timestamp not null comment '소식 노출 시작 시각(UTC)',
    creator_nickname varchar(100) not null comment '소식 생성 시점 크리에이터 닉네임',
    creator_profile_image_path varchar(500) null comment '소식 생성 시점 크리에이터 프로필 이미지 path',
    title varchar(255) not null comment '소식 제목',
    body varchar(1000) not null comment '소식 본문',
    thumbnail_image_path varchar(500) null comment '소식 썸네일 이미지 path',
    rank_no int null comment '랭킹 소식 순위',
    is_adult tinyint(1) not null default 0 comment '성인 콘텐츠 또는 성인 소식 여부',
    is_active tinyint(1) not null default 1 comment '활성 여부',
    created_at timestamp not null default current_timestamp comment '생성 시각',
    updated_at timestamp not null default current_timestamp on update current_timestamp comment '수정 시각',
    primary key (id)
) engine=InnoDB default charset=utf8mb4 comment='메인 홈 팔로잉 탭 사용자별 최근 소식 inbox';

create unique index uk_home_following_news_inbox_member_type_source
    on home_following_news_inbox (member_id, news_type, source_key);

create index idx_home_following_news_inbox_member_visible
    on home_following_news_inbox (member_id, is_active, visible_from_at_utc desc, id desc);

create index idx_home_following_news_inbox_member_creator_active
    on home_following_news_inbox (member_id, creator_id, is_active);

create index idx_home_following_news_inbox_creator_type_source
    on home_following_news_inbox (creator_id, news_type, source_key);
