| Version 2 (modified by , 12 days ago) ( diff ) |
|---|
Случај на употреба 0003 - Поднесување на пријава
Иницијатор: Граѓанин
Други актери: Мапски сервис
Граѓанинот забележува комунален проблем (на пример оштетен тротоар или скршен капак на шахта) и сака да го пријави до општината. Пријавата содржи опис, категорија, локација (внесена рачно или избрана на мапа) и фотографии. Пред поднесувањето, системот проверува дали во близина веќе постои активна пријава за истиот проблем, за да се избегнат дуплирани пријави. По поднесувањето, пријавата добива статус „поднесена“, кој се евидентира во историјата на статуси.
Сценарио
- Граѓанинот се најавува со е-пошта и лозинка.
- Системот ги вчитува податоците за граѓанинот (лозинката се проверува во апликацијата со споредба на хашот):
SELECT citizen_id, full_name FROM citizens WHERE email = 'ana.dimitrievska@gmail.com';
- Граѓанинот избира „Нова пријава“.
- Системот ја прикажува формата за пријава и ги вчитува категориите:
SELECT category_id, name FROM categories ORDER BY name;
- Граѓанинот внесува опис на проблемот (задолжително), избира категорија (задолжително) и ја означува локацијата на мапата или ја внесува адресата рачно (задолжително барем едното).
- Мапскиот сервис ги враќа координатите за избраната точка на мапата (или адресата за внесените координати).
- Системот проверува дали постојат активни пријави од истата категорија во близина (околу 100 метри):
SELECT r.report_id, r.description, r.status, r.created_at FROM reports r WHERE r.category_id = 1 AND r.status NOT IN ('resolved', 'rejected') AND r.latitude BETWEEN 42.000450 - 0.001 AND 42.000450 + 0.001 AND r.longitude BETWEEN 21.416200 - 0.001 AND 21.416200 + 0.001;
- Ако постои слична пријава, системот ја прикажува и го прашува граѓанинот дали сепак сака да продолжи. Во спротивно се продолжува на следниот чекор.
- Граѓанинот прикачува фотографии (незадолжително) и ја поднесува пријавата.
- Системот ја зачувува пријавата, фотографиите и првиот запис во историјата на статуси во една трансакција. Статусот е „submitted“, а приоритетот е „low“ (стандардни вредности), додека работник нема бидејќи записот го креира системот:
WITH new_report AS ( INSERT INTO reports (description, location_text, latitude, longitude, category_id, citizen_id) VALUES ('Скршен капак на шахта на тротоарот, опасно за пешаците.', 'ул. Македонија 12, Центар', 41.994800, 21.431900, 1, 1) RETURNING report_id, created_at ), new_photos AS ( INSERT INTO photos (image_url, report_id) SELECT '/uploads/reports/' || report_id || '/photo_1.jpg', report_id FROM new_report ), new_log AS ( INSERT INTO status_logs (status, changed_at, report_id, worker_id) SELECT 'submitted', created_at, report_id, NULL FROM new_report ) SELECT report_id FROM new_report;
- Системот прикажува потврда со податоците за поднесената пријава:
SELECT r.report_id, c.name AS category, r.description, r.location_text, r.status, r.priority, r.created_at, (SELECT COUNT(*) FROM photos p WHERE p.report_id = r.report_id) AS photos FROM reports r JOIN categories c ON c.category_id = r.category_id WHERE r.report_id = 13;
Note:
See TracWiki
for help on using the wiki.
