Changes between Version 2 and Version 3 of AdvancedDatabaseDevelopment


Ignore:
Timestamp:
05/11/26 13:05:39 (2 weeks ago)
Author:
233062
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedDatabaseDevelopment

    v2 v3  
    7676==== Функции / Stored Procedures ====
    7777
    78 Функција за пресметување на дневно завршување за еден корисник и датум. Вметнува ред во daily_completions (доколку не постои), ги поврзува завршените задачи и го ресетира нивниот статус.
     78Функција за пресметување на дневно завршување за еден корисник и датум. Вметнува ред во daily_completion (доколку не постои), ги поврзува завршените задачи и го ресетира нивниот статус.
    7979{{{
    8080CREATE OR REPLACE FUNCTION trekr.fn_compute_daily_completion(user_id bigint, day date)
     
    103103    END IF;
    104104
     105    -- FIX: table name daily_completion (not daily_completions)
    105106    SELECT dc.daily_completion_id, dc.procent INTO dc_id, pct
    106     FROM trekr.daily_completions dc
     107    FROM trekr.daily_completion dc
    107108    WHERE dc.user_id = user_id AND dc.date = day
    108109    LIMIT 1;
     
    113114    END IF;
    114115
    115     SELECT COUNT(*) INTO total_count FROM trekr.tasks t WHERE t.discipline_user_id = (
    116         SELECT du.discipline_user_id FROM trekr.discipline_users du WHERE du.user_id = user_id
    117     );
    118 
    119     SELECT COUNT(*) INTO finished_count FROM trekr.tasks t WHERE t.discipline_user_id = (
    120         SELECT du.discipline_user_id FROM trekr.discipline_users du WHERE du.user_id = user_id
    121     ) AND t.finished = true;
     116    -- FIX: discipline_users has no surrogate discipline_user_id; use user_id directly
     117    -- FIX: column is is_finished (not finished)
     118    SELECT COUNT(*) INTO total_count
     119    FROM trekr.tasks t
     120    WHERE t.discipline_user_id = user_id;
     121
     122    SELECT COUNT(*) INTO finished_count
     123    FROM trekr.tasks t
     124    WHERE t.discipline_user_id = user_id
     125      AND t.is_finished = true;
    122126
    123127    IF total_count <= 0 THEN
     
    127131    END IF;
    128132
    129     INSERT INTO trekr.daily_completions (user_id, date, procent)
     133    -- FIX: table name daily_completion (not daily_completions)
     134    INSERT INTO trekr.daily_completion (user_id, date, procent)
    130135    VALUES (user_id, day, pct)
    131136    RETURNING daily_completion_id INTO dc_id;
    132137
     138    -- FIX: table name task_daily_completion (not task_daily_completions)
     139    -- FIX: column is is_finished (not finished)
     140    -- FIX: use user_id directly instead of subquery for discipline_user_id
    133141    FOR finished_tasks IN
    134142        SELECT t.task_id FROM trekr.tasks t
    135         WHERE t.discipline_user_id = (
    136             SELECT du.discipline_user_id FROM trekr.discipline_users du WHERE du.user_id = user_id
    137         ) AND t.finished = true
     143        WHERE t.discipline_user_id = user_id
     144          AND t.is_finished = true
    138145    LOOP
    139         INSERT INTO trekr.task_daily_completions (task_id, daily_completion_id)
     146        INSERT INTO trekr.task_daily_completion (task_id, daily_completion_id)
    140147        VALUES (finished_tasks.task_id, dc_id)
    141148        ON CONFLICT DO NOTHING;
    142149    END LOOP;
    143150
    144     UPDATE trekr.tasks t SET finished = false
    145     WHERE t.discipline_user_id = (
    146         SELECT du.discipline_user_id FROM trekr.discipline_users du WHERE du.user_id = user_id
    147     );
     151    -- FIX: column is is_finished (not finished)
     152    -- FIX: use user_id directly instead of subquery for discipline_user_id
     153    UPDATE trekr.tasks t SET is_finished = false
     154    WHERE t.discipline_user_id = user_id;
    148155
    149156    RETURN QUERY SELECT true, dc_id, pct;
     
    255262=== Имплементација ===
    256263
    257 ==== Погледи (Views) ==== 
     264==== Погледи (Views) ====
    258265
    259266Поглед за месечен приход по корисник — прикажува вкупен приход по корисник, месец и година.
    260267{{{
     268-- FIX: incomes uses user_id as FK (not finance_user_id)
    261269CREATE OR REPLACE VIEW trekr.vw_finance_monthly_summary AS
    262270SELECT
    263     i.finance_user_id AS user_id,
     271    i.user_id,
    264272    EXTRACT(YEAR FROM i.date)::int AS year,
    265273    EXTRACT(MONTH FROM i.date)::int AS month,
    266274    SUM(i.amount) AS total_income
    267275FROM trekr.incomes i
    268 GROUP BY i.finance_user_id, EXTRACT(YEAR FROM i.date), EXTRACT(MONTH FROM i.date);
     276GROUP BY i.user_id, EXTRACT(YEAR FROM i.date), EXTRACT(MONTH FROM i.date);
    269277}}}
    270278
    271279Поглед за вкупниот приход на секој корисник во тековниот месец.
    272280{{{
     281-- FIX: incomes uses user_id as FK (not finance_user_id)
    273282CREATE OR REPLACE VIEW trekr.vw_finance_current_month AS
    274283SELECT
     
    277286FROM trekr.finance_users f
    278287LEFT JOIN trekr.incomes i
    279     ON i.finance_user_id = f.user_id
     288    ON i.user_id = f.user_id
    280289    AND date_trunc('month', i.date) = date_trunc('month', current_date)
    281290GROUP BY f.user_id;