From e6e0d7a9a3c8927f495ab61071466431783baf9a Mon Sep 17 00:00:00 2001 From: Conatum Date: Tue, 11 Jan 2022 23:31:42 +0200 Subject: [PATCH] (sessions): Add customisable study tags. --- bot/modules/study/tracking/__init__.py | 1 + bot/modules/study/tracking/data.py | 1 + data/migration/v7-v8/migration.sql | 49 ++++++++++++++++++++++++++ data/schema.sql | 8 +++-- 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/bot/modules/study/tracking/__init__.py b/bot/modules/study/tracking/__init__.py index ba8de231..c52b4662 100644 --- a/bot/modules/study/tracking/__init__.py +++ b/bot/modules/study/tracking/__init__.py @@ -1,3 +1,4 @@ from . import data from . import settings from . import session_tracker +from . import commands diff --git a/bot/modules/study/tracking/data.py b/bot/modules/study/tracking/data.py index d9dcae38..b3cb8dc7 100644 --- a/bot/modules/study/tracking/data.py +++ b/bot/modules/study/tracking/data.py @@ -20,6 +20,7 @@ session_history = Table('session_history') current_sessions = RowTable( 'current_sessions', ('guildid', 'userid', 'channelid', 'channel_type', + 'rating', 'tag', 'start_time', 'live_duration', 'live_start', 'stream_duration', 'stream_start', diff --git a/data/migration/v7-v8/migration.sql b/data/migration/v7-v8/migration.sql index d93850e8..849d9a0c 100644 --- a/data/migration/v7-v8/migration.sql +++ b/data/migration/v7-v8/migration.sql @@ -15,4 +15,53 @@ create TABLE timers( CREATE INDEX timers_guilds ON timers (guildid); -- }}} +-- Session tags {{{ +ALTER TABLE current_sessions + ADD COLUMN rating INTEGER, + ADD COLUMN tag TEXT; + +ALTER TABLE session_history + ADD COLUMN rating INTEGER, + ADD COLUMN tag TEXT; + +DROP FUNCTION close_study_session; + +CREATE FUNCTION close_study_session(_guildid BIGINT, _userid BIGINT) + RETURNS SETOF members +AS $$ + BEGIN + RETURN QUERY + WITH + current_sesh AS ( + DELETE FROM current_sessions + WHERE guildid=_guildid AND userid=_userid + RETURNING + *, + EXTRACT(EPOCH FROM (NOW() - start_time)) AS total_duration, + stream_duration + COALESCE(EXTRACT(EPOCH FROM (NOW() - stream_start)), 0) AS total_stream_duration, + video_duration + COALESCE(EXTRACT(EPOCH FROM (NOW() - video_start)), 0) AS total_video_duration, + live_duration + COALESCE(EXTRACT(EPOCH FROM (NOW() - live_start)), 0) AS total_live_duration + ), saved_sesh AS ( + INSERT INTO session_history ( + guildid, userid, channelid, rating, tag, channel_type, start_time, + duration, stream_duration, video_duration, live_duration, + coins_earned + ) SELECT + guildid, userid, channelid, rating, tag, channel_type, start_time, + total_duration, total_stream_duration, total_video_duration, total_live_duration, + (total_duration * hourly_coins + live_duration * hourly_live_coins) / 3600 + FROM current_sesh + RETURNING * + ) + UPDATE members + SET + tracked_time=(tracked_time + saved_sesh.duration), + coins=(coins + saved_sesh.coins_earned) + FROM saved_sesh + WHERE members.guildid=saved_sesh.guildid AND members.userid=saved_sesh.userid + RETURNING members.*; + END; +$$ LANGUAGE PLPGSQL; +-- }}} + INSERT INTO VersionHistory (version, author) VALUES (8, 'v7-v8 migration'); diff --git a/data/schema.sql b/data/schema.sql index b82e8cc5..627525fe 100644 --- a/data/schema.sql +++ b/data/schema.sql @@ -427,6 +427,8 @@ CREATE TABLE session_history( userid BIGINT NOT NULL, channelid BIGINT, channel_type SessionChannelType, + rating INTEGER, + tag TEXT, start_time TIMESTAMPTZ NOT NULL, duration INTEGER NOT NULL, coins_earned INTEGER NOT NULL, @@ -442,6 +444,8 @@ CREATE TABLE current_sessions( userid BIGINT NOT NULL, channelid BIGINT, channel_type SessionChannelType, + rating INTEGER, + tag TEXT, start_time TIMESTAMPTZ DEFAULT now(), live_duration INTEGER DEFAULT 0, live_start TIMESTAMPTZ, @@ -510,11 +514,11 @@ AS $$ live_duration + COALESCE(EXTRACT(EPOCH FROM (NOW() - live_start)), 0) AS total_live_duration ), saved_sesh AS ( INSERT INTO session_history ( - guildid, userid, channelid, channel_type, start_time, + guildid, userid, channelid, rating, tag, channel_type, start_time, duration, stream_duration, video_duration, live_duration, coins_earned ) SELECT - guildid, userid, channelid, channel_type, start_time, + guildid, userid, channelid, rating, tag, channel_type, start_time, total_duration, total_stream_duration, total_video_duration, total_live_duration, (total_duration * hourly_coins + live_duration * hourly_live_coins) / 3600 FROM current_sesh