CREATE TABLE virtual_game_sessions ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id), game_id VARCHAR(50) NOT NULL, session_token VARCHAR(255) NOT NULL UNIQUE, currency VARCHAR(3) NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', -- ACTIVE, COMPLETED, FAILED created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, expires_at TIMESTAMP WITH TIME ZONE NOT NULL ); CREATE TABLE virtual_game_transactions ( id BIGSERIAL PRIMARY KEY, session_id BIGINT NOT NULL REFERENCES virtual_game_sessions(id), user_id BIGINT NOT NULL REFERENCES users(id), wallet_id BIGINT NOT NULL REFERENCES wallets(id), transaction_type VARCHAR(20) NOT NULL, amount BIGINT NOT NULL, currency VARCHAR(3) NOT NULL, external_transaction_id VARCHAR(100) NOT NULL UNIQUE, -- PopOK transaction ID status VARCHAR(20) NOT NULL DEFAULT 'PENDING', -- PENDING, COMPLETED, FAILED created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_virtual_game_sessions_user_id ON virtual_game_sessions(user_id); CREATE INDEX idx_virtual_game_transactions_session_id ON virtual_game_transactions(session_id); CREATE INDEX idx_virtual_game_transactions_user_id ON virtual_game_transactions(user_id);