wiki:UseCase0003Implementation

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

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

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

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

Сценарио

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

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

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

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

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

  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;
    

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

  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;
    

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

Last modified 12 days ago Last modified on 09/19/26 00:20:42

Attachments (8)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.