parent
1ea919c954
commit
4019823dd7
@ -1 +1 @@
|
||||
export DATABASE_URL="postgresql://ibihf2:ibihf@localhost/ibihf"
|
||||
export DATABASE_URL="postgresql://ibihf:ibihf@localhost/ibihf"
|
||||
|
@ -0,0 +1,10 @@
|
||||
# IBIHF Statistics System
|
||||
|
||||
This is the official system of the International Blind Ice Hockey Federation,
|
||||
and their stats website can be found live at [stats.ibihf.org](https://stats.ibihf.org/).
|
||||
|
||||
## Database Inforamtion
|
||||
|
||||
All migrations can be applied in order of the UNIX timestamp identifier before the name of the migrations.
|
||||
These `*.sql` files are valid for the Postgres database.
|
||||
|
@ -1 +1,2 @@
|
||||
DELETE FROM period_types;
|
||||
DELETE FROM period_types
|
||||
WHERE id BETWEEN 1 AND 13;
|
||||
|
@ -1,2 +1,3 @@
|
||||
-- Add down migration script here
|
||||
DELETE FROM game_players;
|
||||
DELETE FROM game_players
|
||||
WHERE id BETWEEN 1 AND 116;
|
||||
|
@ -1 +1,2 @@
|
||||
DELETE FROM periods;
|
||||
DELETE FROM periods
|
||||
WHERE id BETWEEN 1 AND 12;
|
||||
|
@ -0,0 +1 @@
|
||||
DROP FUNCTION periods(INTEGER);
|
@ -0,0 +1,6 @@
|
||||
CREATE FUNCTION periods(game_id INTEGER)
|
||||
RETURNS INTEGER AS $$
|
||||
BEGIN
|
||||
RETURN (SELECT COUNT(id) FROM periods WHERE periods.game=game_id);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
@ -0,0 +1,2 @@
|
||||
-- Add down migration script here
|
||||
--DROP FUNCTION game_results(INTEGER, INTEGER);
|
@ -0,0 +1,99 @@
|
||||
-- Add up migration script here
|
||||
--CREATE FUNCTION periods(game_id INTEGER)
|
||||
--RETURNS INTEGER AS $$
|
||||
--BEGIN
|
||||
-- RETURN (SELECT COUNT(id) FROM periods WHERE periods.game=game_id);
|
||||
--END;
|
||||
--$$ LANGUAGE plpgsql;
|
||||
--
|
||||
--CREATE FUNCTION goals(game_id INTEGER, team_id INTEGER)
|
||||
--RETURNS INTEGER AS $$
|
||||
--DECLARE
|
||||
-- goals INTEGER;
|
||||
--BEGIN
|
||||
-- IF NOT EXISTS (SELECT * FROM games WHERE games.id=game_id) THEN
|
||||
-- RAISE EXCEPTION 'The game does not exist.';
|
||||
-- END IF;
|
||||
-- IF NOT EXISTS (SELECT * FROM teams WHERE teams.id=team_id) THEN
|
||||
-- RAISE EXCEPTION 'The team does not exist.';
|
||||
-- END IF;
|
||||
-- IF NOT EXISTS (SELECT * FROM games JOIN teams ON teams.id=games.team_home OR teams.id=team_away WHERE games.id=game_id) THEN
|
||||
-- RAISE EXCEPTION 'The team specified did not play this game.';
|
||||
-- END IF;
|
||||
--
|
||||
-- SELECT
|
||||
-- COUNT(shots.id)
|
||||
-- INTO
|
||||
-- goals
|
||||
-- FROM shots
|
||||
-- JOIN game_players
|
||||
-- ON game_players.id=shots.shooter
|
||||
-- JOIN periods
|
||||
-- ON periods.id=shots.period
|
||||
-- WHERE shots.goal=true
|
||||
-- AND game_players.team=team_id
|
||||
-- AND periods.game=game_id;
|
||||
-- -- return 0 if not goals are found given the team and the game
|
||||
-- RETURN COALESCE(goals, 0);
|
||||
--END;
|
||||
--$$ LANGUAGE plpgsql;
|
||||
--
|
||||
--CREATE OR REPLACE FUNCTION calculate_iihf_stats(game_id INT, team_id INT)
|
||||
--RETURNS TABLE (
|
||||
-- reg_win INT,
|
||||
-- reg_loss INT,
|
||||
-- ot_win INT,
|
||||
-- ot_loss INT,
|
||||
-- tie INT,
|
||||
-- game INT,
|
||||
-- team INT
|
||||
--) AS $$
|
||||
--DECLARE
|
||||
-- opponent_team_id INTEGER;
|
||||
--BEGIN
|
||||
-- IF NOT EXISTS (SELECT * FROM games WHERE games.id=game_id) THEN
|
||||
-- RAISE EXCEPTION 'The game does not exist.';
|
||||
-- END IF;
|
||||
-- IF NOT EXISTS (SELECT * FROM teams WHERE teams.id=team_id) THEN
|
||||
-- RAISE EXCEPTION 'The team does not exist.';
|
||||
-- END IF;
|
||||
-- IF NOT EXISTS (SELECT * FROM games JOIN teams ON teams.id=games.team_home OR teams.id=team_away WHERE games.id=game_id) THEN
|
||||
-- RAISE EXCEPTION 'The team specified did not play this game.';
|
||||
-- END IF;
|
||||
--
|
||||
-- SELECT
|
||||
-- teams.id
|
||||
-- INTO
|
||||
-- opponent_team_id
|
||||
-- FROM games
|
||||
-- JOIN teams
|
||||
-- ON (teams.id=games.team_home
|
||||
-- OR teams.id=games.team_away)
|
||||
-- WHERE games.id=game_id
|
||||
-- AND teams.id!=team_id;
|
||||
--
|
||||
-- RETURN QUERY
|
||||
-- SELECT
|
||||
-- (CASE WHEN goals(game_id, team_id) > goals(game_id, opponent_team_id) AND periods(game_id) <= 3 THEN 1 ELSE 0 END) AS reg_win,
|
||||
-- (CASE WHEN goals(game_id, team_id) < goals(game_id, opponent_team_id) AND periods(game_id) <= 3 THEN 1 ELSE 0 END) AS reg_loss,
|
||||
-- (CASE WHEN goals(game_id, team_id) > goals(game_id, opponent_team_id) AND periods(game_id) > 3 THEN 1 ELSE 0 END) AS ot_win,
|
||||
-- (CASE WHEN goals(game_id, team_id) < goals(game_id, opponent_team_id) AND periods(game_id) > 3 THEN 1 ELSE 0 END) AS ot_loss,
|
||||
-- (CASE WHEN goals(game_id, team_id) = goals(game_id, opponent_team_id) THEN 1 ELSE 0 END) AS tie,
|
||||
-- game_id AS game,
|
||||
-- team_id AS team;
|
||||
--END;
|
||||
--$$ LANGUAGE plpgsql;
|
||||
--
|
||||
--CREATE OR REPLACE FUNCTION calculate_iihf_points(game_id INT, team_id INT)
|
||||
--RETURNS INTEGER AS $$
|
||||
--BEGIN
|
||||
-- RETURN (
|
||||
-- SELECT
|
||||
-- (iihs_stats.reg_win * 3) +
|
||||
-- (iihs_stats.reg_loss * 0) +
|
||||
-- (iihs_stats.ot_win * 2) +
|
||||
-- (iihs_stats.ot_loss * 1) +
|
||||
-- (iihs_stats.tie * 2) AS points
|
||||
-- FROM calculate_iihs_stats_stats(game_id, team_id) iihs_stats);
|
||||
--END;
|
||||
--$$ LANGUAGE plpgsql;
|
@ -0,0 +1,2 @@
|
||||
-- Add down migration script here
|
||||
DROP FUNCTION goals(INTEGER, INTEGER);
|
@ -0,0 +1,32 @@
|
||||
-- Add up migration script here
|
||||
CREATE FUNCTION goals(game_id INTEGER, team_id INTEGER)
|
||||
RETURNS INTEGER AS $$
|
||||
DECLARE
|
||||
goals INTEGER;
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT * FROM games WHERE games.id=game_id) THEN
|
||||
RAISE EXCEPTION 'The game does not exist.';
|
||||
END IF;
|
||||
IF NOT EXISTS (SELECT * FROM teams WHERE teams.id=team_id) THEN
|
||||
RAISE EXCEPTION 'The team does not exist.';
|
||||
END IF;
|
||||
IF NOT EXISTS (SELECT * FROM games JOIN teams ON teams.id=games.team_home OR teams.id=team_away WHERE games.id=game_id) THEN
|
||||
RAISE EXCEPTION 'The team specified did not play this game.';
|
||||
END IF;
|
||||
|
||||
SELECT
|
||||
COUNT(shots.id)
|
||||
INTO
|
||||
goals
|
||||
FROM shots
|
||||
JOIN game_players
|
||||
ON game_players.id=shots.shooter
|
||||
JOIN periods
|
||||
ON periods.id=shots.period
|
||||
WHERE shots.goal=true
|
||||
AND game_players.team=team_id
|
||||
AND periods.game=game_id;
|
||||
-- return 0 if not goals are found given the team and the game
|
||||
RETURN COALESCE(goals, 0);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
@ -0,0 +1,2 @@
|
||||
-- Add down migration script here
|
||||
DROP FUNCTION iihf_stats(INTEGER, INTEGER);
|
@ -0,0 +1,46 @@
|
||||
-- Add up migration script here
|
||||
CREATE OR REPLACE FUNCTION iihf_stats(game_id INT, team_id INT)
|
||||
RETURNS TABLE (
|
||||
reg_win INT,
|
||||
reg_loss INT,
|
||||
ot_win INT,
|
||||
ot_loss INT,
|
||||
tie INT,
|
||||
game INT,
|
||||
team INT
|
||||
) AS $$
|
||||
DECLARE
|
||||
opponent_team_id INTEGER;
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT * FROM games WHERE games.id=game_id) THEN
|
||||
RAISE EXCEPTION 'The game does not exist.';
|
||||
END IF;
|
||||
IF NOT EXISTS (SELECT * FROM teams WHERE teams.id=team_id) THEN
|
||||
RAISE EXCEPTION 'The team does not exist.';
|
||||
END IF;
|
||||
IF NOT EXISTS (SELECT * FROM games JOIN teams ON teams.id=games.team_home OR teams.id=team_away WHERE games.id=game_id) THEN
|
||||
RAISE EXCEPTION 'The team specified did not play this game.';
|
||||
END IF;
|
||||
|
||||
SELECT
|
||||
teams.id
|
||||
INTO
|
||||
opponent_team_id
|
||||
FROM games
|
||||
JOIN teams
|
||||
ON (teams.id=games.team_home
|
||||
OR teams.id=games.team_away)
|
||||
WHERE games.id=game_id
|
||||
AND teams.id!=team_id;
|
||||
|
||||
RETURN QUERY
|
||||
SELECT
|
||||
(CASE WHEN goals(game_id, team_id) > goals(game_id, opponent_team_id) AND periods(game_id) <= 3 THEN 1 ELSE 0 END) AS reg_win,
|
||||
(CASE WHEN goals(game_id, team_id) < goals(game_id, opponent_team_id) AND periods(game_id) <= 3 THEN 1 ELSE 0 END) AS reg_loss,
|
||||
(CASE WHEN goals(game_id, team_id) > goals(game_id, opponent_team_id) AND periods(game_id) > 3 THEN 1 ELSE 0 END) AS ot_win,
|
||||
(CASE WHEN goals(game_id, team_id) < goals(game_id, opponent_team_id) AND periods(game_id) > 3 THEN 1 ELSE 0 END) AS ot_loss,
|
||||
(CASE WHEN goals(game_id, team_id) = goals(game_id, opponent_team_id) THEN 1 ELSE 0 END) AS tie,
|
||||
game_id AS game,
|
||||
team_id AS team;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
@ -0,0 +1,2 @@
|
||||
-- Add down migration script here
|
||||
DROP FUNCTION iihf_points(INTEGER, INTEGER);
|
@ -0,0 +1,14 @@
|
||||
-- Add up migration script here
|
||||
CREATE OR REPLACE FUNCTION iihf_points(game_id INT, team_id INT)
|
||||
RETURNS INTEGER AS $$
|
||||
BEGIN
|
||||
RETURN (
|
||||
SELECT
|
||||
(iihs_stats.reg_win * 3) +
|
||||
(iihs_stats.reg_loss * 0) +
|
||||
(iihs_stats.ot_win * 2) +
|
||||
(iihs_stats.ot_loss * 1) +
|
||||
(iihs_stats.tie * 2) AS points
|
||||
FROM calculate_iihs_stats_stats(game_id, team_id) iihs_stats);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
@ -1,6 +1,12 @@
|
||||
{% extends "master.html" %}
|
||||
|
||||
{% block title %}Divisions{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1 id="first-heading">Divisions for the {{ league.name }}</h1>
|
||||
<ul aria-labelledby="first-heading">
|
||||
{% for division in divisions %}
|
||||
<li><a href="/en/division/{{ division.id }}/">{{ division.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
@ -1,6 +1,12 @@
|
||||
{% extends "master.html" %}
|
||||
|
||||
{% block title %}Leagues{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1 id="leagues">{{ heading }}</h1>
|
||||
<ol aria-labelledby="leagues">
|
||||
{% for league in leagues %}
|
||||
<li><a href="/{{ lang }}/league/{{ league.id }}/">{{ league.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
{% endblock %}
|
||||
|
@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<!-- TODO: auto-generate page language. -->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- TODO: auto-generate IBIHF string to some other languages -->
|
||||
<title>{% block title %}{% endblock %} | IBIHF Stats</title>
|
||||
{% block head %}{% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
<header></header>
|
||||
<main>
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
<footer></footer>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,11 @@
|
||||
{
|
||||
"phrases": {
|
||||
"urlGame": "game",
|
||||
"urlDivision": "division",
|
||||
"urlLeague": "league",
|
||||
"ibihfLeagues": "IBIHF Leagues",
|
||||
"goals": "Goals",
|
||||
"assists": "Assists",
|
||||
"period": "Period"
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
{
|
||||
"phrases": {
|
||||
"urlGame": "match",
|
||||
"urlDivision": "division",
|
||||
"urlLeague": "league",
|
||||
"ibihfLeagues": "Leagues de FIDHS",
|
||||
"goals": "But",
|
||||
"assists": "Assisté",
|
||||
"period": "Période"
|
||||
}
|
||||
}
|
Loading…
Reference in new issue