Files
dolthub--doltgresql/testing/dumps/sql/StrangeGoofy_Yota_game.sql
T
2026-07-13 12:32:25 +08:00

2197 lines
57 KiB
PL/PgSQL

-- Downloaded from: https://github.com/StrangeGoofy/Yota_game/blob/9877bad67b39a3661fc74a08af21a86ddd3e52dc/dump.sql
--
-- PostgreSQL database dump
--
-- Dumped from database version 16.4
-- Dumped by pg_dump version 16.4
-- Started on 2025-03-18 01:12:38
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- TOC entry 2610 (class 2615 OID 35447)
-- Name: s314500; Type: SCHEMA; Schema: -; Owner: s314500
--
CREATE SCHEMA s314500;
ALTER SCHEMA s314500 OWNER TO s314500;
--
-- TOC entry 50491 (class 1255 OID 1371782)
-- Name: check_card_validity(integer, integer, integer, integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.check_card_validity(p_lobby integer, p_x integer, p_y integer, p_type integer) RETURNS boolean
LANGUAGE plpgsql
AS $$
DECLARE
x_shapes text;
x_numbers smallint;
x_colors text;
y_shapes text;
y_numbers smallint;
y_colors text;
x_count integer;
y_count integer;
shape text;
number smallint;
color text;
BEGIN
SELECT t.shape, t.number, t.color from cards c
JOIN cards_types t ON c.card_type_id = t.id
WHERE c.card_id = p_type
INTO shape, number, color;
-- Если место уже занято
IF EXISTS (SELECT 1 FROM get_cards_on_table(p_lobby) WHERE x = p_x AND y = p_y) THEN
RAISE NOTICE 'Клетка уже занята';
RETURN FALSE;
END IF;
-- Если не найдено соседних клеток
IF NOT EXISTS (SELECT 1 FROM get_adjacent_cards(p_lobby, p_x, p_y)) THEN
RAISE NOTICE 'У клетки должен быть хоть один сосед';
RETURN FALSE;
END IF;
SELECT COUNT (1) FROM get_adjacent_cards(p_lobby, p_x, p_y) a
WHERE a.x = p_x
INTO x_count;
IF x_count > 3 THEN
RAISE NOTICE 'Слишком много соседей по горизонтали';
RETURN FALSE;
END IF;
SELECT COUNT (1) FROM get_adjacent_cards(p_lobby, p_x, p_y) a
WHERE a.y = p_y
INTO y_count;
IF y_count > 3 THEN
RAISE NOTICE 'Слишком много соседей по вертикали';
RETURN FALSE;
END IF;
IF NOT (p_type IN (SELECT id FROM get_possible_cards(p_lobby, p_x, p_y))) THEN
RAISE NOTICE 'Карта не подходит';
RETURN FALSE;
END IF;
RETURN TRUE;
END;
$$;
ALTER FUNCTION s314500.check_card_validity(p_lobby integer, p_x integer, p_y integer, p_type integer) OWNER TO s314500;
--
-- TOC entry 51873 (class 1255 OID 1217449)
-- Name: checktoken(integer); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.checktoken(IN tk integer)
LANGUAGE plpgsql
AS $$
DECLARE
tokenExists BOOLEAN;
BEGIN
-- Проверка существования токена
SELECT EXISTS (SELECT 1 FROM Tokens WHERE token = tk) INTO tokenExists;
RAISE NOTICE 'isValid: %', tokenExists;
END;
$$;
ALTER PROCEDURE s314500.checktoken(IN tk integer) OWNER TO s314500;
--
-- TOC entry 54425 (class 1255 OID 1217448)
-- Name: cleartokens(); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.cleartokens()
LANGUAGE plpgsql
AS $$
BEGIN
-- Удаление старых токенов (больше чем 7 дней)
DELETE FROM Tokens WHERE created < NOW() - INTERVAL '7 days';
END;
$$;
ALTER PROCEDURE s314500.cleartokens() OWNER TO s314500;
--
-- TOC entry 54756 (class 1255 OID 1371779)
-- Name: createlobby(integer, character varying, integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.createlobby(tk integer, pw character varying, turnt integer) RETURNS integer
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
userId INT;
lobbyId INT;
BEGIN
-- Получаем логин по токену
SELECT login INTO userLogin FROM tokens WHERE token = tk;
IF userLogin IS NULL THEN
RAISE EXCEPTION 'Невалидный токен';
END IF;
-- Получаем userId
SELECT id INTO userId FROM users WHERE login = userLogin;
-- Создаем лобби
INSERT INTO lobbies (password, turn_time, host_id, state)
VALUES (pw, turnT, userId, 'Start')
RETURNING id INTO lobbyId;
-- Добавляем пользователя в лобби
INSERT INTO players (id,login, lobby_id, is_ready)
VALUES (userId, userLogin, lobbyId, true);
RETURN lobbyId;
END;
$$;
ALTER FUNCTION s314500.createlobby(tk integer, pw character varying, turnt integer) OWNER TO s314500;
--
-- TOC entry 50936 (class 1255 OID 1371803)
-- Name: createlobby(integer, character varying, character varying, integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.createlobby(tk integer, p_nickname character varying, pw character varying, turnt integer) RETURNS integer
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
userId INT;
lobbyId INT;
BEGIN
-- Получаем логин по токену
SELECT login INTO userLogin FROM tokens WHERE token = tk;
IF userLogin IS NULL THEN
RAISE EXCEPTION 'Невалидный токен';
END IF;
-- Получаем userId
SELECT id INTO userId FROM users WHERE login = userLogin;
-- Создаем лобби
INSERT INTO lobbies (password, turn_time, host_id, state)
VALUES (pw, turnT, userId, 'Start')
RETURNING id INTO lobbyId;
-- Добавляем пользователя в лобби
INSERT INTO players (login, nickname, lobby_id, is_ready)
VALUES (userLogin, p_nickname, lobbyId, true);
RETURN lobbyId;
END;
$$;
ALTER FUNCTION s314500.createlobby(tk integer, p_nickname character varying, pw character varying, turnt integer) OWNER TO s314500;
--
-- TOC entry 50376 (class 1255 OID 1217458)
-- Name: enterlobby(integer, integer, character varying); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.enterlobby(tk integer, lobbyid integer, inputpassword character varying) RETURNS text
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
userId INT;
actualPassword VARCHAR(10);
BEGIN
-- Получаем логин по токену
SELECT login INTO userLogin FROM tokens WHERE token = tk;
IF userLogin IS NULL THEN
RETURN 'Невалидный токен';
END IF;
-- Получаем userId
SELECT id INTO userId FROM users WHERE login = userLogin;
-- Проверка, что пользователь не в лобби
IF EXISTS (SELECT 1 FROM players WHERE user_id = userId AND lobby_id = lobbyId) THEN
RETURN 'Пользователь уже в лобби';
END IF;
-- Проверка на пароль
SELECT password INTO actualPassword FROM lobbies WHERE id = lobbyId;
IF actualPassword IS NOT NULL AND inputPassword != actualPassword THEN
RETURN 'Неверный пароль';
END IF;
-- Проверка на максимальное количество игроков
IF (SELECT COUNT(*) FROM players WHERE lobby_id = lobbyId) = 4 THEN
RETURN 'Лобби полное';
END IF;
-- Вход в лобби
INSERT INTO players (user_id, lobby_id) VALUES (userId, lobbyId);
RETURN 'Вход в лобби выполнен';
END;
$$;
ALTER FUNCTION s314500.enterlobby(tk integer, lobbyid integer, inputpassword character varying) OWNER TO s314500;
--
-- TOC entry 52142 (class 1255 OID 1376656)
-- Name: get_adjacent_cards(integer, integer, integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.get_adjacent_cards(p_lobby integer, p_x integer, p_y integer) RETURNS TABLE(x smallint, y smallint, shape text, color text, number smallint)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
WITH RECURSIVE
left_x_neighbors AS (
-- Находим ближайшее существующее значение x, которое меньше param
(SELECT t.x, t.y, t.shape, t.color, t.number FROM get_cards_on_table(p_lobby) t WHERE t.x = p_x - 1 AND t.y = p_y)
UNION ALL
-- Добавляем предыдущее значение, если оно есть
SELECT t.x, t.y, t.shape, t.color, t.number FROM get_cards_on_table(p_lobby) t
JOIN left_x_neighbors n ON t.x = n.x - 1
WHERE t.y = p_y
),
right_x_neighbors AS (
-- Находим ближайшее существующее значение x, которое больше param
(SELECT t.x, t.y, t.shape, t.color, t.number FROM get_cards_on_table(p_lobby) t WHERE t.x = p_x + 1 AND t.y = p_y)
UNION ALL
-- Добавляем следующее значение, если оно есть
SELECT t.x, t.y, t.shape, t.color, t.number FROM get_cards_on_table(p_lobby) t
JOIN right_x_neighbors n ON t.x = n.x + 1
WHERE t.y = p_y
),
left_y_neighbors AS (
-- Находим ближайшее существующее значение y, которое меньше param
(SELECT t.x, t.y, t.shape, t.color, t.number FROM get_cards_on_table(p_lobby) t WHERE t.y = p_y - 1 AND t.x = p_x)
UNION ALL
-- Добавляем предыдущее значение, если оно есть
SELECT t.x, t.y, t.shape, t.color, t.number FROM get_cards_on_table(p_lobby) t
JOIN left_y_neighbors n ON t.y = n.y - 1
WHERE t.x = p_x
),
right_y_neighbors AS (
-- Находим ближайшее существующее значение y, которое больше param
(SELECT t.x, t.y, t.shape, t.color, t.number FROM get_cards_on_table(p_lobby) t WHERE t.y = p_y + 1 AND t.x = p_x)
UNION ALL
-- Добавляем следующее значение, если оно есть
SELECT t.x, t.y, t.shape, t.color, t.number FROM get_cards_on_table(p_lobby) t
JOIN right_y_neighbors n ON t.y = n.y + 1
WHERE t.x = p_x
)
SELECT lx.x, lx.y, lx.shape, lx.color, lx.number FROM left_x_neighbors lx
UNION
SELECT rx.x, rx.y, rx.shape, rx.color, rx.number FROM right_x_neighbors rx
UNION
SELECT ly.x, ly.y, ly.shape, ly.color, ly.number FROM left_y_neighbors ly
UNION
SELECT ry.x, ry.y, ry.shape, ry.color, ry.number FROM right_y_neighbors ry;
END
$$;
ALTER FUNCTION s314500.get_adjacent_cards(p_lobby integer, p_x integer, p_y integer) OWNER TO s314500;
--
-- TOC entry 52953 (class 1255 OID 1371353)
-- Name: get_cards_on_table(integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.get_cards_on_table(lobby integer) RETURNS TABLE(x smallint, y smallint, shape text, color text, number smallint)
LANGUAGE plpgsql
AS $$BEGIN
RETURN QUERY
SELECT pos.x, pos.y, c.shape, c.color, c.number FROM cards_on_table pos
LEFT JOIN cards ON pos.card_id = cards.card_id
LEFT JOIN cards_types c ON cards.card_id = c.id
WHERE pos.lobby_id = lobby;
END;$$;
ALTER FUNCTION s314500.get_cards_on_table(lobby integer) OWNER TO s314500;
--
-- TOC entry 50727 (class 1255 OID 1376860)
-- Name: get_possible_cards(integer, integer, integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.get_possible_cards(p_lobby integer, p_x integer, p_y integer) RETURNS TABLE(id integer, possible_color text, possible_shape text, possible_number smallint)
LANGUAGE plpgsql
AS $$
DECLARE
y_count integer;
x_count integer;
BEGIN
SELECT COUNT(DISTINCT(x)) FROM get_adjacent_cards(p_lobby, p_x, p_y)
WHERE y = p_y
INTO x_count;
SELECT COUNT(DISTINCT(y)) FROM get_adjacent_cards(p_lobby, p_x, p_y)
WHERE x = p_x
INTO y_count;
RETURN QUERY
WITH
distinct_color_x AS
(
SELECT DISTINCT(c.color) FROM get_adjacent_cards(p_lobby, p_x, p_y) c
WHERE y = p_y
),
distinct_color_y AS
(
SELECT DISTINCT(c.color) FROM get_adjacent_cards(p_lobby, p_x, p_y) c
WHERE x = p_x
),
possible_colors AS
(
(
(
SELECT c.color FROM distinct_color_x c
WHERE (SELECT COUNT(1) FROM distinct_color_x) = 1
)
UNION
(
SELECT t.name as color FROM t_card_color t
WHERE (SELECT COUNT(1) FROM distinct_color_x) = x_count
EXCEPT SELECT color FROM distinct_color_x
)
)
INTERSECT
(
(
SELECT c.color FROM distinct_color_y c
WHERE (SELECT COUNT(1) FROM distinct_color_y) = 1
)
UNION
(
SELECT t.name as color FROM t_card_color t
WHERE (SELECT COUNT(1) FROM distinct_color_y) = y_count
EXCEPT SELECT c.color FROM distinct_color_y c
)
)
),
distinct_shape_x AS
(
SELECT DISTINCT(c.shape) FROM get_adjacent_cards(p_lobby, p_x, p_y) c
WHERE y = p_y
),
distinct_shape_y AS
(
SELECT DISTINCT(c.shape) FROM get_adjacent_cards(p_lobby, p_x, p_y) c
WHERE x = p_x
),
possible_shapes AS
(
(
(
SELECT c.shape FROM distinct_shape_x c
WHERE (SELECT COUNT(1) FROM distinct_shape_x) = 1
)
UNION
(
SELECT t.name as shape FROM t_card_shape t
WHERE (SELECT COUNT(1) FROM distinct_shape_x) = x_count
EXCEPT SELECT shape FROM distinct_shape_x
)
)
INTERSECT
(
(
SELECT c.shape FROM distinct_shape_y c
WHERE (SELECT COUNT(1) FROM distinct_shape_y) = 1
)
UNION
(
SELECT t.name as shape FROM t_card_shape t
WHERE (SELECT COUNT(1) FROM distinct_shape_y) = y_count
EXCEPT SELECT c.shape FROM distinct_shape_y c
)
)
),
distinct_number_x AS
(
SELECT DISTINCT(c.number) FROM get_adjacent_cards(p_lobby, p_x, p_y) c
WHERE y = p_y
),
distinct_number_y AS
(
SELECT DISTINCT(c.number) FROM get_adjacent_cards(p_lobby, p_x, p_y) c
WHERE x = p_x
),
possible_numbers AS
(
(
(
SELECT c.number FROM distinct_number_x c
WHERE (SELECT COUNT(1) FROM distinct_number_x) = 1
)
UNION
(
SELECT t.number as number FROM t_card_number t
WHERE (SELECT COUNT(1) FROM distinct_number_x) = x_count
EXCEPT SELECT number FROM distinct_number_x
)
)
INTERSECT
(
(
SELECT c.number FROM distinct_number_y c
WHERE (SELECT COUNT(1) FROM distinct_number_y) = 1
)
UNION
(
SELECT t.number as number FROM t_card_number t
WHERE (SELECT COUNT(1) FROM distinct_number_y) = y_count
EXCEPT SELECT c.number FROM distinct_number_y c
)
)
)
SELECT t.id, t.color, t.shape, t.number FROM cards_types t
WHERE
t.color IN (SELECT color FROM possible_colors) AND
t.shape IN (SELECT shape FROM possible_shapes) AND
t.number IN (SELECT number FROM possible_numbers);
-- SELECT 0, p.color, '', 0::smallint FROM possible_colors p;
END;
$$;
ALTER FUNCTION s314500.get_possible_cards(p_lobby integer, p_x integer, p_y integer) OWNER TO s314500;
--
-- TOC entry 53243 (class 1255 OID 1217452)
-- Name: getcurrentgames(integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.getcurrentgames(tk integer) RETURNS TABLE(id integer, usercount integer, hostlogin character varying)
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
userId INT;
BEGIN
-- Получаем логин по токену
SELECT login INTO userLogin FROM Tokens WHERE token = tk;
IF userLogin IS NULL THEN
RAISE EXCEPTION 'Невалидный токен';
END IF;
-- Получаем userId
SELECT id INTO userId FROM Users WHERE login = userLogin;
-- Запрос
RETURN QUERY
SELECT gl.id,
COUNT(ul2.user_id) AS userCount,
u.login AS hostLogin
FROM GameLobbies AS gl
JOIN UsersInLobby AS ul ON gl.id = ul.lobby_id
LEFT JOIN UsersInLobby AS ul2 ON gl.id = ul2.lobby_id
LEFT JOIN Users u ON gl.host_id = u.id
WHERE ul.user_id = userId
GROUP BY gl.id, u.login;
END;
$$;
ALTER FUNCTION s314500.getcurrentgames(tk integer) OWNER TO s314500;
--
-- TOC entry 54609 (class 1255 OID 1217454)
-- Name: gethost(integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.gethost(lobbyid integer) RETURNS integer
LANGUAGE plpgsql
AS $$
BEGIN
RETURN (SELECT host_id FROM lobbies WHERE id = lobbyid);
END;
$$;
ALTER FUNCTION s314500.gethost(lobbyid integer) OWNER TO s314500;
--
-- TOC entry 53004 (class 1255 OID 1371783)
-- Name: getlobbysettings(integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.getlobbysettings(lobbyid integer) RETURNS TABLE(haspassword boolean, turn_time integer)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
SELECT
CASE WHEN password IS NOT NULL THEN TRUE ELSE FALSE END AS hasPassword,
turn_time
FROM lobbies
WHERE id = lobbyId;
END;
$$;
ALTER FUNCTION s314500.getlobbysettings(lobbyid integer) OWNER TO s314500;
--
-- TOC entry 50629 (class 1255 OID 1217500)
-- Name: getuserid(integer); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.getuserid(IN tk integer)
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64) := getUserLoginByToken(tk);
BEGIN
-- Получение id пользователя по логину
SELECT id FROM Users WHERE login = userLogin;
END;
$$;
ALTER PROCEDURE s314500.getuserid(IN tk integer) OWNER TO s314500;
--
-- TOC entry 52924 (class 1255 OID 1217450)
-- Name: getuserloginbytoken(integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.getuserloginbytoken(tk integer) RETURNS character varying
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
BEGIN
-- Получение логина по токену
SELECT login INTO userLogin FROM tokens WHERE token = tk;
RETURN userLogin;
END;
$$;
ALTER FUNCTION s314500.getuserloginbytoken(tk integer) OWNER TO s314500;
--
-- TOC entry 53948 (class 1255 OID 1217453)
-- Name: getusersinlobby(integer, integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.getusersinlobby(tk integer, lobbyid integer) RETURNS TABLE(user_id integer, login character varying, win_count integer, is_ready boolean)
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
userId INT;
BEGIN
-- Получаем логин по токену
SELECT login INTO userLogin FROM tokens WHERE token = tk;
IF userLogin IS NULL THEN
RAISE EXCEPTION 'Невалидный токен';
END IF;
-- Получаем userId
SELECT id INTO userId FROM Users WHERE login = userLogin;
-- Проверка на существование лобби
IF NOT EXISTS (SELECT 1 FROM lobbies WHERE id = lobbyId) THEN
RAISE EXCEPTION 'Лобби не существует';
END IF;
-- Проверка на то, что пользователь в лобби
IF NOT EXISTS (SELECT 1 FROM players WHERE user_id = userId AND lobby_id = lobbyId) THEN
RAISE EXCEPTION 'Пользователь не в лобби';
END IF;
-- Запрос
RETURN QUERY
SELECT u.id AS user_id, u.login, p.is_ready
FROM players p
JOIN users u ON p.user_id = u.id
WHERE p.lobby_id = lobbyId;
END;
$$;
ALTER FUNCTION s314500.getusersinlobby(tk integer, lobbyid integer) OWNER TO s314500;
--
-- TOC entry 54217 (class 1255 OID 1217465)
-- Name: hashpassword(character varying); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.hashpassword(password character varying) RETURNS character varying
LANGUAGE plpgsql
AS $$
BEGIN
-- Хэширование пароля с добавлением соли 'megasalt'
RETURN encode(convert_to(CONCAT(password, 'megasalt'), 'UTF8'), 'hex');
END;
$$;
ALTER FUNCTION s314500.hashpassword(password character varying) OWNER TO s314500;
--
-- TOC entry 55466 (class 1255 OID 1217748)
-- Name: hello_world(); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.hello_world() RETURNS text
LANGUAGE plpgsql
AS $$
BEGIN
RETURN 'Hello, World!';
END;
$$;
ALTER FUNCTION s314500.hello_world() OWNER TO s314500;
--
-- TOC entry 53786 (class 1255 OID 1371335)
-- Name: initgame(integer); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.initgame(IN id_lobby integer)
LANGUAGE plpgsql
AS $$
DECLARE
x integer;
BEGIN
-- Вызов mashup
CALL mashup(id_lobby);
-- Получаем card_id
SELECT card_id INTO x FROM Cards_in_deck LIMIT 1;
-- Вставляем карту на стол
INSERT INTO CardsOnTable
SELECT * FROM Cards_in_deck WHERE card_id = x;
-- Удаляем карту из колоды
DELETE FROM Cards_in_deck WHERE card_id = x;
-- Создаём места в лобби
CALL makePlaces(id_lobby, 4);
-- Определяем случайного игрока, который начнёт ход
INSERT INTO Current_Turn (player_id)
SELECT player_id FROM Players
WHERE lobby_id = id_lobby
ORDER BY RANDOM()
LIMIT 1;
END;
$$;
ALTER PROCEDURE s314500.initgame(IN id_lobby integer) OWNER TO s314500;
--
-- TOC entry 54206 (class 1255 OID 1217457)
-- Name: isgamestarted(integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.isgamestarted(lobbyid integer) RETURNS boolean
LANGUAGE plpgsql
AS $$
BEGIN
RETURN EXISTS (
SELECT 1
FROM CurrentTurn
WHERE turn_player_id IN (SELECT id FROM Players WHERE lobby_id = lobbyId)
);
END;
$$;
ALTER FUNCTION s314500.isgamestarted(lobbyid integer) OWNER TO s314500;
--
-- TOC entry 53391 (class 1255 OID 1217460)
-- Name: leavelobby(integer, integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.leavelobby(tk integer, lobbyid integer) RETURNS text
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
userId INT;
currentHostId INT;
BEGIN
-- Получаем логин по токену
SELECT login INTO userLogin FROM tokens WHERE token = tk;
IF userLogin IS NULL THEN
RETURN 'Невалидный токен';
END IF;
-- Получаем userId
SELECT id INTO userId FROM users WHERE login = userLogin;
-- Проверка, является ли пользователь хостом
SELECT host_id INTO currentHostId FROM lobbies WHERE id = lobbyId;
IF currentHostId = userId THEN
IF (SELECT COUNT(*) FROM players WHERE lobby_id = lobbyId) > 1 THEN
UPDATE lobbies
SET host_id = (
SELECT user_id
FROM players
WHERE lobby_id = lobbyId
AND user_id != userId
ORDER BY RANDOM()
LIMIT 1
)
WHERE id = lobbyId;
ELSE
DELETE FROM lobbies WHERE id = lobbyId;
END IF;
END IF;
DELETE FROM players WHERE user_id = userId AND lobby_id = lobbyId;
RETURN 'Выход из лобби выполнен';
END;
$$;
ALTER FUNCTION s314500.leavelobby(tk integer, lobbyid integer) OWNER TO s314500;
--
-- TOC entry 55024 (class 1255 OID 1217495)
-- Name: login(character varying, character varying); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.login(IN lg character varying, IN pw character varying)
LANGUAGE plpgsql
AS $$
DECLARE
tk bigint;
BEGIN
-- Генерация случайного токена
tk := floor(random() * 4000000000) + 1;
-- Проверка пароля
IF hashPassword(pw) = (SELECT password FROM Users WHERE login = lg LIMIT 1) THEN
-- Очистка токенов (предполагается, что процедура clearTokens() уже создана)
CALL clearTokens();
-- Вставка нового токена
INSERT INTO Tokens (token, login) VALUES (tk, lg);
-- Возвращаем id пользователя и токен
PERFORM
(SELECT id FROM Users WHERE login = lg LIMIT 1),
(SELECT tk FROM Users WHERE login = lg LIMIT 1);
ELSE
-- Если логин или пароль неверный
RAISE EXCEPTION 'Пароль или логин неверный';
END IF;
END;
$$;
ALTER PROCEDURE s314500.login(IN lg character varying, IN pw character varying) OWNER TO s314500;
--
-- TOC entry 55754 (class 1255 OID 1217445)
-- Name: logout(integer); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.logout(IN tk integer)
LANGUAGE plpgsql
AS $$
BEGIN
-- Удаление токена
DELETE FROM Tokens WHERE token = tk;
-- Проверка, были ли удалены строки
IF NOT FOUND THEN
-- Если токен не был найден
RAISE EXCEPTION 'Невалидный токен';
ELSE
-- Если токен был успешно удален
RAISE NOTICE 'Вы успешно вышли из аккаунта';
END IF;
END;
$$;
ALTER PROCEDURE s314500.logout(IN tk integer) OWNER TO s314500;
--
-- TOC entry 53158 (class 1255 OID 1332580)
-- Name: make_places(integer, integer); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.make_places(IN id_lobby integer, IN count_cards integer)
LANGUAGE plpgsql
AS $$
DECLARE
total_cards INT;
count_players INT;
BEGIN
-- Создание временной таблицы для игроков
CREATE TEMP TABLE tmp (
n SERIAL PRIMARY KEY,
id INT
) ON COMMIT DROP;
-- Заполняем временную таблицу случайным порядком игроков из лобби
INSERT INTO tmp(id)
SELECT player_id FROM Players WHERE lobby_id = id_lobby ORDER BY RANDOM();
-- Подсчитываем количество игроков
SELECT COUNT(*) INTO count_players FROM tmp;
-- Вычисляем общее количество карт
total_cards := count_players * count_cards;
-- Создание временной таблицы для карт
CREATE TEMP TABLE tmpCards (
n SERIAL PRIMARY KEY,
id_card INT
) ON COMMIT DROP;
-- Заполняем временную таблицу случайными картами из колоды, ограничивая по total_cards
INSERT INTO tmpCards(id_card)
SELECT card_id FROM Cards_in_Deck WHERE lobby_id = id_lobby ORDER BY RANDOM() LIMIT total_cards;
-- Распределяем карты между игроками
INSERT INTO Cards_in_hand (player_id, card_id)
SELECT tmp.id AS player_id, tmpCards.id_card
FROM tmpCards
JOIN tmp ON tmp.n = (tmpCards.n % count_players) + 1;
END $$;
ALTER PROCEDURE s314500.make_places(IN id_lobby integer, IN count_cards integer) OWNER TO s314500;
--
-- TOC entry 52249 (class 1255 OID 1371336)
-- Name: makeplaces(integer, integer); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.makeplaces(IN id_lobby integer, IN count_cards integer)
LANGUAGE plpgsql
AS $$
DECLARE
total_cards integer;
count_players integer;
BEGIN
-- Создание временной таблицы для игроков (случайный порядок)
CREATE TEMP TABLE tmp (
n SERIAL PRIMARY KEY,
id integer
) ON COMMIT DROP;
-- Заполнение временной таблицы случайно отсортированными игроками
INSERT INTO tmp(id)
SELECT player_id FROM Players WHERE lobby_id = id_lobby ORDER BY RANDOM();
-- Подсчёт количества игроков
SELECT COUNT(*) INTO count_players FROM tmp;
-- Вычисление общего количества карт
total_cards := count_players * count_cards;
CREATE TEMP TABLE tmpCards (
n SERIAL PRIMARY KEY,
id_card integer
) ON COMMIT DROP;
-- Заполнение картами (случайный порядок)
INSERT INTO tmpCards(id_card)
SELECT card_id FROM Cards_in_Deck WHERE lobby_id = id_lobby ORDER BY RANDOM() LIMIT total_cards;
-- Раздача карт игрокам
INSERT INTO Cards_in_hand (player_id, card_id)
SELECT tmp.id AS player_id, tmpCards.id_card
FROM tmpCards
JOIN tmp ON tmp.n = (tmpCards.n % count_players) + 1;
END;
$$;
ALTER PROCEDURE s314500.makeplaces(IN id_lobby integer, IN count_cards integer) OWNER TO s314500;
--
-- TOC entry 54287 (class 1255 OID 1371334)
-- Name: mashup(integer); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.mashup(IN id_lobby integer)
LANGUAGE plpgsql
AS $$
BEGIN
-- Вставляем случайно отсортированные карты из cards в cards_in_tables
INSERT INTO cards_on_table (card_id, lobby_id)
SELECT card_id, lobby_id FROM cards
ORDER BY RANDOM();
END;
$$;
ALTER PROCEDURE s314500.mashup(IN id_lobby integer) OWNER TO s314500;
--
-- TOC entry 50560 (class 1255 OID 1217466)
-- Name: register(character varying, character varying); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.register(IN login character varying, IN password character varying)
LANGUAGE plpgsql
AS $$
BEGIN
-- Проверка на минимальную длину пароля и наличие как минимум одной буквы и одной цифры
IF LENGTH(password) < 6 OR password !~ '[0-9]' OR password !~ '[a-zA-Z]' THEN
RAISE EXCEPTION 'Пароль должен быть длиной не менее 6 символов и содержать как минимум одну букву и одну цифру';
END IF;
-- Вставка пользователя, если логин уникален
BEGIN
INSERT INTO Users(login, password) VALUES (login, hashPassword(password));
EXCEPTION WHEN unique_violation THEN
RAISE EXCEPTION 'Такой логин уже занят';
END;
-- Вызов функции для входа пользователя
CALL login(login, password);
END;
$$;
ALTER PROCEDURE s314500.register(IN login character varying, IN password character varying) OWNER TO s314500;
--
-- TOC entry 50991 (class 1255 OID 1217459)
-- Name: setready(integer, integer, boolean); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.setready(tk integer, lobbyid integer, state boolean) RETURNS text
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
userId INT;
BEGIN
-- Получаем логин по токену
SELECT login INTO userLogin FROM tokens WHERE token = tk;
IF userLogin IS NULL THEN
RETURN 'Невалидный токен';
END IF;
-- Получаем userId
SELECT id INTO userId FROM users WHERE login = userLogin;
-- Проверка, находится ли пользователь в лобби
IF NOT EXISTS (SELECT 1 FROM players WHERE user_id = userId AND lobby_id = lobbyId) THEN
RETURN 'Пользователь не в лобби';
END IF;
-- Обновление статуса готовности
UPDATE players
SET is_ready = state
WHERE user_id = userId AND lobby_id = lobbyId;
-- Возвращаем обновленную информацию о лобби
PERFORM getUsersInLobby(tk, lobbyId);
RETURN 'Готовность обновлена';
END;
$$;
ALTER FUNCTION s314500.setready(tk integer, lobbyid integer, state boolean) OWNER TO s314500;
--
-- TOC entry 51028 (class 1255 OID 1217451)
-- Name: showavailablegames(integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.showavailablegames(tk integer) RETURNS TABLE(id integer, usercount integer, haspassword boolean, hostlogin character varying)
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
userId INT;
BEGIN
-- Получаем логин по токену
SELECT login INTO userLogin FROM Tokens WHERE token = tk;
IF userLogin IS NULL THEN
RAISE EXCEPTION 'Невалидный токен';
END IF;
-- Получаем userId
SELECT id INTO userId FROM Users WHERE login = userLogin;
-- Запрос
RETURN QUERY
SELECT p.lobby_id AS id,
COUNT(*) AS userCount,
CASE WHEN l.password IS NOT NULL THEN TRUE ELSE FALSE END AS hasPassword,
u.login AS hostLogin
FROM players p
LEFT JOIN players p2 ON p2.lobby_id = p.lobby_id AND p2.user_id = userId
INNER JOIN lobbies l ON p.lobby_id = l.id
LEFT JOIN users u ON l.host_id = u.id
WHERE p2.user_id IS NULL
GROUP BY p.lobby_id, l.password, u.login
HAVING COUNT(*) < 4;
END;
$$;
ALTER FUNCTION s314500.showavailablegames(tk integer) OWNER TO s314500;
--
-- TOC entry 52005 (class 1255 OID 1217496)
-- Name: showuserinfo(integer); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.showuserinfo(IN tk integer)
LANGUAGE plpgsql
AS $$
DECLARE
userLogin VARCHAR(64);
BEGIN
-- Проверка на валидность токена
SELECT login INTO userLogin FROM Tokens WHERE token = tk;
IF userLogin IS NULL THEN
-- Если токен не найден
RAISE EXCEPTION 'Невалидный токен';
ELSE
-- Запрос информации о пользователе
PERFORM (SELECT login FROM Users WHERE login = userLogin);
END IF;
END;
$$;
ALTER PROCEDURE s314500.showuserinfo(IN tk integer) OWNER TO s314500;
--
-- TOC entry 50785 (class 1255 OID 1217499)
-- Name: showuserpl(); Type: PROCEDURE; Schema: s314500; Owner: s314500
--
CREATE PROCEDURE s314500.showuserpl()
LANGUAGE plpgsql
AS $$
BEGIN
-- Запрос информации о всех пользователях
PERFORM (SELECT login FROM Users);
END;
$$;
ALTER PROCEDURE s314500.showuserpl() OWNER TO s314500;
--
-- TOC entry 54430 (class 1255 OID 1217462)
-- Name: startgame(integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.startgame(lobbyid integer) RETURNS text
LANGUAGE plpgsql
AS $$
DECLARE
currentHostId INT;
BEGIN
-- Получаем хоста лобби
SELECT host_id INTO currentHostId FROM lobbies WHERE id = lobbyId;
-- Проверка, что хост запускает игру
IF currentHostId != (SELECT id FROM users WHERE login = userLogin) THEN
RETURN 'Только хост может начать игру';
END IF;
-- Запуск игры
UPDATE lobbies SET state = 'inProgress' WHERE id = lobbyId;
RETURN 'Игра началась';
END;
$$;
ALTER FUNCTION s314500.startgame(lobbyid integer) OWNER TO s314500;
--
-- TOC entry 51443 (class 1255 OID 1376881)
-- Name: type_of_card(integer); Type: FUNCTION; Schema: s314500; Owner: s314500
--
CREATE FUNCTION s314500.type_of_card(p_card integer) RETURNS integer
LANGUAGE plpgsql
AS $$DECLARE
out integer;
BEGIN
SELECT card_type_id FROM cards WHERE card_id = p_card
INTO out;
RETURN out;
END;$$;
ALTER FUNCTION s314500.type_of_card(p_card integer) OWNER TO s314500;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- TOC entry 47333 (class 1259 OID 1217335)
-- Name: cards; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.cards (
card_id integer NOT NULL,
card_type_id integer NOT NULL
);
ALTER TABLE s314500.cards OWNER TO s314500;
--
-- TOC entry 47332 (class 1259 OID 1217334)
-- Name: cards_card_id_seq; Type: SEQUENCE; Schema: s314500; Owner: s314500
--
CREATE SEQUENCE s314500.cards_card_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE s314500.cards_card_id_seq OWNER TO s314500;
--
-- TOC entry 99952 (class 0 OID 0)
-- Dependencies: 47332
-- Name: cards_card_id_seq; Type: SEQUENCE OWNED BY; Schema: s314500; Owner: s314500
--
ALTER SEQUENCE s314500.cards_card_id_seq OWNED BY s314500.cards.card_id;
--
-- TOC entry 47336 (class 1259 OID 1217378)
-- Name: cards_in_deck; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.cards_in_deck (
card_id integer NOT NULL,
lobby_id integer NOT NULL
);
ALTER TABLE s314500.cards_in_deck OWNER TO s314500;
--
-- TOC entry 47334 (class 1259 OID 1217346)
-- Name: cards_in_hand; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.cards_in_hand (
card_id integer NOT NULL,
player_id integer NOT NULL
);
ALTER TABLE s314500.cards_in_hand OWNER TO s314500;
--
-- TOC entry 47335 (class 1259 OID 1217361)
-- Name: cards_on_table; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.cards_on_table (
card_id integer NOT NULL,
lobby_id integer NOT NULL,
x smallint NOT NULL,
y smallint NOT NULL
);
ALTER TABLE s314500.cards_on_table OWNER TO s314500;
--
-- TOC entry 49114 (class 1259 OID 1330823)
-- Name: cardstypes_id_seq; Type: SEQUENCE; Schema: s314500; Owner: s314500
--
CREATE SEQUENCE s314500.cardstypes_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
MAXVALUE 66
CACHE 1;
ALTER SEQUENCE s314500.cardstypes_id_seq OWNER TO s314500;
--
-- TOC entry 49115 (class 1259 OID 1330824)
-- Name: cards_types; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.cards_types (
id integer DEFAULT nextval('s314500.cardstypes_id_seq'::regclass) NOT NULL,
shape text,
number smallint,
color text,
CONSTRAINT cardstypes_color_check CHECK ((color = ANY (ARRAY['Blue'::text, 'Yellow'::text, 'Red'::text, 'Green'::text]))),
CONSTRAINT cardstypes_number_check CHECK ((number >= 0)),
CONSTRAINT cardstypes_shape_check CHECK ((shape = ANY (ARRAY['Square'::text, 'Triangle'::text, 'Circle'::text, 'Cross'::text])))
);
ALTER TABLE s314500.cards_types OWNER TO s314500;
--
-- TOC entry 47331 (class 1259 OID 1217310)
-- Name: current_turn; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.current_turn (
player_id integer NOT NULL,
start_time timestamp without time zone NOT NULL
);
ALTER TABLE s314500.current_turn OWNER TO s314500;
--
-- TOC entry 47327 (class 1259 OID 1217160)
-- Name: lobbies; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.lobbies (
id integer NOT NULL,
password character varying(10),
turn_time integer DEFAULT 30 NOT NULL,
host_id integer,
state character varying DEFAULT 'waiting'::character varying NOT NULL
);
ALTER TABLE s314500.lobbies OWNER TO s314500;
--
-- TOC entry 47326 (class 1259 OID 1217159)
-- Name: lobbies_id_seq; Type: SEQUENCE; Schema: s314500; Owner: s314500
--
CREATE SEQUENCE s314500.lobbies_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE s314500.lobbies_id_seq OWNER TO s314500;
--
-- TOC entry 99953 (class 0 OID 0)
-- Dependencies: 47326
-- Name: lobbies_id_seq; Type: SEQUENCE OWNED BY; Schema: s314500; Owner: s314500
--
ALTER SEQUENCE s314500.lobbies_id_seq OWNED BY s314500.lobbies.id;
--
-- TOC entry 47329 (class 1259 OID 1217276)
-- Name: players; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.players (
id integer NOT NULL,
lobby_id integer NOT NULL,
login character varying(20) NOT NULL,
nickname character varying(15) NOT NULL,
points integer DEFAULT 0 NOT NULL,
is_ready boolean DEFAULT false NOT NULL
);
ALTER TABLE s314500.players OWNER TO s314500;
--
-- TOC entry 47328 (class 1259 OID 1217275)
-- Name: players_id_seq; Type: SEQUENCE; Schema: s314500; Owner: s314500
--
CREATE SEQUENCE s314500.players_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE s314500.players_id_seq OWNER TO s314500;
--
-- TOC entry 99954 (class 0 OID 0)
-- Dependencies: 47328
-- Name: players_id_seq; Type: SEQUENCE OWNED BY; Schema: s314500; Owner: s314500
--
ALTER SEQUENCE s314500.players_id_seq OWNED BY s314500.players.id;
--
-- TOC entry 50294 (class 1259 OID 1376837)
-- Name: t_card_color; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.t_card_color (
id smallint NOT NULL,
name text NOT NULL
);
ALTER TABLE s314500.t_card_color OWNER TO s314500;
--
-- TOC entry 50296 (class 1259 OID 1376851)
-- Name: t_card_number; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.t_card_number (
id smallint NOT NULL,
number smallint NOT NULL
);
ALTER TABLE s314500.t_card_number OWNER TO s314500;
--
-- TOC entry 50295 (class 1259 OID 1376844)
-- Name: t_card_shape; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.t_card_shape (
id smallint NOT NULL,
name text NOT NULL
);
ALTER TABLE s314500.t_card_shape OWNER TO s314500;
--
-- TOC entry 50102 (class 1259 OID 1371608)
-- Name: test_table; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.test_table (
x integer NOT NULL
);
ALTER TABLE s314500.test_table OWNER TO s314500;
--
-- TOC entry 47337 (class 1259 OID 1217393)
-- Name: tokens; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.tokens (
login character varying(64) NOT NULL,
token bigint NOT NULL,
created timestamp without time zone DEFAULT now() NOT NULL
);
ALTER TABLE s314500.tokens OWNER TO s314500;
--
-- TOC entry 47325 (class 1259 OID 1217154)
-- Name: users; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.users (
login character varying(20) NOT NULL,
password character varying(50) NOT NULL,
id integer NOT NULL
);
ALTER TABLE s314500.users OWNER TO s314500;
--
-- TOC entry 47342 (class 1259 OID 1217480)
-- Name: users_id_seq; Type: SEQUENCE; Schema: s314500; Owner: s314500
--
CREATE SEQUENCE s314500.users_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE s314500.users_id_seq OWNER TO s314500;
--
-- TOC entry 99955 (class 0 OID 0)
-- Dependencies: 47342
-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: s314500; Owner: s314500
--
ALTER SEQUENCE s314500.users_id_seq OWNED BY s314500.users.id;
--
-- TOC entry 47330 (class 1259 OID 1217295)
-- Name: users_in_lobby; Type: TABLE; Schema: s314500; Owner: s314500
--
CREATE TABLE s314500.users_in_lobby (
lobby_id integer NOT NULL,
login character varying(20) NOT NULL
);
ALTER TABLE s314500.users_in_lobby OWNER TO s314500;
--
-- TOC entry 99550 (class 2604 OID 1217338)
-- Name: cards card_id; Type: DEFAULT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards ALTER COLUMN card_id SET DEFAULT nextval('s314500.cards_card_id_seq'::regclass);
--
-- TOC entry 99544 (class 2604 OID 1217163)
-- Name: lobbies id; Type: DEFAULT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.lobbies ALTER COLUMN id SET DEFAULT nextval('s314500.lobbies_id_seq'::regclass);
--
-- TOC entry 99547 (class 2604 OID 1217279)
-- Name: players id; Type: DEFAULT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.players ALTER COLUMN id SET DEFAULT nextval('s314500.players_id_seq'::regclass);
--
-- TOC entry 99543 (class 2604 OID 1217481)
-- Name: users id; Type: DEFAULT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.users ALTER COLUMN id SET DEFAULT nextval('s314500.users_id_seq'::regclass);
--
-- TOC entry 99935 (class 0 OID 1217335)
-- Dependencies: 47333
-- Data for Name: cards; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.cards (card_id, card_type_id) FROM stdin;
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
31 31
32 32
33 33
34 34
35 35
36 36
37 37
38 38
39 39
40 40
41 41
42 42
43 43
44 44
45 45
46 46
47 47
48 48
49 49
50 50
51 51
52 52
53 53
54 54
55 55
56 56
57 57
58 58
59 59
60 60
61 61
62 62
63 63
64 64
65 65
66 66
\.
--
-- TOC entry 99938 (class 0 OID 1217378)
-- Dependencies: 47336
-- Data for Name: cards_in_deck; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.cards_in_deck (card_id, lobby_id) FROM stdin;
\.
--
-- TOC entry 99936 (class 0 OID 1217346)
-- Dependencies: 47334
-- Data for Name: cards_in_hand; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.cards_in_hand (card_id, player_id) FROM stdin;
\.
--
-- TOC entry 99937 (class 0 OID 1217361)
-- Dependencies: 47335
-- Data for Name: cards_on_table; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.cards_on_table (card_id, lobby_id, x, y) FROM stdin;
1 1 0 0
2 1 1 0
3 1 2 0
4 1 3 0
5 1 2 1
\.
--
-- TOC entry 99942 (class 0 OID 1330824)
-- Dependencies: 49115
-- Data for Name: cards_types; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.cards_types (id, shape, number, color) FROM stdin;
1 Square 1 Blue
2 Square 1 Yellow
3 Square 1 Red
4 Square 1 Green
5 Square 2 Blue
6 Square 2 Yellow
7 Square 2 Red
8 Square 2 Green
9 Square 3 Blue
10 Square 3 Yellow
11 Square 3 Red
12 Square 3 Green
13 Square 4 Blue
14 Square 4 Yellow
15 Square 4 Red
16 Square 4 Green
17 Triangle 1 Blue
18 Triangle 1 Yellow
19 Triangle 1 Red
20 Triangle 1 Green
21 Triangle 2 Blue
22 Triangle 2 Yellow
23 Triangle 2 Red
24 Triangle 2 Green
25 Triangle 3 Blue
26 Triangle 3 Yellow
27 Triangle 3 Red
28 Triangle 3 Green
29 Triangle 4 Blue
30 Triangle 4 Yellow
31 Triangle 4 Red
32 Triangle 4 Green
33 Circle 1 Blue
34 Circle 1 Yellow
35 Circle 1 Red
36 Circle 1 Green
37 Circle 2 Blue
38 Circle 2 Yellow
39 Circle 2 Red
40 Circle 2 Green
41 Circle 3 Blue
42 Circle 3 Yellow
43 Circle 3 Red
44 Circle 3 Green
45 Circle 4 Blue
46 Circle 4 Yellow
47 Circle 4 Red
48 Circle 4 Green
49 Cross 1 Blue
50 Cross 1 Yellow
51 Cross 1 Red
52 Cross 1 Green
53 Cross 2 Blue
54 Cross 2 Yellow
55 Cross 2 Red
56 Cross 2 Green
57 Cross 3 Blue
58 Cross 3 Yellow
59 Cross 3 Red
60 Cross 3 Green
61 Cross 4 Blue
62 Cross 4 Yellow
63 Cross 4 Red
64 Cross 4 Green
65 \N \N \N
66 \N \N \N
\.
--
-- TOC entry 99933 (class 0 OID 1217310)
-- Dependencies: 47331
-- Data for Name: current_turn; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.current_turn (player_id, start_time) FROM stdin;
\.
--
-- TOC entry 99929 (class 0 OID 1217160)
-- Dependencies: 47327
-- Data for Name: lobbies; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.lobbies (id, password, turn_time, host_id, state) FROM stdin;
1 12345678 60 \N waiting
11 qwerty 60 8 Start
17 qwerty 60 8 Start
\.
--
-- TOC entry 99931 (class 0 OID 1217276)
-- Dependencies: 47329
-- Data for Name: players; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.players (id, lobby_id, login, nickname, points, is_ready) FROM stdin;
8 11 TestUser Tester 0 t
1 17 TestUser Tester 0 t
\.
--
-- TOC entry 99944 (class 0 OID 1376837)
-- Dependencies: 50294
-- Data for Name: t_card_color; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.t_card_color (id, name) FROM stdin;
1 Yellow
2 Green
3 Red
4 Blue
\.
--
-- TOC entry 99946 (class 0 OID 1376851)
-- Dependencies: 50296
-- Data for Name: t_card_number; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.t_card_number (id, number) FROM stdin;
1 1
2 2
3 3
4 4
\.
--
-- TOC entry 99945 (class 0 OID 1376844)
-- Dependencies: 50295
-- Data for Name: t_card_shape; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.t_card_shape (id, name) FROM stdin;
1 Circle
2 Triangle
3 Square
4 Cross
\.
--
-- TOC entry 99943 (class 0 OID 1371608)
-- Dependencies: 50102
-- Data for Name: test_table; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.test_table (x) FROM stdin;
1
2
3
4
5
6
8
9
12
13
14
21
22
23
\.
--
-- TOC entry 99939 (class 0 OID 1217393)
-- Dependencies: 47337
-- Data for Name: tokens; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.tokens (login, token, created) FROM stdin;
TestUser 1076758434 2025-03-16 22:53:09.790649
TestUser2 357352692 2025-03-16 22:54:17.350104
TestUser3 466720616 2025-03-16 22:57:47.070035
TestUser4 1154052900 2025-03-16 23:06:17.176119
\.
--
-- TOC entry 99927 (class 0 OID 1217154)
-- Dependencies: 47325
-- Data for Name: users; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.users (login, password, id) FROM stdin;
vasya 7661733132336d65676173616c74 5
TestUser 7177657274793132336d65676173616c74 8
TestUser2 7177657274793132336d65676173616c74 13
TestUser3 7177657274793132336d65676173616c74 21
TestUser4 717765727479313233346d65676173616c74 42
\.
--
-- TOC entry 99932 (class 0 OID 1217295)
-- Dependencies: 47330
-- Data for Name: users_in_lobby; Type: TABLE DATA; Schema: s314500; Owner: s314500
--
COPY s314500.users_in_lobby (lobby_id, login) FROM stdin;
\.
--
-- TOC entry 99956 (class 0 OID 0)
-- Dependencies: 47332
-- Name: cards_card_id_seq; Type: SEQUENCE SET; Schema: s314500; Owner: s314500
--
SELECT pg_catalog.setval('s314500.cards_card_id_seq', 1, false);
--
-- TOC entry 99957 (class 0 OID 0)
-- Dependencies: 49114
-- Name: cardstypes_id_seq; Type: SEQUENCE SET; Schema: s314500; Owner: s314500
--
SELECT pg_catalog.setval('s314500.cardstypes_id_seq', 1, false);
--
-- TOC entry 99958 (class 0 OID 0)
-- Dependencies: 47326
-- Name: lobbies_id_seq; Type: SEQUENCE SET; Schema: s314500; Owner: s314500
--
SELECT pg_catalog.setval('s314500.lobbies_id_seq', 19, true);
--
-- TOC entry 99959 (class 0 OID 0)
-- Dependencies: 47328
-- Name: players_id_seq; Type: SEQUENCE SET; Schema: s314500; Owner: s314500
--
SELECT pg_catalog.setval('s314500.players_id_seq', 3, true);
--
-- TOC entry 99960 (class 0 OID 0)
-- Dependencies: 47342
-- Name: users_id_seq; Type: SEQUENCE SET; Schema: s314500; Owner: s314500
--
SELECT pg_catalog.setval('s314500.users_id_seq', 42, true);
--
-- TOC entry 99569 (class 2606 OID 1217340)
-- Name: cards cards_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards
ADD CONSTRAINT cards_pkey PRIMARY KEY (card_id);
--
-- TOC entry 99577 (class 2606 OID 1217382)
-- Name: cards_in_deck cardsindeck_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_in_deck
ADD CONSTRAINT cardsindeck_pkey PRIMARY KEY (card_id);
--
-- TOC entry 99571 (class 2606 OID 1217350)
-- Name: cards_in_hand cardsinhand_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_in_hand
ADD CONSTRAINT cardsinhand_pkey PRIMARY KEY (card_id);
--
-- TOC entry 99573 (class 2606 OID 1217365)
-- Name: cards_on_table cardsontable_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_on_table
ADD CONSTRAINT cardsontable_pkey PRIMARY KEY (card_id);
--
-- TOC entry 99581 (class 2606 OID 1330834)
-- Name: cards_types cardstypes_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_types
ADD CONSTRAINT cardstypes_pkey PRIMARY KEY (id);
--
-- TOC entry 99567 (class 2606 OID 1217314)
-- Name: current_turn currentturn_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.current_turn
ADD CONSTRAINT currentturn_pkey PRIMARY KEY (player_id);
--
-- TOC entry 99559 (class 2606 OID 1217166)
-- Name: lobbies lobbies_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.lobbies
ADD CONSTRAINT lobbies_pkey PRIMARY KEY (id);
--
-- TOC entry 99561 (class 2606 OID 1217282)
-- Name: players players_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.players
ADD CONSTRAINT players_pkey PRIMARY KEY (id);
--
-- TOC entry 99587 (class 2606 OID 1376843)
-- Name: t_card_color t_card_color_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.t_card_color
ADD CONSTRAINT t_card_color_pkey PRIMARY KEY (id);
--
-- TOC entry 99591 (class 2606 OID 1376855)
-- Name: t_card_number t_card_number_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.t_card_number
ADD CONSTRAINT t_card_number_pkey PRIMARY KEY (id);
--
-- TOC entry 99589 (class 2606 OID 1376850)
-- Name: t_card_shape t_card_shape_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.t_card_shape
ADD CONSTRAINT t_card_shape_pkey PRIMARY KEY (id);
--
-- TOC entry 99585 (class 2606 OID 1371612)
-- Name: test_table test_table_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.test_table
ADD CONSTRAINT test_table_pkey PRIMARY KEY (x);
--
-- TOC entry 99579 (class 2606 OID 1217487)
-- Name: tokens tokens_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.tokens
ADD CONSTRAINT tokens_pkey PRIMARY KEY (token);
--
-- TOC entry 99575 (class 2606 OID 1217367)
-- Name: cards_on_table unique_lobby_xy; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_on_table
ADD CONSTRAINT unique_lobby_xy UNIQUE (lobby_id, x, y);
--
-- TOC entry 99563 (class 2606 OID 1217284)
-- Name: players unique_login_lobby; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.players
ADD CONSTRAINT unique_login_lobby UNIQUE (login, lobby_id);
--
-- TOC entry 99583 (class 2606 OID 1330836)
-- Name: cards_types unique_shape_number_color; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_types
ADD CONSTRAINT unique_shape_number_color UNIQUE (shape, number, color);
--
-- TOC entry 99557 (class 2606 OID 1217158)
-- Name: users users_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.users
ADD CONSTRAINT users_pkey PRIMARY KEY (login);
--
-- TOC entry 99565 (class 2606 OID 1217299)
-- Name: users_in_lobby usersinlobby_pkey; Type: CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.users_in_lobby
ADD CONSTRAINT usersinlobby_pkey PRIMARY KEY (lobby_id, login);
--
-- TOC entry 99601 (class 2606 OID 1217383)
-- Name: cards_in_deck cardsindeck_card_id_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_in_deck
ADD CONSTRAINT cardsindeck_card_id_fkey FOREIGN KEY (card_id) REFERENCES s314500.cards(card_id) ON DELETE RESTRICT;
--
-- TOC entry 99602 (class 2606 OID 1217388)
-- Name: cards_in_deck cardsindeck_lobby_id_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_in_deck
ADD CONSTRAINT cardsindeck_lobby_id_fkey FOREIGN KEY (lobby_id) REFERENCES s314500.lobbies(id) ON DELETE CASCADE;
--
-- TOC entry 99597 (class 2606 OID 1217351)
-- Name: cards_in_hand cardsinhand_card_id_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_in_hand
ADD CONSTRAINT cardsinhand_card_id_fkey FOREIGN KEY (card_id) REFERENCES s314500.cards(card_id) ON DELETE RESTRICT;
--
-- TOC entry 99598 (class 2606 OID 1217356)
-- Name: cards_in_hand cardsinhand_player_id_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_in_hand
ADD CONSTRAINT cardsinhand_player_id_fkey FOREIGN KEY (player_id) REFERENCES s314500.players(id) ON DELETE CASCADE;
--
-- TOC entry 99599 (class 2606 OID 1217368)
-- Name: cards_on_table cardsontable_card_id_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_on_table
ADD CONSTRAINT cardsontable_card_id_fkey FOREIGN KEY (card_id) REFERENCES s314500.cards(card_id) ON DELETE RESTRICT;
--
-- TOC entry 99600 (class 2606 OID 1217373)
-- Name: cards_on_table cardsontable_lobby_id_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.cards_on_table
ADD CONSTRAINT cardsontable_lobby_id_fkey FOREIGN KEY (lobby_id) REFERENCES s314500.lobbies(id) ON DELETE CASCADE;
--
-- TOC entry 99596 (class 2606 OID 1217315)
-- Name: current_turn currentturn_player_id_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.current_turn
ADD CONSTRAINT currentturn_player_id_fkey FOREIGN KEY (player_id) REFERENCES s314500.players(id) ON DELETE CASCADE;
--
-- TOC entry 99592 (class 2606 OID 1217290)
-- Name: players players_lobby_id_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.players
ADD CONSTRAINT players_lobby_id_fkey FOREIGN KEY (lobby_id) REFERENCES s314500.lobbies(id) ON DELETE CASCADE;
--
-- TOC entry 99593 (class 2606 OID 1217285)
-- Name: players players_login_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.players
ADD CONSTRAINT players_login_fkey FOREIGN KEY (login) REFERENCES s314500.users(login) ON DELETE RESTRICT;
--
-- TOC entry 99603 (class 2606 OID 1217399)
-- Name: tokens tokens_login_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.tokens
ADD CONSTRAINT tokens_login_fkey FOREIGN KEY (login) REFERENCES s314500.users(login) ON DELETE CASCADE;
--
-- TOC entry 99594 (class 2606 OID 1217300)
-- Name: users_in_lobby usersinlobby_lobby_id_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.users_in_lobby
ADD CONSTRAINT usersinlobby_lobby_id_fkey FOREIGN KEY (lobby_id) REFERENCES s314500.lobbies(id) ON DELETE CASCADE;
--
-- TOC entry 99595 (class 2606 OID 1217305)
-- Name: users_in_lobby usersinlobby_login_fkey; Type: FK CONSTRAINT; Schema: s314500; Owner: s314500
--
ALTER TABLE ONLY s314500.users_in_lobby
ADD CONSTRAINT usersinlobby_login_fkey FOREIGN KEY (login) REFERENCES s314500.users(login) ON DELETE CASCADE;
-- Completed on 2025-03-18 01:12:42
--
-- PostgreSQL database dump complete
--