Files

283 lines
10 KiB
SQL

-- Clube de Benefícios - Production Schema
-- Generated for MySQL (sis_cb67)
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS benefit_partner_links;
DROP TABLE IF EXISTS benefit_share_requests;
DROP TABLE IF EXISTS webhooks;
DROP TABLE IF EXISTS plugins;
DROP TABLE IF EXISTS logs;
DROP TABLE IF EXISTS sessions;
DROP TABLE IF EXISTS favorites;
DROP TABLE IF EXISTS transactions;
DROP TABLE IF EXISTS benefits;
DROP TABLE IF EXISTS partners;
DROP TABLE IF EXISTS categories;
DROP TABLE IF EXISTS oauth_accounts;
DROP TABLE IF EXISTS knex_migrations;
DROP TABLE IF EXISTS knex_migrations_lock;
DROP TABLE IF EXISTS users;
SET FOREIGN_KEY_CHECKS = 1;
-- users
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NULL,
phone VARCHAR(30) NULL,
cpf VARCHAR(14) UNIQUE NULL DEFAULT NULL,
city VARCHAR(100) NULL,
neighborhood VARCHAR(100) NULL,
gender ENUM('M','F','O') NULL,
birth_date DATE NULL,
avatar_url VARCHAR(500) NULL,
role ENUM('user','partner_admin','secretary','clinical_manager','finance','super_admin') NOT NULL DEFAULT 'user',
status ENUM('lead','pending','active','inactive') NOT NULL DEFAULT 'active',
email_verified BOOLEAN DEFAULT FALSE,
refresh_token VARCHAR(500) NULL,
last_login TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_email (email),
INDEX idx_role (role),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- oauth_accounts
CREATE TABLE oauth_accounts (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT UNSIGNED NOT NULL,
provider VARCHAR(50) NOT NULL,
provider_user_id VARCHAR(255) NOT NULL,
access_token VARCHAR(1000) NULL,
refresh_token VARCHAR(1000) NULL,
token_expires_at TIMESTAMP NULL,
profile_data JSON NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uniq_provider_user (provider, provider_user_id),
INDEX idx_user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- categories
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE,
slug VARCHAR(100) NOT NULL UNIQUE,
icon VARCHAR(50) NULL,
color VARCHAR(50) NULL,
description TEXT NULL,
active BOOLEAN DEFAULT TRUE,
sort_order INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- partners
CREATE TABLE partners (
id INT AUTO_INCREMENT PRIMARY KEY,
company_name VARCHAR(255) NOT NULL,
slug VARCHAR(255) UNIQUE NOT NULL,
cnpj VARCHAR(20) UNIQUE NULL DEFAULT NULL,
email VARCHAR(255) NULL,
phone VARCHAR(30) NULL,
address_street VARCHAR(255) NULL,
address_number VARCHAR(20) NULL,
address_neighborhood VARCHAR(100) NULL,
address_city VARCHAR(100) NULL,
address_state VARCHAR(2) NULL,
address_zip VARCHAR(10) NULL,
type VARCHAR(100) NOT NULL,
monthly_goal INT DEFAULT 0,
status ENUM('active','inactive') NOT NULL DEFAULT 'active',
gradient_from VARCHAR(50) NULL,
gradient_to VARCHAR(50) NULL,
icon VARCHAR(10) NULL,
description TEXT NULL,
logo_url VARCHAR(500) NULL,
images JSON NULL,
domain VARCHAR(255) NULL,
subdomain VARCHAR(255) NULL,
subscription_plan ENUM('basic','pro','enterprise') DEFAULT 'basic',
owner_user_id INT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_slug (slug),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- benefits
CREATE TABLE benefits (
id INT AUTO_INCREMENT PRIMARY KEY,
partner_id INT NOT NULL,
category_id INT NULL,
title VARCHAR(255) NOT NULL,
description TEXT NULL,
rules TEXT NULL,
contact VARCHAR(255) NULL,
type VARCHAR(50) NOT NULL,
delivery_type ENUM('local','external') NOT NULL DEFAULT 'local',
active BOOLEAN DEFAULT TRUE,
is_global BOOLEAN DEFAULT FALSE,
approved_by_admin BOOLEAN DEFAULT FALSE,
global_request_status ENUM('none','pending','approved') DEFAULT 'none',
priority INT DEFAULT 0,
discount_percent DECIMAL(5,2) NULL,
valid_until DATE NULL,
featured_image VARCHAR(500) NULL,
redemption_type ENUM('coupon','qrcode','card','app') DEFAULT 'coupon',
usage_count INT DEFAULT 0,
savings_amount DECIMAL(12,2) DEFAULT 0,
badge VARCHAR(50) NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_partner (partner_id),
INDEX idx_category (category_id),
INDEX idx_active (active),
INDEX idx_type (type),
FOREIGN KEY (partner_id) REFERENCES partners(id) ON DELETE CASCADE,
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- transactions
CREATE TABLE transactions (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
benefit_id INT NOT NULL,
partner_id INT NOT NULL,
type ENUM('redemption','view','favorite','share') NOT NULL,
status ENUM('pending','completed','cancelled','expired') DEFAULT 'pending',
redemption_code VARCHAR(100) NULL,
qr_code_data VARCHAR(500) NULL,
original_value DECIMAL(12,2) NULL,
discount_value DECIMAL(12,2) NULL,
redeemed_at TIMESTAMP NULL,
expires_at TIMESTAMP NULL,
metadata JSON NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user (user_id),
INDEX idx_benefit (benefit_id),
INDEX idx_status (status),
INDEX idx_code (redemption_code),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (benefit_id) REFERENCES benefits(id) ON DELETE CASCADE,
FOREIGN KEY (partner_id) REFERENCES partners(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- favorites
CREATE TABLE favorites (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
benefit_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uniq_user_benefit (user_id, benefit_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (benefit_id) REFERENCES benefits(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- sessions
CREATE TABLE sessions (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
token_hash VARCHAR(255) NOT NULL,
ip_address VARCHAR(45) NULL,
user_agent VARCHAR(500) NULL,
expires_at TIMESTAMP NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user (user_id),
INDEX idx_token (token_hash),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- logs (audit)
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NULL,
action VARCHAR(100) NOT NULL,
entity_type VARCHAR(100) NULL,
entity_id INT NULL,
description TEXT NULL,
old_data JSON NULL,
new_data JSON NULL,
ip_address VARCHAR(45) NULL,
user_agent VARCHAR(500) NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user (user_id),
INDEX idx_action (action),
INDEX idx_entity (entity_type),
INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- plugins
CREATE TABLE plugins (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
slug VARCHAR(255) NOT NULL UNIQUE,
version VARCHAR(20) NOT NULL,
description TEXT NULL,
author VARCHAR(255) NULL,
entry_point VARCHAR(255) NOT NULL,
active BOOLEAN DEFAULT FALSE,
dependencies JSON NULL,
config JSON NULL,
hooks JSON NULL,
directory VARCHAR(500) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_slug (slug),
INDEX idx_active (active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- webhooks
CREATE TABLE webhooks (
id INT AUTO_INCREMENT PRIMARY KEY,
partner_id INT NULL,
url VARCHAR(500) NOT NULL,
secret VARCHAR(255) NULL,
events JSON NOT NULL,
active BOOLEAN DEFAULT TRUE,
retry_count INT DEFAULT 0,
max_retries INT DEFAULT 3,
last_triggered TIMESTAMP NULL,
last_status ENUM('success','failed','pending') NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_partner (partner_id),
INDEX idx_active (active),
FOREIGN KEY (partner_id) REFERENCES partners(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- benefit_share_requests
CREATE TABLE benefit_share_requests (
id INT AUTO_INCREMENT PRIMARY KEY,
benefit_id INT NOT NULL,
requesting_partner_id INT NOT NULL,
owner_partner_id INT NOT NULL,
status ENUM('pending','approved','rejected') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (benefit_id) REFERENCES benefits(id) ON DELETE CASCADE,
FOREIGN KEY (requesting_partner_id) REFERENCES partners(id) ON DELETE CASCADE,
FOREIGN KEY (owner_partner_id) REFERENCES partners(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- benefit_partner_links
CREATE TABLE benefit_partner_links (
id INT AUTO_INCREMENT PRIMARY KEY,
benefit_id INT NOT NULL,
partner_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uniq_benefit_partner (benefit_id, partner_id),
FOREIGN KEY (benefit_id) REFERENCES benefits(id) ON DELETE CASCADE,
FOREIGN KEY (partner_id) REFERENCES partners(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;