== UC008 - Генерирање и преземање на документ '''Иницијален актер:''' Студент '''Други актери:''' - Студентот сака да побара документ, на пример уверение за положени испити или потврда за редовен студент, и да го преземе како PDF со своите реални податоци. === Сценарио 1. Студентот избира '''Документи''' од менито. 2. Системот ги презема достапните видови документи со нивната цена. {{{#!sql SELECT id, type, cost FROM project.documents ORDER BY type; }}} 3. Студентот избира вид документ и потврдува. 4. Системот ја запишува врската меѓу студентот и документот. Доколку студентот веќе го побарал истиот документ, повторното барање не создава дупликат, бидејќи примарниот клуч е составен од двете колони. {{{#!sql INSERT INTO project.user_documents (user_id, document_id) VALUES (1, 1) ON CONFLICT (user_id, document_id) DO NOTHING; }}} 5. Системот го презема текстот на документот и податоците на студентот кои се вметнуваат во него. {{{#!sql SELECT d.type, d.body, d.cost, u.name, u.surname, u."index", u.embg, u.enrollment_year FROM project.documents d CROSS JOIN project.users u WHERE d.id = 1 AND u.id = 1; }}} 6. За уверение за положени испити, системот ги презема и положените предмети, како во [wiki:UseCase006 UC006]. 7. Системот го генерира PDF документот и го испраќа на преземање. 8. Студентот подоцна може да ги види сите претходно побарани документи. {{{#!sql SELECT d.type, d.cost FROM project.user_documents ud JOIN project.documents d ON d.id = ud.document_id WHERE ud.user_id = 1 ORDER BY d.type; }}} === Забелешки * Табелата user_documents е врска M:N меѓу users и documents, со составен примарен клуч (user_id, document_id). * Цената се чува во documents, па измена на цената важи за сите идни барања.