213 lines
7.6 KiB
MySQL
213 lines
7.6 KiB
MySQL
|
|
CREATE TABLE IF NOT EXISTS bleeter_accounts (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
char_id VARCHAR(80) NOT NULL,
|
||
|
|
identifier VARCHAR(80) NULL,
|
||
|
|
mail_address VARCHAR(120) NOT NULL,
|
||
|
|
phone_number VARCHAR(20) NULL,
|
||
|
|
status VARCHAR(24) NOT NULL DEFAULT 'active',
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uniq_char_id (char_id),
|
||
|
|
UNIQUE KEY uniq_mail_address (mail_address),
|
||
|
|
KEY idx_status (status)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_profiles (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
account_id INT NULL,
|
||
|
|
profile_type VARCHAR(24) NOT NULL,
|
||
|
|
handle VARCHAR(40) NOT NULL,
|
||
|
|
display_name VARCHAR(80) NOT NULL,
|
||
|
|
avatar_url VARCHAR(255) NULL,
|
||
|
|
banner_url VARCHAR(255) NULL,
|
||
|
|
bio VARCHAR(500) NULL,
|
||
|
|
location VARCHAR(120) NULL,
|
||
|
|
email_contact VARCHAR(120) NULL,
|
||
|
|
phone_contact VARCHAR(20) NULL,
|
||
|
|
is_verified TINYINT(1) NOT NULL DEFAULT 0,
|
||
|
|
is_lifeinvader_staff TINYINT(1) NOT NULL DEFAULT 0,
|
||
|
|
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
|
|
is_locked TINYINT(1) NOT NULL DEFAULT 0,
|
||
|
|
locked_reason VARCHAR(255) NULL,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uniq_handle (handle),
|
||
|
|
KEY idx_account_id (account_id),
|
||
|
|
KEY idx_profile_type (profile_type),
|
||
|
|
KEY idx_active (is_active)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_profile_members (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
profile_id INT NOT NULL,
|
||
|
|
char_id VARCHAR(80) NOT NULL,
|
||
|
|
role VARCHAR(40) NOT NULL DEFAULT 'member',
|
||
|
|
can_post TINYINT(1) NOT NULL DEFAULT 0,
|
||
|
|
can_edit_profile TINYINT(1) NOT NULL DEFAULT 0,
|
||
|
|
can_manage_members TINYINT(1) NOT NULL DEFAULT 0,
|
||
|
|
source VARCHAR(40) NOT NULL DEFAULT 'manual',
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uniq_profile_member (profile_id, char_id),
|
||
|
|
KEY idx_char_id (char_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_media (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
owner_profile_id INT NOT NULL,
|
||
|
|
source_type VARCHAR(24) NOT NULL,
|
||
|
|
url VARCHAR(500) NOT NULL,
|
||
|
|
original_name VARCHAR(180) NULL,
|
||
|
|
mime_type VARCHAR(80) NULL,
|
||
|
|
size_bytes INT NULL,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
KEY idx_owner (owner_profile_id),
|
||
|
|
KEY idx_source_type (source_type)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_posts (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
author_profile_id INT NOT NULL,
|
||
|
|
feed_type VARCHAR(24) NOT NULL,
|
||
|
|
body TEXT NULL,
|
||
|
|
media_id INT NULL,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
self_deleted_at TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
hidden_at TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
hidden_by_profile_id INT NULL,
|
||
|
|
hidden_reason VARCHAR(255) NULL,
|
||
|
|
restore_until TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
deleted_at TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
KEY idx_feed_created (feed_type, created_at),
|
||
|
|
KEY idx_author_created (author_profile_id, created_at),
|
||
|
|
KEY idx_hidden (hidden_at),
|
||
|
|
KEY idx_deleted (deleted_at)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_comments (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
post_id INT NOT NULL,
|
||
|
|
author_profile_id INT NOT NULL,
|
||
|
|
body TEXT NOT NULL,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
self_deleted_at TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
hidden_at TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
hidden_by_profile_id INT NULL,
|
||
|
|
hidden_reason VARCHAR(255) NULL,
|
||
|
|
restore_until TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
deleted_at TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
KEY idx_post_created (post_id, created_at),
|
||
|
|
KEY idx_author_created (author_profile_id, created_at)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_likes (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
profile_id INT NOT NULL,
|
||
|
|
target_type VARCHAR(24) NOT NULL,
|
||
|
|
target_id INT NOT NULL,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uniq_like (profile_id, target_type, target_id),
|
||
|
|
KEY idx_target (target_type, target_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_follows (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
follower_profile_id INT NOT NULL,
|
||
|
|
followed_profile_id INT NOT NULL,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uniq_follow (follower_profile_id, followed_profile_id),
|
||
|
|
KEY idx_followed (followed_profile_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_blocks (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
blocker_profile_id INT NOT NULL,
|
||
|
|
blocked_profile_id INT NOT NULL,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uniq_block (blocker_profile_id, blocked_profile_id),
|
||
|
|
KEY idx_blocked (blocked_profile_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_marketplace (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
author_profile_id INT NOT NULL,
|
||
|
|
category VARCHAR(40) NOT NULL,
|
||
|
|
title VARCHAR(120) NOT NULL,
|
||
|
|
description TEXT NOT NULL,
|
||
|
|
price_label VARCHAR(80) NULL,
|
||
|
|
media_id INT NULL,
|
||
|
|
status VARCHAR(24) NOT NULL DEFAULT 'active',
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
deleted_at TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
KEY idx_category_status (category, status),
|
||
|
|
KEY idx_author (author_profile_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_events (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
author_profile_id INT NOT NULL,
|
||
|
|
title VARCHAR(140) NOT NULL,
|
||
|
|
description TEXT NULL,
|
||
|
|
location VARCHAR(140) NULL,
|
||
|
|
starts_at DATETIME NOT NULL,
|
||
|
|
ends_at DATETIME NULL,
|
||
|
|
status VARCHAR(24) NOT NULL DEFAULT 'active',
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
deleted_at TIMESTAMP NULL DEFAULT NULL,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
KEY idx_starts_at (starts_at),
|
||
|
|
KEY idx_author (author_profile_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_business_status (
|
||
|
|
profile_id INT NOT NULL,
|
||
|
|
status VARCHAR(24) NOT NULL DEFAULT 'closed',
|
||
|
|
source VARCHAR(40) NOT NULL DEFAULT 'manual',
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (profile_id),
|
||
|
|
KEY idx_status (status)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_lifeinvader_permissions (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
char_id VARCHAR(80) NOT NULL,
|
||
|
|
permission VARCHAR(80) NOT NULL,
|
||
|
|
allowed TINYINT(1) NOT NULL DEFAULT 0,
|
||
|
|
source VARCHAR(40) NOT NULL DEFAULT 'manual',
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uniq_char_permission (char_id, permission)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS bleeter_audit_logs (
|
||
|
|
id INT NOT NULL AUTO_INCREMENT,
|
||
|
|
actor_char_id VARCHAR(80) NULL,
|
||
|
|
actor_profile_id INT NULL,
|
||
|
|
action VARCHAR(80) NOT NULL,
|
||
|
|
target_type VARCHAR(40) NULL,
|
||
|
|
target_id INT NULL,
|
||
|
|
reason VARCHAR(255) NULL,
|
||
|
|
payload LONGTEXT NULL,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
KEY idx_actor_char (actor_char_id),
|
||
|
|
KEY idx_actor_profile (actor_profile_id),
|
||
|
|
KEY idx_target (target_type, target_id),
|
||
|
|
KEY idx_action (action)
|
||
|
|
);
|
||
|
|
|
||
|
|
ALTER TABLE bleeter_profiles
|
||
|
|
ADD COLUMN IF NOT EXISTS is_lifeinvader_staff TINYINT(1) NOT NULL DEFAULT 0 AFTER is_verified;
|