Skip to content

Projekt aplikacji SAFR (San Andreas Fire Department)

Wymagania funkcjonalne

  1. System logowania i autoryzacji:

    • Dostęp tylko dla członków SAFR.
    • Logowanie na podstawie konta tabletu.
    • Przydzielanie uprawnień na podstawie rangi (np. Kadet, Strażak, Dowódca).
  2. Panel główny:

    • Podsumowanie kluczowych informacji:
      • Aktualne wezwania.
      • Status jednostek i sprzętu.
      • Ważne ogłoszenia (np. szkolenia, zmiany procedur).
  3. Rejestr interwencji:

    • Dodawanie i aktualizacja danych o interwencjach:
      • Lokalizacja zdarzenia.
      • Typ zdarzenia (np. pożar, wypadek chemiczny).
      • Opis działań podjętych podczas interwencji.
      • Lista jednostek zaangażowanych.
  4. Zarządzanie sprzętem:

    • Ewidencja sprzętu strażackiego:
      • Stan techniczny (np. sprawny, uszkodzony).
      • Historia użycia sprzętu.
      • Informacje o konserwacji i przeglądach.
  5. Harmonogram działań:

    • Planowanie zmian i dyżurów strażaków.
    • Informacje o zaplanowanych szkoleniach i ćwiczeniach.
  6. Raporty z interwencji:

    • Tworzenie szczegółowych raportów:
      • Czas rozpoczęcia i zakończenia interwencji.
      • Opis sytuacji i wykorzystanych zasobów.
      • Uwagi i rekomendacje na przyszłość.
  7. Powiadomienia:

    • Automatyczne powiadomienia o nowych zgłoszeniach lub zmianach w harmonogramie.
    • Możliwość ręcznego wysyłania powiadomień przez dowódców.

Architektura aplikacji

Struktura bazy danych

Tabela: tablet_SAFRIncidents

PoleTypOpis
idINTKlucz główny
locationVARCHAR(100)Lokalizacja zdarzenia
typeVARCHAR(50)Typ zdarzenia (np. Pożar)
descriptionTEXTSzczegóły interwencji
statusVARCHAR(50)Status (np. W toku, Zakończone)
reported_atDATETIMEData zgłoszenia

Tabela: tablet_SAFRUnits

PoleTypOpis
idINTKlucz główny
nameVARCHAR(50)Nazwa jednostki
statusVARCHAR(50)Status (np. W akcji, Gotowa)
last_activeDATETIMEOstatnia aktywność

Tabela: tablet_SAFREquipment

PoleTypOpis
idINTKlucz główny
item_nameVARCHAR(100)Nazwa sprzętu
conditionVARCHAR(50)Stan techniczny
last_usedDATETIMEData ostatniego użycia
maintenance_dueDATETIMETermin konserwacji

Tabela: tablet_SAFRReports

PoleTypOpis
idINTKlucz główny
incident_idINTID zdarzenia
report_textTEXTTreść raportu
resources_usedTEXTLista użytych zasobów
created_atDATETIMEData utworzenia

Tabela: tablet_SAFRSchedule

PoleTypOpis
idINTKlucz główny
firefighter_idINTID strażaka
shift_startDATETIMEPoczątek zmiany
shift_endDATETIMEKoniec zmiany

Backend w Lua

Przykładowe funkcje serwera:

  1. Dodawanie interwencji:
lua
RegisterServerEvent('safr:addIncident')
AddEventHandler('safr:addIncident', function(location, type, description)
    local query = [[INSERT INTO tablet_SAFRIncidents (location, type, description, status, reported_at) VALUES (?, ?, ?, 'W toku', NOW())]]
    MySQL.insert.await(query, {location, type, description})
end)
  1. Aktualizacja statusu jednostki:
lua
RegisterServerEvent('safr:updateUnitStatus')
AddEventHandler('safr:updateUnitStatus', function(unit_id, status)
    local query = [[UPDATE tablet_SAFRUnits SET status = ?, last_active = NOW() WHERE id = ?]]
    MySQL.update.await(query, {status, unit_id})
end)
  1. Zarządzanie sprzętem:
lua
RegisterServerEvent('safr:updateEquipment')
AddEventHandler('safr:updateEquipment', function(item_id, condition)
    local query = [[UPDATE tablet_SAFREquipment SET condition = ?, last_used = NOW() WHERE id = ?]]
    MySQL.update.await(query, {condition, item_id})
end)
  1. Tworzenie raportu z interwencji:
lua
RegisterServerEvent('safr:createReport')
AddEventHandler('safr:createReport', function(incident_id, report_text, resources_used)
    local query = [[INSERT INTO tablet_SAFRReports (incident_id, report_text, resources_used, created_at) VALUES (?, ?, ?, NOW())]]
    MySQL.insert.await(query, {incident_id, report_text, resources_used})
end)
  1. Planowanie zmiany:
lua
RegisterServerEvent('safr:scheduleShift')
AddEventHandler('safr:scheduleShift', function(firefighter_id, shift_start, shift_end)
    local query = [[INSERT INTO tablet_SAFRSchedule (firefighter_id, shift_start, shift_end) VALUES (?, ?, ?)]]
    MySQL.insert.await(query, {firefighter_id, shift_start, shift_end})
end)

Frontend (Vue.js)

Widoki:

  1. Panel główny:
    • Lista aktywnych zgłoszeń i status jednostek.
    • Informacje o dostępności sprzętu.
  2. Rejestr interwencji:
    • Wyszukiwanie i przegląd danych o interwencjach.
  3. Zarządzanie sprzętem:
    • Lista sprzętu z opcjami aktualizacji stanu technicznego.
  4. Harmonogram:
    • Widok zmian i dyżurów strażaków.
  5. Raporty:
    • Przegląd raportów z zakończonych interwencji.

Mechanizmy wymiany danych

  1. Autoryzacja użytkowników:

    • Token JWT przesyłany z każdym zapytaniem do API.
  2. Synchronizacja danych:

    • Dane o interwencjach, sprzęcie i harmonogramach są aktualizowane w czasie rzeczywistym.
  3. Powiadomienia:

    • Automatyczne powiadomienia o nowych zgłoszeniach i zmianach w harmonogramach.