Changes between Version 1 and Version 2 of UseCase0003
- Timestamp:
- 09/19/26 01:18:15 (12 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
UseCase0003
v1 v2 1 = Имплементација на случај на употреба 0003 - Поднесување на пријава =1 = Случај на употреба 0003 - Поднесување на пријава = 2 2 3 3 '''Иницијатор:''' Граѓанин 4 4 5 '''Други актери:''' Мапски сервис (во прототипот координатите се внесуваат рачно)5 '''Други актери:''' Мапски сервис 6 6 7 Граѓанинот пријавува нов комунален проблем со опис, категорија, локација и фотографии. Пред поднесувањето, системот проверува дали во близина веќе постои активна пријава од истата категорија. Пријавата, фотографиите и првиот запис во историјата на статуси се зачувуваат во една SQL команда.7 Граѓанинот забележува комунален проблем (на пример оштетен тротоар или скршен капак на шахта) и сака да го пријави до општината. Пријавата содржи опис, категорија, локација (внесена рачно или избрана на мапа) и фотографии. Пред поднесувањето, системот проверува дали во близина веќе постои активна пријава за истиот проблем, за да се избегнат дуплирани пријави. По поднесувањето, пријавата добива статус „поднесена“, кој се евидентира во историјата на статуси. 8 8 9 9 == Сценарио == 10 10 11 1. Корисникот ја стартува апликацијата и ја избира улогата „Граѓанин“.11 1. Граѓанинот се најавува со е-пошта и лозинка. 12 12 13 [[Image(UC0003_01_uloga.png)]] 14 15 2. Системот ги прикажува граѓаните, а корисникот се најавува со избор од листата: 13 2. Системот ги вчитува податоците за граѓанинот (лозинката се проверува во апликацијата со споредба на хашот): 16 14 {{{#!sql 17 SELECT citizen_id, full_name, email FROM citizens ORDER BY full_name; 15 SELECT citizen_id, full_name 16 FROM citizens 17 WHERE email = 'ana.dimitrievska@gmail.com'; 18 18 }}} 19 19 20 [[Image(UC0003_02_najava.png)]] 20 3. Граѓанинот избира „Нова пријава“. 21 21 22 3. Граѓанинот избира „Поднеси нова пријава“. 23 24 [[Image(UC0003_03_meni.png)]] 25 26 4. Системот ги прикажува категориите. Граѓанинот избира категорија и го внесува описот на проблемот: 22 4. Системот ја прикажува формата за пријава и ги вчитува категориите: 27 23 {{{#!sql 28 SELECT category_id, name FROM categories ORDER BY name; 24 SELECT category_id, name 25 FROM categories 26 ORDER BY name; 29 27 }}} 30 28 31 [[Image(UC0003_04_kategorija_opis.png)]] 29 5. Граѓанинот внесува опис на проблемот (задолжително), избира категорија (задолжително) и ја означува локацијата на мапата или ја внесува адресата рачно (задолжително барем едното). 32 30 33 5. Граѓанинот избира начин на внесување на локацијата и ги внесува адресата и координатите. Системот проверува дали координатите се во дозволениот опсег.31 6. Мапскиот сервис ги враќа координатите за избраната точка на мапата (или адресата за внесените координати). 34 32 35 [[Image(UC0003_05_lokacija.png)]] 36 37 6. Системот бара активни пријави од истата категорија во близина и ги прикажува. Граѓанинот потврдува дека сепак сака да продолжи: 33 7. Системот проверува дали постојат активни пријави од истата категорија во близина (околу 100 метри): 38 34 {{{#!sql 39 35 SELECT r.report_id, r.description, r.status, r.created_at 40 36 FROM reports r 41 WHERE r.category_id = %s37 WHERE r.category_id = 1 42 38 AND r.status NOT IN ('resolved', 'rejected') 43 AND r.latitude BETWEEN %s - 0.001 AND %s+ 0.00144 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; 45 41 }}} 46 42 47 [[Image(UC0003_06_slicni_prijavi.png)]] 43 8. Ако постои слична пријава, системот ја прикажува и го прашува граѓанинот дали сепак сака да продолжи. Во спротивно се продолжува на следниот чекор. 48 44 49 7. Граѓанинот ги внесува имињата на фотографиите. Системот прикажува преглед, а граѓанинот ја потврдува пријавата.45 9. Граѓанинот прикачува фотографии (незадолжително) и ја поднесува пријавата. 50 46 51 [[Image(UC0003_07_pregled.png)]] 52 53 8. Системот ги зачувува пријавата, фотографиите и статусот „submitted“ и прикажува потврда: 47 10. Системот ја зачувува пријавата, фотографиите и првиот запис во историјата на статуси во една трансакција. Статусот е „submitted“, а приоритетот е „low“ (стандардни вредности), додека работник нема бидејќи записот го креира системот: 54 48 {{{#!sql 55 49 WITH 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) 59 53 RETURNING report_id, created_at 60 54 ), new_photos AS ( 61 55 INSERT INTO photos (image_url, report_id) 62 SELECT '/uploads/reports/' || report_id || '/ ' || f, report_id63 FROM new_report , unnest(%s::text[]) AS f56 SELECT '/uploads/reports/' || report_id || '/photo_1.jpg', report_id 57 FROM new_report 64 58 ), new_log AS ( 65 59 INSERT INTO status_logs (status, changed_at, report_id, worker_id) … … 68 62 ) 69 63 SELECT report_id FROM new_report; 64 }}} 70 65 66 11. Системот прикажува потврда со податоците за поднесената пријава: 67 {{{#!sql 71 68 SELECT r.report_id, c.name AS category, r.description, r.location_text, 72 69 r.status, r.priority, r.created_at, … … 74 71 FROM reports r 75 72 JOIN categories c ON c.category_id = r.category_id 76 WHERE r.report_id = %s;73 WHERE r.report_id = 13; 77 74 }}} 78 79 [[Image(UC0003_08_potvrda.png)]]80 81 Ознаката %s означува параметар кој апликацијата го предава на базата (на пример избраната категорија и внесениот опис).
