import logging import streamlit as st from queries.connection import connection logger = logging.getLogger(__name__) def get_all_weekly_analytics(end_date:str = 'now'): user_id = int(st.session_state.user_id) try: return connection().query(''' WITH RECURSIVE timeseries(d) AS ( VALUES(date(:end_date, 'weekday 0')) UNION ALL SELECT date(d, '-7 day') as d FROM timeseries WHERE d > date(:end_date, '-30 days') ), weeks AS ( SELECT strftime('%W',d) as w FROM timeseries ), stats AS ( SELECT strftime('%W', timestamp) as w, counter_id, sum(increment) as count FROM entries WHERE user_id = :user_id group by counter_id, strftime('%W', timestamp) ) select s.w as week, case when counter_id is null then json_object() else json_group_object(name, count) end as counters FROM weeks s left outer join stats t on s.w = t.w left join counters c on t.counter_id = c.id GROUP by s.w ''', params={"end_date": end_date, "user_id": user_id}) except Exception as e: logger.error(e) return None def get_weekly_analytics(counter_id:int, end_date:str = 'now'): user_id = int(st.session_state.user_id) try: return connection().query(''' WITH RECURSIVE timeseries(d) AS ( VALUES(date(:end_date, 'weekday 0')) UNION ALL SELECT date(d, '-7 day') FROM timeseries WHERE d > date(:end_date, '-30 days') ), weeks AS ( SELECT strftime('%W',d) as w FROM timeseries ), stats AS ( SELECT strftime('%W', timestamp) as w, sum(increment) as count FROM entries where counter_id = :id and user_id = :user_id group by strftime('%W', timestamp) ) SELECT w.w as "week", coalesce(s.count, 0) as count FROM weeks as w LEFT JOIN stats as s on s.w = w.w ''', params={'id': counter_id, "end_date": end_date, "user_id": user_id}) except Exception as e: logger.error(e) return None