Changes between Version 1 and Version 2 of UseCase005


Ignore:
Timestamp:
09/15/26 11:38:47 (2 weeks ago)
Author:
233149
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCase005

    v1 v2  
    1 == UseCase005 - Приказ на предмети по семестар
     1== UC005 - Приказ на предмети по семестар
    22
    3 === Актери
    4  * Најавен студент
     3'''Иницијален актер:''' Студент
    54
    6 === Чекори
    7  1. Студентот навигира до страната „Предмети“
    8  2. Системот го идентификува студентот врз основа на JWT токенот
    9  3. Системот ги презема запишаните семестри и предметите поврзани со секој семестар
    10  4. Предметите се групираат по семестар
    11  5. За секој предмет се прикажуваат кодот, името, професорот и статусот на потпис
    12  6. На студентот му се прикажуваат неговите предмети групирани по семестар
     5'''Други актери:''' -
     6
     7Студентот сака да ги види предметите кои ги слуша во одреден запишан семестар,
     8со професорот, кредитите, потписот и оценката доколку предметот е положен.
     9
     10=== Сценарио
     11
     12 1. Студентот ја отвора страницата '''Предмети''' или избира семестар од [wiki:UseCase004 UC004].
     13
     14 2. Системот ги презема предметите на избраниот запишан семестар. Оценката е LEFT JOIN, бидејќи предметите кои сè уште не се положени немаат ред во passed_subjects.
     15{{{#!sql
     16SELECT s.code,
     17       s.name AS subject,
     18       s.awarded_credits,
     19       ss.signature,
     20       p.name || ' ' || p.surname AS professor,
     21       ps.grade,
     22       ps.date_passed
     23FROM project.semesters_subjects ss
     24JOIN project.subjects s              ON s.id = ss.subjects_id
     25JOIN project.users p                 ON p.id = ss.professor_id
     26LEFT JOIN project.passed_subjects ps ON ps.enrolled_id = ss.id
     27WHERE ss.enrolled_semesters_id = 1
     28ORDER BY s.name;
     29}}}
     30
     31 3. Системот го пресметува бројот на потписи и освоените кредити во тој семестар.
     32{{{#!sql
     33SELECT count(*) FILTER (WHERE ss.signature)        AS signatures,
     34       count(*)                                    AS total_subjects,
     35       coalesce(sum(s.awarded_credits) FILTER (WHERE ps.id IS NOT NULL), 0) AS earned_credits
     36FROM project.semesters_subjects ss
     37JOIN project.subjects s              ON s.id = ss.subjects_id
     38LEFT JOIN project.passed_subjects ps ON ps.enrolled_id = ss.id
     39WHERE ss.enrolled_semesters_id = 1;
     40}}}
     41
     42 4. Системот ја прикажува табелата со предметите и резимето со потписи и кредити.
     43
     44=== Забелешки
     45
     46 * Ограничувањето UNIQUE (enrolled_semesters_id, subjects_id) гарантира дека ист предмет не може да се појави двапати во ист запишан семестар.
     47 * Предуслови за предметите се чуваат во dependency_subject и можат да се прикажат дополнително.