Changes between Version 1 and Version 2 of UseCase006


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

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCase006

    v1 v2  
    1 == UseCase006 - Приказ на положени предмети
     1== UC006 - Приказ на положени предмети
    22
    3 === Актери
    4  * Најавен студент
     3'''Иницијален актер:''' Студент
    54
    6 === Чекори
    7  1. Студентот навигира до страната „Испити“ / „Положени предмети“
    8  2. Системот го идентификува студентот врз основа на JWT токенот
    9  3. Системот ги презема сите положени предмети на студентот
    10  4. За секој положен предмет се прикажуваат кодот, името, кредитите, оценката, датумот на полагање и професорот
    11  5. На студентот му се прикажува табела со неговите положени предмети и просек
     5'''Други актери:''' -
     6
     7Студентот сака да го види своето уверение за положени испити: сите предмети кои
     8ги положил, со оценка, датум, професор, семестар и кредити, како и вкупниот број
     9кредити и просечната оценка.
     10
     11=== Сценарио
     12
     13 1. Студентот избира '''Испити''' од менито.
     14
     15 2. Системот ги презема сите положени предмети на студентот. Патеката до студентот оди преку запишаниот семестар, бидејќи во моделот semesters_subjects не содржи директна врска кон студентот.
     16{{{#!sql
     17SELECT s.code,
     18       s.name        AS subject,
     19       s.awarded_credits,
     20       ps.grade,
     21       ps.date_passed,
     22       p.name || ' ' || p.surname AS professor,
     23       a.year,
     24       a.type
     25FROM project.passed_subjects ps
     26JOIN project.semesters_subjects ss ON ss.id = ps.enrolled_id
     27JOIN project.enrolled_semesters es ON es.id = ss.enrolled_semesters_id
     28JOIN project.subjects s            ON s.id  = ss.subjects_id
     29JOIN project.users p               ON p.id  = ss.professor_id
     30JOIN project.active_semesters a    ON a.id  = es.semester_id
     31WHERE es.user_id = 1
     32ORDER BY ps.date_passed;
     33}}}
     34
     35 3. Системот го пресметува просекот и вкупните кредити. Бидејќи grade е набројувачки тип (enum), вредноста прво се претвора во текст, па во цел број за да може да се пресмета просек.
     36{{{#!sql
     37SELECT round(avg(ps.grade::text::int), 2) AS average_grade,
     38       sum(s.awarded_credits)             AS total_credits
     39FROM project.passed_subjects ps
     40JOIN project.semesters_subjects ss ON ss.id = ps.enrolled_id
     41JOIN project.enrolled_semesters es ON es.id = ss.enrolled_semesters_id
     42JOIN project.subjects s            ON s.id  = ss.subjects_id
     43WHERE es.user_id = 1;
     44}}}
     45
     46 4. Системот ја прикажува табелата со положените предмети и, под неа, просекот и вкупните кредити.
     47
     48 5. Студентот по желба избира '''Преземи PDF''', со што се преминува на [wiki:UseCase008 UC008].
     49
     50=== Забелешки
     51
     52 * Врската меѓу semesters_subjects и passed_subjects е 1:1, обезбедена со UNIQUE врз passed_subjects.enrolled_id, па еден предмет во еден семестар може да има најмногу една оценка.
     53 * Ако студентот го слушал истиот предмет во повеќе семестри, секое слушање е посебен ред во semesters_subjects, па се гледа и во кој семестар е положен.