Files
fibonacci-fold/setup.sql
Christian Medina d0e8d36c33
Some checks failed
Deploy to Firebase Hosting on merge / build_and_deploy (push) Has been cancelled
latest changes before server transfer
2025-08-05 15:42:36 -04:00

53 lines
2.2 KiB
SQL

-- SQL script to create tables for authentication and session management
-- Create the users table
CREATE TABLE IF NOT EXISTS `users` (
`id` VARCHAR(255) NOT NULL PRIMARY KEY,
`provider` VARCHAR(50) NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Create the sessions table
CREATE TABLE IF NOT EXISTS `sessions` (
`id` VARCHAR(255) NOT NULL PRIMARY KEY,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Create the session_users table to link sessions and users
CREATE TABLE IF NOT EXISTS `session_users` (
`session_id` VARCHAR(255) NOT NULL,
`user_id` VARCHAR(255) NOT NULL,
`provider` VARCHAR(50) NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`session_id`, `user_id`),
FOREIGN KEY (`session_id`) REFERENCES `sessions` (`id`) ON DELETE CASCADE,
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
);
-- Create the votes table
CREATE TABLE IF NOT EXISTS `votes` (
`session_id` VARCHAR(255) NOT NULL,
`user_id` VARCHAR(255) NOT NULL,
`vote` INT NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`session_id`, `user_id`),
FOREIGN KEY (`session_id`) REFERENCES `sessions` (`id`) ON DELETE CASCADE,
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
);
-- Index for faster lookups on session_users
CREATE INDEX `idx_session_users_session_id` ON `session_users`(`session_id`);
CREATE INDEX `idx_session_users_user_id` ON `session_users`(`user_id`);
-- Index for votes table
CREATE INDEX `idx_votes_session_id` ON `votes`(`session_id`);
CREATE INDEX `idx_votes_user_id` ON `votes`(`user_id`);
-- Adjustments for existing queries (if needed)
-- Example: Use INSERT IGNORE to prevent duplicate key errors
-- This is for adding users or session users, which is already handled in the route logic