wiki:UseCase0003

Version 1 (modified by 183164, 12 days ago) ( diff )

--

Имплементација на случај на употреба 0003 - Поднесување на пријава

Иницијатор: Граѓанин

Други актери: Мапски сервис (во прототипот координатите се внесуваат рачно)

Граѓанинот пријавува нов комунален проблем со опис, категорија, локација и фотографии. Пред поднесувањето, системот проверува дали во близина веќе постои активна пријава од истата категорија. Пријавата, фотографиите и првиот запис во историјата на статуси се зачувуваат во една SQL команда.

Сценарио

  1. Корисникот ја стартува апликацијата и ја избира улогата „Граѓанин“.

No image "UC0003_01_uloga.png" attached to UseCase0003

  1. Системот ги прикажува граѓаните, а корисникот се најавува со избор од листата:
    SELECT citizen_id, full_name, email FROM citizens ORDER BY full_name;
    

No image "UC0003_02_najava.png" attached to UseCase0003

  1. Граѓанинот избира „Поднеси нова пријава“.

No image "UC0003_03_meni.png" attached to UseCase0003

  1. Системот ги прикажува категориите. Граѓанинот избира категорија и го внесува описот на проблемот:
    SELECT category_id, name FROM categories ORDER BY name;
    

No image "UC0003_04_kategorija_opis.png" attached to UseCase0003

  1. Граѓанинот избира начин на внесување на локацијата и ги внесува адресата и координатите. Системот проверува дали координатите се во дозволениот опсег.

No image "UC0003_05_lokacija.png" attached to UseCase0003

  1. Системот бара активни пријави од истата категорија во близина и ги прикажува. Граѓанинот потврдува дека сепак сака да продолжи:
    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;
    

No image "UC0003_06_slicni_prijavi.png" attached to UseCase0003

  1. Граѓанинот ги внесува имињата на фотографиите. Системот прикажува преглед, а граѓанинот ја потврдува пријавата.

No image "UC0003_07_pregled.png" attached to UseCase0003

  1. Системот ги зачувува пријавата, фотографиите и статусот „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;
    

No image "UC0003_08_potvrda.png" attached to UseCase0003

Ознаката %s означува параметар кој апликацијата го предава на базата (на пример избраната категорија и внесениот опис).

Note: See TracWiki for help on using the wiki.