Changes between Initial Version and Version 1 of UseCase0003


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

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCase0003

    v1 v1  
     1= Имплементација на случај на употреба 0003 - Поднесување на пријава =
     2
     3'''Иницијатор:''' Граѓанин
     4
     5'''Други актери:''' Мапски сервис (во прототипот координатите се внесуваат рачно)
     6
     7Граѓанинот пријавува нов комунален проблем со опис, категорија, локација и фотографии. Пред поднесувањето, системот проверува дали во близина веќе постои активна пријава од истата категорија. Пријавата, фотографиите и првиот запис во историјата на статуси се зачувуваат во една SQL команда.
     8
     9== Сценарио ==
     10
     111. Корисникот ја стартува апликацијата и ја избира улогата „Граѓанин“.
     12
     13[[Image(UC0003_01_uloga.png)]]
     14
     152. Системот ги прикажува граѓаните, а корисникот се најавува со избор од листата:
     16{{{#!sql
     17SELECT citizen_id, full_name, email FROM citizens ORDER BY full_name;
     18}}}
     19
     20[[Image(UC0003_02_najava.png)]]
     21
     223. Граѓанинот избира „Поднеси нова пријава“.
     23
     24[[Image(UC0003_03_meni.png)]]
     25
     264. Системот ги прикажува категориите. Граѓанинот избира категорија и го внесува описот на проблемот:
     27{{{#!sql
     28SELECT category_id, name FROM categories ORDER BY name;
     29}}}
     30
     31[[Image(UC0003_04_kategorija_opis.png)]]
     32
     335. Граѓанинот избира начин на внесување на локацијата и ги внесува адресата и координатите. Системот проверува дали координатите се во дозволениот опсег.
     34
     35[[Image(UC0003_05_lokacija.png)]]
     36
     376. Системот бара активни пријави од истата категорија во близина и ги прикажува. Граѓанинот потврдува дека сепак сака да продолжи:
     38{{{#!sql
     39SELECT r.report_id, r.description, r.status, r.created_at
     40FROM reports r
     41WHERE r.category_id = %s
     42  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;
     45}}}
     46
     47[[Image(UC0003_06_slicni_prijavi.png)]]
     48
     497. Граѓанинот ги внесува имињата на фотографиите. Системот прикажува преглед, а граѓанинот ја потврдува пријавата.
     50
     51[[Image(UC0003_07_pregled.png)]]
     52
     538. Системот ги зачувува пријавата, фотографиите и статусот „submitted“ и прикажува потврда:
     54{{{#!sql
     55WITH 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)
     59    RETURNING report_id, created_at
     60), new_photos AS (
     61    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
     64), new_log AS (
     65    INSERT INTO status_logs (status, changed_at, report_id, worker_id)
     66    SELECT 'submitted', created_at, report_id, NULL
     67    FROM new_report
     68)
     69SELECT report_id FROM new_report;
     70
     71SELECT r.report_id, c.name AS category, r.description, r.location_text,
     72       r.status, r.priority, r.created_at,
     73       (SELECT COUNT(*) FROM photos p WHERE p.report_id = r.report_id) AS photos
     74FROM reports r
     75JOIN categories c ON c.category_id = r.category_id
     76WHERE r.report_id = %s;
     77}}}
     78
     79[[Image(UC0003_08_potvrda.png)]]
     80
     81Ознаката %s означува параметар кој апликацијата го предава на базата (на пример избраната категорија и внесениот опис).