diff --git a/VERSION b/VERSION index 6016e8a..8ac28bf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.6.0 +4.6.1 diff --git a/play-life-backend/main.go b/play-life-backend/main.go index ead377e..6dbd7ac 100644 --- a/play-life-backend/main.go +++ b/play-life-backend/main.go @@ -4591,7 +4591,7 @@ func (a *App) setupWeeklyGoals() error { EXTRACT(WEEK FROM CURRENT_DATE)::INTEGER AS c_week ), goal_metrics AS ( - -- Считаем медиану на основе данных за 3 месяца (12 недель), исключая текущую неделю + -- Считаем медиану на основе данных за последние 4 недели, исключая текущую неделю SELECT project_id, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY normalized_total_score) AS median_score @@ -4611,7 +4611,7 @@ func (a *App) setupWeeklyGoals() error { OR (report_year = EXTRACT(ISOYEAR FROM CURRENT_DATE)::INTEGER AND report_week < EXTRACT(WEEK FROM CURRENT_DATE)::INTEGER) ) sub - WHERE rn <= 12 -- Берем историю за последние 12 недель (3 месяца), исключая текущую неделю + WHERE rn <= 4 -- Берем историю за последние 4 недели, исключая текущую неделю GROUP BY project_id ) INSERT INTO weekly_goals ( diff --git a/play-life-backend/migrations/000008_change_median_to_4_weeks.down.sql b/play-life-backend/migrations/000008_change_median_to_4_weeks.down.sql new file mode 100644 index 0000000..2dbf843 --- /dev/null +++ b/play-life-backend/migrations/000008_change_median_to_4_weeks.down.sql @@ -0,0 +1,34 @@ +-- Migration: Revert median calculation back to 12 weeks +-- Date: 2026-02-02 +-- +-- This migration reverts projects_median_mv back to using 12 weeks. + +DROP MATERIALIZED VIEW IF EXISTS projects_median_mv; + +CREATE MATERIALIZED VIEW projects_median_mv AS +SELECT + p.id AS project_id, + p.user_id, + PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY normalized_total_score) AS median_score +FROM ( + SELECT + project_id, + normalized_total_score, + report_year, + report_week, + ROW_NUMBER() OVER (PARTITION BY project_id ORDER BY report_year DESC, report_week DESC) as rn + FROM weekly_report_mv + WHERE + (report_year < EXTRACT(ISOYEAR FROM CURRENT_DATE)::INTEGER) + OR (report_year = EXTRACT(ISOYEAR FROM CURRENT_DATE)::INTEGER + AND report_week < EXTRACT(WEEK FROM CURRENT_DATE)::INTEGER) +) sub +JOIN projects p ON p.id = sub.project_id +WHERE rn <= 12 AND p.deleted = FALSE +GROUP BY p.id, p.user_id +WITH DATA; + +CREATE INDEX idx_projects_median_mv_project_id ON projects_median_mv(project_id); +CREATE INDEX idx_projects_median_mv_user_id ON projects_median_mv(user_id); + +COMMENT ON MATERIALIZED VIEW projects_median_mv IS 'Materialized view calculating median score for each project based on last 12 weeks of historical data. Includes user_id for multi-tenant support.'; diff --git a/play-life-backend/migrations/000008_change_median_to_4_weeks.up.sql b/play-life-backend/migrations/000008_change_median_to_4_weeks.up.sql new file mode 100644 index 0000000..90dd770 --- /dev/null +++ b/play-life-backend/migrations/000008_change_median_to_4_weeks.up.sql @@ -0,0 +1,35 @@ +-- Migration: Change median calculation from 12 weeks to 4 weeks +-- Date: 2026-02-02 +-- +-- This migration updates projects_median_mv to calculate median based on +-- the last 4 weeks instead of 12 weeks. + +DROP MATERIALIZED VIEW IF EXISTS projects_median_mv; + +CREATE MATERIALIZED VIEW projects_median_mv AS +SELECT + p.id AS project_id, + p.user_id, + PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY normalized_total_score) AS median_score +FROM ( + SELECT + project_id, + normalized_total_score, + report_year, + report_week, + ROW_NUMBER() OVER (PARTITION BY project_id ORDER BY report_year DESC, report_week DESC) as rn + FROM weekly_report_mv + WHERE + (report_year < EXTRACT(ISOYEAR FROM CURRENT_DATE)::INTEGER) + OR (report_year = EXTRACT(ISOYEAR FROM CURRENT_DATE)::INTEGER + AND report_week < EXTRACT(WEEK FROM CURRENT_DATE)::INTEGER) +) sub +JOIN projects p ON p.id = sub.project_id +WHERE rn <= 4 AND p.deleted = FALSE +GROUP BY p.id, p.user_id +WITH DATA; + +CREATE INDEX idx_projects_median_mv_project_id ON projects_median_mv(project_id); +CREATE INDEX idx_projects_median_mv_user_id ON projects_median_mv(user_id); + +COMMENT ON MATERIALIZED VIEW projects_median_mv IS 'Materialized view calculating median score for each project based on last 4 weeks of historical data. Includes user_id for multi-tenant support.'; diff --git a/play-life-web/package.json b/play-life-web/package.json index 6f9d7a6..1a7e562 100644 --- a/play-life-web/package.json +++ b/play-life-web/package.json @@ -1,6 +1,6 @@ { "name": "play-life-web", - "version": "4.6.0", + "version": "4.6.1", "type": "module", "scripts": { "dev": "vite",