Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
e3b2d57
(migrations) modifications to old tables & functions
jasonyess Oct 1, 2025
2be11eb
(migrations) updated time machine to consider level rating statuses
jasonyess Oct 1, 2025
28123b4
updated demon structures + modifications to related queries
jasonyess Oct 1, 2025
63e572e
list enum
jasonyess Oct 1, 2025
fe541bf
updated stats viewer queries & logic to account for different lists
jasonyess Oct 1, 2025
7404263
updated demon pages & page api
jasonyess Oct 1, 2025
84e3397
api & frontend impl for updated demon audit functionality
jasonyess Oct 1, 2025
6ec8791
updated account pages
jasonyess Oct 1, 2025
5974bfd
updated static resources
jasonyess Oct 1, 2025
95cf346
updated css so rated+ pages' primary colors are different
jasonyess Oct 1, 2025
bf54e6b
updated -example page config
jasonyess Oct 1, 2025
f2c587a
other changes
jasonyess Oct 1, 2025
9bff3e7
Merge branch 'stadust:master' into rated-plus
jasonyess Oct 1, 2025
e6bda5b
russian translations
jasonyess Oct 14, 2025
02b0f3f
remove mention of rate status in main list description
jasonyess Oct 15, 2025
13e4e73
remove unnecessary trait impls
jasonyess Oct 15, 2025
097a0eb
custom list serialization impl because i think i need one
jasonyess Oct 15, 2025
a57294d
rename `unrated_x` fields to `ratedplus_x`
jasonyess Oct 24, 2025
b611fd9
fix faulty condition in rated+ time machine
jasonyess Oct 24, 2025
dff97d1
assign rate statuses for test demons
jasonyess Nov 7, 2025
b709603
core theme system
jasonyess Feb 7, 2026
42f7d54
theme switching for gsi elements
jasonyess Feb 7, 2026
f963eb6
theme switching for discord widget
jasonyess Feb 7, 2026
91013aa
move map to main document
jasonyess Feb 7, 2026
18e5418
modify styles
jasonyess Feb 7, 2026
730a6b5
proc macro for handlers requiring theme scope
jasonyess Feb 7, 2026
01d4ff7
Revert "move map to main document"
jasonyess Mar 25, 2026
0341eb5
theme toggling for world map
jasonyess Mar 25, 2026
fb806bc
Merge branch 'dark-mode-new' into rated-plus
jasonyess May 26, 2026
b4ab1ee
various fixes
jasonyess Jun 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

198 changes: 198 additions & 0 deletions migrations/20250722002114_unrated_levels.down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
DROP VIEW score_giving;

CREATE VIEW score_giving AS
SELECT records.progress, demons.position, demons.requirement, records.player
FROM records
INNER JOIN demons
ON demons.id = records.demon
WHERE records.status_ = 'APPROVED' AND (demons.position <= 75 OR records.progress = 100)

UNION

SELECT 100, demons.position, demons.requirement, demons.verifier
FROM demons;

DROP FUNCTION score_of_player(BOOLEAN, INTEGER);
CREATE OR REPLACE FUNCTION score_of_player(player_id INTEGER) RETURNS DOUBLE PRECISION AS $$
SELECT SUM(record_score(progress, position, 150, requirement))
FROM score_giving
WHERE player = player_id
$$ LANGUAGE SQL;

CREATE OR REPLACE FUNCTION recompute_player_scores() RETURNS void AS $$
UPDATE players
SET score = coalesce(q.score, 0)
FROM players p
LEFT OUTER JOIN (
SELECT player, SUM(record_score(progress, position, 150, requirement)) as score
FROM score_giving
GROUP BY player
) q
ON q.player = p.id
WHERE players.id = p.id;
$$ LANGUAGE SQL;

DROP FUNCTION score_of_nation(BOOLEAN, VARCHAR(2));
CREATE OR REPLACE FUNCTION score_of_nation(iso_country_code VARCHAR(2)) RETURNS DOUBLE PRECISION AS $$
SELECT SUM(record_score(q.progress, q.position, 150, q.requirement))
FROM (
SELECT DISTINCT ON (position) * from score_giving
INNER JOIN players
ON players.id=player
WHERE players.nationality = iso_country_code
ORDER BY position, progress DESC
) q
$$ LANGUAGE SQL;

CREATE OR REPLACE FUNCTION recompute_nation_scores() RETURNS void AS $$
UPDATE nationalities
SET score = COALESCE(p.sum, 0)
FROM nationalities n
LEFT OUTER JOIN (
SELECT nationality, SUM(record_score(q.progress, q.position, 150, q.requirement))
FROM (
SELECT DISTINCT ON (position, nationality) * from score_giving
INNER JOIN players
ON players.id=player
WHERE players.nationality IS NOT NULL
ORDER BY players.nationality, position, progress DESC
) q
GROUP BY nationality
) p
ON p.nationality = n.iso_country_code
WHERE n.iso_country_code = nationalities.iso_country_code
$$ LANGUAGE SQL;

DROP FUNCTION score_of_subdivision(BOOLEAN, VARCHAR(2), VARCHAR(3));
CREATE OR REPLACE FUNCTION score_of_subdivision(iso_country_code VARCHAR(2), iso_code VARCHAR(3)) RETURNS DOUBLE PRECISION AS $$
SELECT SUM(record_score(q.progress, q.position, 150, q.requirement))
FROM (
SELECT DISTINCT ON (position) * from score_giving
INNER JOIN players
ON players.id=player
WHERE players.nationality = iso_country_code
AND players.subdivision = iso_code
ORDER BY position, progress DESC
) q
$$ LANGUAGE SQL;

CREATE OR REPLACE FUNCTION recompute_subdivision_scores() RETURNS void AS $$
UPDATE subdivisions
SET score = COALESCE(p.sum, 0)
FROM subdivisions s
LEFT OUTER JOIN (
SELECT nationality, subdivision, SUM(record_score(q.progress, q.position, 150, q.requirement))
FROM (
SELECT DISTINCT ON (position, nationality, subdivision) * from score_giving
INNER JOIN players
ON players.id=player
WHERE players.nationality IS NOT NULL
AND players.subdivision IS NOT NULL
ORDER BY players.nationality, players.subdivision, position, progress DESC
) q
GROUP BY nationality, subdivision
) p
ON s.nation = p.nationality AND s.iso_code = p.subdivision
WHERE s.nation = subdivisions.nation
AND s.iso_code = subdivisions.iso_code
$$ LANGUAGE SQL;

DROP VIEW ranked_players;
DROP MATERIALIZED VIEW player_ranks;

CREATE MATERIALIZED VIEW player_ranks AS
SELECT
RANK() OVER (ORDER BY score DESC) as rank,
id
FROM players
WHERE
score != 0 AND NOT banned;

CREATE UNIQUE INDEX player_ranks_id_idx ON player_ranks(id);

CREATE VIEW ranked_players AS
SELECT
ROW_NUMBER() OVER(ORDER BY rank, id) AS index,
rank,
id, name, players.score, subdivision,
nationalities.iso_country_code,
nationalities.nation,
nationalities.continent
FROM players
LEFT OUTER JOIN nationalities
ON players.nationality = nationalities.iso_country_code
NATURAL JOIN player_ranks;

DROP VIEW ranked_nations;

CREATE VIEW ranked_nations AS
SELECT
ROW_NUMBER() OVER(ORDER BY score DESC, iso_country_code) AS index,
RANK() OVER(ORDER BY score DESC) AS rank,
score,
iso_country_code,
nation,
continent
FROM nationalities
WHERE score > 0.0;

CREATE OR REPLACE FUNCTION audit_demon_modification() RETURNS trigger AS $demon_modification_trigger$
DECLARE
name_change CITEXT;
position_change SMALLINT;
requirement_change SMALLINT;
video_change VARCHAR(200);
thumbnail_change TEXT;
verifier_change INT;
publisher_change INT;
BEGIN
IF (OLD.name <> NEW.name) THEN
name_change = OLD.name;
END IF;

IF (OLD.position <> NEW.position) THEN
position_change = OLD.position;
END IF;

IF (OLD.requirement <> NEW.requirement) THEN
requirement_change = OLD.requirement;
END IF;

IF (OLD.video <> NEW.video) THEN
video_change = OLD.video;
END IF;

IF (OLD.thumbnail <> NEW.thumbnail) THEN
thumbnail_change = OLD.thumbnail;
END IF;

IF (OLD.verifier <> NEW.verifier) THEN
verifier_change = OLD.verifier;
END IF;

IF (OLD.publisher <> NEW.publisher) THEN
publisher_change = OLD.publisher;
END IF;

INSERT INTO demon_modifications (userid, name, position, requirement, video, verifier, publisher, thumbnail, id)
(SELECT id, name_change, position_change, requirement_change, video_change, verifier_change, publisher_change, thumbnail_change, NEW.id
FROM active_user LIMIT 1);

RETURN NEW;
END;
$demon_modification_trigger$ LANGUAGE plpgsql;

SELECT recompute_player_scores();
SELECT recompute_nation_scores();
SELECT recompute_subdivision_scores();

ALTER TABLE demons DROP COLUMN rated_position;
DROP FUNCTION recompute_rated_positions();

ALTER TABLE demons DROP COLUMN rated;
ALTER TABLE players DROP COLUMN ratedplus_score;
ALTER TABLE nationalities DROP COLUMN ratedplus_score;
ALTER TABLE subdivisions DROP COLUMN ratedplus_score;

ALTER TABLE demon_modifications DROP COLUMN rated;
ALTER TABLE demon_modifications DROP COLUMN rated_position;
Loading