mirror of
https://github.com/DeNNiiInc/Connect-5.git
synced 2026-04-18 16:05:59 +00:00
Migrate database from MySQL to Supabase PostgreSQL
- Added @supabase/supabase-js client library - Rewrote database.js to use Supabase API - Updated server.js health check for Supabase - Updated db.config.example.js with Supabase format - Created comprehensive SUPABASE_SETUP.md guide - Added SQL schema files for easy deployment - Updated README_DB_CONFIG.md for Supabase Benefits: - Managed PostgreSQL database - Built-in Row Level Security - Real-time capabilities - Easy monitoring via dashboard - Free tier for development
This commit is contained in:
114
supabase-schema-complete.sql
Normal file
114
supabase-schema-complete.sql
Normal file
@@ -0,0 +1,114 @@
|
||||
-- Complete Supabase Schema for Connect-5
|
||||
-- Copy and paste this entire file into Supabase SQL Editor and run it
|
||||
|
||||
-- Create players table
|
||||
CREATE TABLE IF NOT EXISTS players (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
username VARCHAR(50) UNIQUE NOT NULL,
|
||||
total_wins INT DEFAULT 0,
|
||||
total_losses INT DEFAULT 0,
|
||||
total_draws INT DEFAULT 0,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_username ON players(username);
|
||||
|
||||
-- Create active sessions table
|
||||
CREATE TABLE IF NOT EXISTS active_sessions (
|
||||
session_id VARCHAR(100) PRIMARY KEY,
|
||||
player_id BIGINT NOT NULL,
|
||||
username VARCHAR(50) NOT NULL,
|
||||
connected_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
last_heartbeat TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
FOREIGN KEY (player_id) REFERENCES players(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Create game state enum type
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE game_state_enum AS ENUM ('pending', 'active', 'completed', 'abandoned');
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
|
||||
-- Create games table
|
||||
CREATE TABLE IF NOT EXISTS games (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
player1_id BIGINT NOT NULL,
|
||||
player2_id BIGINT NOT NULL,
|
||||
player1_username VARCHAR(50) NOT NULL,
|
||||
player2_username VARCHAR(50) NOT NULL,
|
||||
board_size INT DEFAULT 15,
|
||||
winner_id BIGINT,
|
||||
game_state game_state_enum DEFAULT 'pending',
|
||||
started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
completed_at TIMESTAMP WITH TIME ZONE,
|
||||
FOREIGN KEY (player1_id) REFERENCES players(id),
|
||||
FOREIGN KEY (player2_id) REFERENCES players(id),
|
||||
FOREIGN KEY (winner_id) REFERENCES players(id)
|
||||
);
|
||||
|
||||
-- Create game moves table
|
||||
CREATE TABLE IF NOT EXISTS game_moves (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
game_id BIGINT NOT NULL,
|
||||
player_id BIGINT NOT NULL,
|
||||
row_position INT NOT NULL,
|
||||
col_position INT NOT NULL,
|
||||
move_number INT NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
FOREIGN KEY (game_id) REFERENCES games(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (player_id) REFERENCES players(id)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_game ON game_moves(game_id);
|
||||
|
||||
-- Enable Row Level Security (RLS)
|
||||
ALTER TABLE players ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE active_sessions ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE games ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE game_moves ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Create policies to allow all operations (adjust based on your security needs)
|
||||
DROP POLICY IF EXISTS "Allow all operations on players" ON players;
|
||||
CREATE POLICY "Allow all operations on players" ON players FOR ALL USING (true);
|
||||
|
||||
DROP POLICY IF EXISTS "Allow all operations on active_sessions" ON active_sessions;
|
||||
CREATE POLICY "Allow all operations on active_sessions" ON active_sessions FOR ALL USING (true);
|
||||
|
||||
DROP POLICY IF EXISTS "Allow all operations on games" ON games;
|
||||
CREATE POLICY "Allow all operations on games" ON games FOR ALL USING (true);
|
||||
|
||||
DROP POLICY IF EXISTS "Allow all operations on game_moves" ON game_moves;
|
||||
CREATE POLICY "Allow all operations on game_moves" ON game_moves FOR ALL USING (true);
|
||||
|
||||
-- Helper Functions
|
||||
CREATE OR REPLACE FUNCTION increment_wins(player_id BIGINT)
|
||||
RETURNS void AS $$
|
||||
BEGIN
|
||||
UPDATE players
|
||||
SET total_wins = total_wins + 1
|
||||
WHERE id = player_id;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE OR REPLACE FUNCTION increment_losses(player_id BIGINT)
|
||||
RETURNS void AS $$
|
||||
BEGIN
|
||||
UPDATE players
|
||||
SET total_losses = total_losses + 1
|
||||
WHERE id = player_id;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE OR REPLACE FUNCTION increment_draws(player_id BIGINT)
|
||||
RETURNS void AS $$
|
||||
BEGIN
|
||||
UPDATE players
|
||||
SET total_draws = total_draws + 1
|
||||
WHERE id = player_id;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Success message
|
||||
DO $$
|
||||
BEGIN
|
||||
RAISE NOTICE '✅ Connect-5 database schema created successfully!';
|
||||
END $$;
|
||||
Reference in New Issue
Block a user