| Version 1 (modified by , 12 days ago) ( diff ) |
|---|
Имплементација на случај на употреба 0003 - Поднесување на пријава
Иницијатор: Граѓанин
Други актери: Мапски сервис (во прототипот координатите се внесуваат рачно)
Граѓанинот пријавува нов комунален проблем со опис, категорија, локација и фотографии. Пред поднесувањето, системот проверува дали во близина веќе постои активна пријава од истата категорија. Пријавата, фотографиите и првиот запис во историјата на статуси се зачувуваат во една SQL команда.
Сценарио
- Корисникот ја стартува апликацијата и ја избира улогата „Граѓанин“.
- Системот ги прикажува граѓаните, а корисникот се најавува со избор од листата:
SELECT citizen_id, full_name, email FROM citizens ORDER BY full_name;
- Граѓанинот избира „Поднеси нова пријава“.
- Системот ги прикажува категориите. Граѓанинот избира категорија и го внесува описот на проблемот:
SELECT category_id, name FROM categories ORDER BY name;
- Граѓанинот избира начин на внесување на локацијата и ги внесува адресата и координатите. Системот проверува дали координатите се во дозволениот опсег.
- Системот бара активни пријави од истата категорија во близина и ги прикажува. Граѓанинот потврдува дека сепак сака да продолжи:
SELECT r.report_id, r.description, r.status, r.created_at FROM reports r WHERE r.category_id = %s AND r.status NOT IN ('resolved', 'rejected') AND r.latitude BETWEEN %s - 0.001 AND %s + 0.001 AND r.longitude BETWEEN %s - 0.001 AND %s + 0.001;
- Граѓанинот ги внесува имињата на фотографиите. Системот прикажува преглед, а граѓанинот ја потврдува пријавата.
- Системот ги зачувува пријавата, фотографиите и статусот „submitted“ и прикажува потврда:
WITH new_report AS ( INSERT INTO reports (description, location_text, latitude, longitude, category_id, citizen_id) VALUES (%s, %s, %s, %s, %s, %s) RETURNING report_id, created_at ), new_photos AS ( INSERT INTO photos (image_url, report_id) SELECT '/uploads/reports/' || report_id || '/' || f, report_id FROM new_report, unnest(%s::text[]) AS f ), 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 = %s;
Ознаката %s означува параметар кој апликацијата го предава на базата (на пример избраната категорија и внесениот опис).
Note:
See TracWiki
for help on using the wiki.
