Changes between Version 1 and Version 2 of UseCase0003


Ignore:
Timestamp:
09/19/26 01:18:15 (12 days ago)
Author:
183164
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCase0003

    v1 v2  
    1 = Имплементација на случај на употреба 0003 - Поднесување на пријава =
     1= Случај на употреба 0003 - Поднесување на пријава =
    22
    33'''Иницијатор:''' Граѓанин
    44
    5 '''Други актери:''' Мапски сервис (во прототипот координатите се внесуваат рачно)
     5'''Други актери:''' Мапски сервис
    66
    7 Граѓанинот пријавува нов комунален проблем со опис, категорија, локација и фотографии. Пред поднесувањето, системот проверува дали во близина веќе постои активна пријава од истата категорија. Пријавата, фотографиите и првиот запис во историјата на статуси се зачувуваат во една SQL команда.
     7Граѓанинот забележува комунален проблем (на пример оштетен тротоар или скршен капак на шахта) и сака да го пријави до општината. Пријавата содржи опис, категорија, локација (внесена рачно или избрана на мапа) и фотографии. Пред поднесувањето, системот проверува дали во близина веќе постои активна пријава за истиот проблем, за да се избегнат дуплирани пријави. По поднесувањето, пријавата добива статус „поднесена“, кој се евидентира во историјата на статуси.
    88
    99== Сценарио ==
    1010
    11 1. Корисникот ја стартува апликацијата и ја избира улогата „Граѓанин“.
     111. Граѓанинот се најавува со е-пошта и лозинка.
    1212
    13 [[Image(UC0003_01_uloga.png)]]
    14 
    15 2. Системот ги прикажува граѓаните, а корисникот се најавува со избор од листата:
     132. Системот ги вчитува податоците за граѓанинот (лозинката се проверува во апликацијата со споредба на хашот):
    1614{{{#!sql
    17 SELECT citizen_id, full_name, email FROM citizens ORDER BY full_name;
     15SELECT citizen_id, full_name
     16FROM citizens
     17WHERE email = 'ana.dimitrievska@gmail.com';
    1818}}}
    1919
    20 [[Image(UC0003_02_najava.png)]]
     203. Граѓанинот избира „Нова пријава“.
    2121
    22 3. Граѓанинот избира „Поднеси нова пријава“.
    23 
    24 [[Image(UC0003_03_meni.png)]]
    25 
    26 4. Системот ги прикажува категориите. Граѓанинот избира категорија и го внесува описот на проблемот:
     224. Системот ја прикажува формата за пријава и ги вчитува категориите:
    2723{{{#!sql
    28 SELECT category_id, name FROM categories ORDER BY name;
     24SELECT category_id, name
     25FROM categories
     26ORDER BY name;
    2927}}}
    3028
    31 [[Image(UC0003_04_kategorija_opis.png)]]
     295. Граѓанинот внесува опис на проблемот (задолжително), избира категорија (задолжително) и ја означува локацијата на мапата или ја внесува адресата рачно (задолжително барем едното).
    3230
    33 5. Граѓанинот избира начин на внесување на локацијата и ги внесува адресата и координатите. Системот проверува дали координатите се во дозволениот опсег.
     316. Мапскиот сервис ги враќа координатите за избраната точка на мапата (или адресата за внесените координати).
    3432
    35 [[Image(UC0003_05_lokacija.png)]]
    36 
    37 6. Системот бара активни пријави од истата категорија во близина и ги прикажува. Граѓанинот потврдува дека сепак сака да продолжи:
     337. Системот проверува дали постојат активни пријави од истата категорија во близина (околу 100 метри):
    3834{{{#!sql
    3935SELECT r.report_id, r.description, r.status, r.created_at
    4036FROM reports r
    41 WHERE r.category_id = %s
     37WHERE r.category_id = 1
    4238  AND r.status NOT IN ('resolved', 'rejected')
    43   AND r.latitude  BETWEEN %s - 0.001 AND %s + 0.001
    44   AND r.longitude BETWEEN %s - 0.001 AND %s + 0.001;
     39  AND r.latitude  BETWEEN 42.000450 - 0.001 AND 42.000450 + 0.001
     40  AND r.longitude BETWEEN 21.416200 - 0.001 AND 21.416200 + 0.001;
    4541}}}
    4642
    47 [[Image(UC0003_06_slicni_prijavi.png)]]
     438. Ако постои слична пријава, системот ја прикажува и го прашува граѓанинот дали сепак сака да продолжи. Во спротивно се продолжува на следниот чекор.
    4844
    49 7. Граѓанинот ги внесува имињата на фотографиите. Системот прикажува преглед, а граѓанинот ја потврдува пријавата.
     459. Граѓанинот прикачува фотографии (незадолжително) и ја поднесува пријавата.
    5046
    51 [[Image(UC0003_07_pregled.png)]]
    52 
    53 8. Системот ги зачувува пријавата, фотографиите и статусот „submitted“ и прикажува потврда:
     4710. Системот ја зачувува пријавата, фотографиите и првиот запис во историјата на статуси во една трансакција. Статусот е „submitted“, а приоритетот е „low“ (стандардни вредности), додека работник нема бидејќи записот го креира системот:
    5448{{{#!sql
    5549WITH new_report AS (
    56     INSERT INTO reports (description, location_text, latitude, longitude,
    57                          category_id, citizen_id)
    58     VALUES (%s, %s, %s, %s, %s, %s)
     50    INSERT INTO reports (description, location_text, latitude, longitude, category_id, citizen_id)
     51    VALUES ('Скршен капак на шахта на тротоарот, опасно за пешаците.',
     52            'ул. Македонија 12, Центар', 41.994800, 21.431900, 1, 1)
    5953    RETURNING report_id, created_at
    6054), new_photos AS (
    6155    INSERT INTO photos (image_url, report_id)
    62     SELECT '/uploads/reports/' || report_id || '/' || f, report_id
    63     FROM new_report, unnest(%s::text[]) AS f
     56    SELECT '/uploads/reports/' || report_id || '/photo_1.jpg', report_id
     57    FROM new_report
    6458), new_log AS (
    6559    INSERT INTO status_logs (status, changed_at, report_id, worker_id)
    … …  
    6862)
    6963SELECT report_id FROM new_report;
     64}}}
    7065
     6611. Системот прикажува потврда со податоците за поднесената пријава:
     67{{{#!sql
    7168SELECT r.report_id, c.name AS category, r.description, r.location_text,
    7269       r.status, r.priority, r.created_at,
    … …  
    7471FROM reports r
    7572JOIN categories c ON c.category_id = r.category_id
    76 WHERE r.report_id = %s;
     73WHERE r.report_id = 13;
    7774}}}
    78 
    79 [[Image(UC0003_08_potvrda.png)]]
    80 
    81 Ознаката %s означува параметар кој апликацијата го предава на базата (на пример избраната категорија и внесениот опис).