38 lines
1.4 KiB
SQL
38 lines
1.4 KiB
SQL
-- schema.sql - Structure MySQL
|
|
CREATE DATABASE IF NOT EXISTS saas_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
USE saas_db;
|
|
|
|
CREATE TABLE users (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
email VARCHAR(255) UNIQUE NOT NULL,
|
|
password VARCHAR(255) NOT NULL,
|
|
stripe_customer_id VARCHAR(255) NULL,
|
|
subscription_status ENUM('inactive', 'active', 'cancelled') DEFAULT 'inactive',
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
INDEX idx_email (email),
|
|
INDEX idx_stripe_customer (stripe_customer_id)
|
|
) ENGINE=InnoDB;
|
|
|
|
CREATE TABLE subscriptions (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
stripe_subscription_id VARCHAR(255) NOT NULL,
|
|
status VARCHAR(50) NOT NULL,
|
|
current_period_end DATETIME NOT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
INDEX idx_stripe_subscription (stripe_subscription_id)
|
|
) ENGINE=InnoDB;
|
|
|
|
CREATE TABLE api_logs (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
endpoint VARCHAR(255) NOT NULL,
|
|
method VARCHAR(10) NOT NULL,
|
|
response_code INT NOT NULL,
|
|
response_time_ms INT NOT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
INDEX idx_user_date (user_id, created_at)
|
|
) ENGINE=InnoDB; |