Updating exports.down for migrations and css change

This commit is contained in:
Sanidhya Singh
2025-05-06 14:38:10 +05:30
parent 579a7a3f8b
commit 07fbfdca71
5 changed files with 134 additions and 121 deletions

View File

@@ -62,60 +62,60 @@ ALTER FUNCTION public.fs_watch_stats_over_time(integer)
};
exports.down = async function (knex) {
// try {
// await knex.schema.raw(`
// DROP FUNCTION IF EXISTS public.fs_watch_stats_over_time(integer);
try {
await knex.schema.raw(`
DROP FUNCTION IF EXISTS public.fs_watch_stats_over_time(integer);
// CREATE OR REPLACE FUNCTION fs_watch_stats_over_time(
// days integer
// )
// RETURNS TABLE(
// "Date" date,
// "Count" bigint,
// "Library" text
// )
// LANGUAGE 'plpgsql'
// COST 100
// VOLATILE PARALLEL UNSAFE
// ROWS 1000
CREATE OR REPLACE FUNCTION fs_watch_stats_over_time(
days integer
)
RETURNS TABLE(
"Date" date,
"Count" bigint,
"Library" text
)
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
ROWS 1000
// AS $BODY$
// BEGIN
// RETURN QUERY
// SELECT
// dates."Date",
// COALESCE(counts."Count", 0) AS "Count",
// l."Name" as "Library"
// FROM
// (SELECT generate_series(
// DATE_TRUNC('day', NOW() - CAST(days || ' days' as INTERVAL)),
// DATE_TRUNC('day', NOW()),
// '1 day')::DATE AS "Date"
// ) dates
// CROSS JOIN jf_libraries l
// LEFT JOIN
// (SELECT
// DATE_TRUNC('day', a."ActivityDateInserted")::DATE AS "Date",
// COUNT(*) AS "Count",
// l."Name" as "Library"
// FROM
// jf_playback_activity a
// JOIN jf_library_items i ON i."Id" = a."NowPlayingItemId"
// JOIN jf_libraries l ON i."ParentId" = l."Id"
// WHERE
// a."ActivityDateInserted" BETWEEN NOW() - CAST(days || ' days' as INTERVAL) AND NOW()
// GROUP BY
// l."Name", DATE_TRUNC('day', a."ActivityDateInserted")
// ) counts
// ON counts."Date" = dates."Date" AND counts."Library" = l."Name"
// ORDER BY
// "Date", "Library";
// END;
// $BODY$;
AS $BODY$
BEGIN
RETURN QUERY
SELECT
dates."Date",
COALESCE(counts."Count", 0) AS "Count",
l."Name" as "Library"
FROM
(SELECT generate_series(
DATE_TRUNC('day', NOW() - CAST(days || ' days' as INTERVAL)),
DATE_TRUNC('day', NOW()),
'1 day')::DATE AS "Date"
) dates
CROSS JOIN jf_libraries l
LEFT JOIN
(SELECT
DATE_TRUNC('day', a."ActivityDateInserted")::DATE AS "Date",
COUNT(*) AS "Count",
l."Name" as "Library"
FROM
jf_playback_activity a
JOIN jf_library_items i ON i."Id" = a."NowPlayingItemId"
JOIN jf_libraries l ON i."ParentId" = l."Id"
WHERE
a."ActivityDateInserted" BETWEEN NOW() - CAST(days || ' days' as INTERVAL) AND NOW()
GROUP BY
l."Name", DATE_TRUNC('day', a."ActivityDateInserted")
) counts
ON counts."Date" = dates."Date" AND counts."Library" = l."Name"
ORDER BY
"Date", "Library";
END;
$BODY$;
// ALTER FUNCTION fs_watch_stats_over_time(integer)
// OWNER TO "${process.env.POSTGRES_ROLE}";`);
// } catch (error) {
// console.error(error);
// }
ALTER FUNCTION fs_watch_stats_over_time(integer)
OWNER TO "${process.env.POSTGRES_ROLE}";`);
} catch (error) {
console.error(error);
}
};

View File

@@ -72,70 +72,72 @@ ALTER FUNCTION public.fs_watch_stats_popular_days_of_week(integer)
};
exports.down = async function (knex) {
// try {
// await knex.schema.raw(`
// DROP FUNCTION IF EXISTS public.fs_watch_stats_popular_days_of_week(integer);
try {
await knex.schema.raw(`
DROP FUNCTION IF EXISTS public.fs_watch_stats_popular_days_of_week(integer);
// CREATE OR REPLACE FUNCTION public.fs_watch_stats_popular_days_of_week(
// days integer)
// RETURNS TABLE("Day" text, "Count" bigint, "Library" text)
// LANGUAGE 'plpgsql'
// COST 100
// VOLATILE PARALLEL UNSAFE
// ROWS 1000
CREATE OR REPLACE FUNCTION public.fs_watch_stats_popular_days_of_week(
days integer)
RETURNS TABLE("Day" text, "Count" bigint, "Library" text)
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
ROWS 1000
// AS $BODY$
// BEGIN
// RETURN QUERY
// WITH library_days AS (
// SELECT
// l."Name" AS "Library",
// d.day_of_week,
// d.day_name
// FROM
// jf_libraries l,
// (SELECT 0 AS "day_of_week", 'Sunday' AS "day_name" UNION ALL
// SELECT 1 AS "day_of_week", 'Monday' AS "day_name" UNION ALL
// SELECT 2 AS "day_of_week", 'Tuesday' AS "day_name" UNION ALL
// SELECT 3 AS "day_of_week", 'Wednesday' AS "day_name" UNION ALL
// SELECT 4 AS "day_of_week", 'Thursday' AS "day_name" UNION ALL
// SELECT 5 AS "day_of_week", 'Friday' AS "day_name" UNION ALL
// SELECT 6 AS "day_of_week", 'Saturday' AS "day_name"
// ) d
// )
// SELECT
// library_days.day_name AS "Day",
// COALESCE(SUM(counts."Count"), 0)::bigint AS "Count",
// library_days."Library" AS "Library"
// FROM
// library_days
// LEFT JOIN
// (SELECT
// DATE_TRUNC('day', a."ActivityDateInserted")::DATE AS "Date",
// COUNT(*) AS "Count",
// EXTRACT(DOW FROM a."ActivityDateInserted") AS "DOW",
// l."Name" AS "Library"
// FROM
// jf_playback_activity a
// JOIN jf_library_items i ON i."Id" = a."NowPlayingItemId"
// JOIN jf_libraries l ON i."ParentId" = l."Id"
// WHERE
// a."ActivityDateInserted" BETWEEN NOW() - CAST(days || ' days' as INTERVAL) AND NOW()
// GROUP BY
// l."Name", EXTRACT(DOW FROM a."ActivityDateInserted"), DATE_TRUNC('day', a."ActivityDateInserted")
// ) counts
// ON counts."DOW" = library_days.day_of_week AND counts."Library" = library_days."Library"
// GROUP BY
// library_days.day_name, library_days.day_of_week, library_days."Library"
// ORDER BY
// library_days.day_of_week, library_days."Library";
// END;
AS $BODY$
BEGIN
RETURN QUERY
WITH library_days AS (
SELECT
l."Name" AS "Library",
d.day_of_week,
d.day_name
FROM
jf_libraries l,
(SELECT 0 AS "day_of_week", 'Sunday' AS "day_name" UNION ALL
SELECT 1 AS "day_of_week", 'Monday' AS "day_name" UNION ALL
SELECT 2 AS "day_of_week", 'Tuesday' AS "day_name" UNION ALL
SELECT 3 AS "day_of_week", 'Wednesday' AS "day_name" UNION ALL
SELECT 4 AS "day_of_week", 'Thursday' AS "day_name" UNION ALL
SELECT 5 AS "day_of_week", 'Friday' AS "day_name" UNION ALL
SELECT 6 AS "day_of_week", 'Saturday' AS "day_name"
) d
where l.archived=false
)
SELECT
library_days.day_name AS "Day",
COALESCE(SUM(counts."Count"), 0)::bigint AS "Count",
library_days."Library" AS "Library"
FROM
library_days
LEFT JOIN
(SELECT
DATE_TRUNC('day', a."ActivityDateInserted")::DATE AS "Date",
COUNT(*) AS "Count",
EXTRACT(DOW FROM a."ActivityDateInserted") AS "DOW",
l."Name" AS "Library"
FROM
jf_playback_activity a
JOIN jf_library_items i ON i."Id" = a."NowPlayingItemId"
JOIN jf_libraries l ON i."ParentId" = l."Id" and l.archived=false
WHERE
a."ActivityDateInserted" BETWEEN NOW() - CAST(days || ' days' as INTERVAL) AND NOW()
GROUP BY
l."Name", EXTRACT(DOW FROM a."ActivityDateInserted"), DATE_TRUNC('day', a."ActivityDateInserted")
) counts
ON counts."DOW" = library_days.day_of_week AND counts."Library" = library_days."Library"
GROUP BY
library_days.day_name, library_days.day_of_week, library_days."Library"
ORDER BY
library_days.day_of_week, library_days."Library";
END;
// $BODY$;
// ALTER FUNCTION fs_watch_stats_popular_days_of_week(integer)
// OWNER TO "${process.env.POSTGRES_ROLE}";`);
// } catch (error) {
// console.error(error);
// }
$BODY$;
ALTER FUNCTION public.fs_watch_stats_popular_days_of_week(integer)
OWNER TO "${process.env.POSTGRES_ROLE}";
`);
} catch (error) {
console.error(error);
}
};

View File

@@ -96,7 +96,8 @@ AS $BODY$
"ActivityDateInserted" BETWEEN NOW() - CAST(days || ' days' AS INTERVAL) AND NOW()
) a ON a."NowPlayingItemId" = i."Id" AND a."Hour"::integer = h."Hour"
WHERE
l."Id" IN (SELECT "Id" FROM jf_libraries)
l.archived=false
and l."Id" IN (SELECT "Id" FROM jf_libraries)
GROUP BY
h."Hour",
l."Name"
@@ -106,9 +107,10 @@ AS $BODY$
END;
$BODY$;
ALTER FUNCTION fs_watch_stats_popular_hour_of_day(integer)
OWNER TO "${process.env.POSTGRES_ROLE}";`);
ALTER FUNCTION public.fs_watch_stats_popular_hour_of_day(integer)
OWNER TO "${process.env.POSTGRES_ROLE}";
`);
} catch (error) {
console.error(error);
}

View File

@@ -49,12 +49,19 @@
.stats-tab-nav {
background-color: var(--secondary-background-color);
display: flex;
border-radius: 8px;
align-self: flex-end;
}
.nav-item {
display: flex;
justify-content: center;
}
/* .tab-content {
display: none;
} */
.chart-canvas {
width: 100%;
height: 400px;

View File

@@ -53,6 +53,7 @@ function Statistics() {
</h1>
<div className="stats-tab-nav">
<Tabs
defaultActiveKey={activeTab}
activeKey={activeTab}
onSelect={setTab}
variant="pills"
@@ -62,6 +63,7 @@ function Statistics() {
className="bg-transparent"
title={<Trans i18nKey="STAT_PAGE.COUNT_VIEW" />}
/>
<Tab
eventKey="tabDuration"
className="bg-transparent"