Projekt aplikacji SAFR (San Andreas Fire Department)
Wymagania funkcjonalne
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).
Panel główny:
- Podsumowanie kluczowych informacji:
- Aktualne wezwania.
- Status jednostek i sprzętu.
- Ważne ogłoszenia (np. szkolenia, zmiany procedur).
- Podsumowanie kluczowych informacji:
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.
- Dodawanie i aktualizacja danych o interwencjach:
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.
- Ewidencja sprzętu strażackiego:
Harmonogram działań:
- Planowanie zmian i dyżurów strażaków.
- Informacje o zaplanowanych szkoleniach i ćwiczeniach.
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ść.
- Tworzenie szczegółowych raportów:
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
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
location | VARCHAR(100) | Lokalizacja zdarzenia |
type | VARCHAR(50) | Typ zdarzenia (np. Pożar) |
description | TEXT | Szczegóły interwencji |
status | VARCHAR(50) | Status (np. W toku, Zakończone) |
reported_at | DATETIME | Data zgłoszenia |
Tabela: tablet_SAFRUnits
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
name | VARCHAR(50) | Nazwa jednostki |
status | VARCHAR(50) | Status (np. W akcji, Gotowa) |
last_active | DATETIME | Ostatnia aktywność |
Tabela: tablet_SAFREquipment
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
item_name | VARCHAR(100) | Nazwa sprzętu |
condition | VARCHAR(50) | Stan techniczny |
last_used | DATETIME | Data ostatniego użycia |
maintenance_due | DATETIME | Termin konserwacji |
Tabela: tablet_SAFRReports
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
incident_id | INT | ID zdarzenia |
report_text | TEXT | Treść raportu |
resources_used | TEXT | Lista użytych zasobów |
created_at | DATETIME | Data utworzenia |
Tabela: tablet_SAFRSchedule
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
firefighter_id | INT | ID strażaka |
shift_start | DATETIME | Początek zmiany |
shift_end | DATETIME | Koniec zmiany |
Backend w Lua
Przykładowe funkcje serwera:
- 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)
- 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)
- 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)
- 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)
- 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:
- Panel główny:
- Lista aktywnych zgłoszeń i status jednostek.
- Informacje o dostępności sprzętu.
- Rejestr interwencji:
- Wyszukiwanie i przegląd danych o interwencjach.
- Zarządzanie sprzętem:
- Lista sprzętu z opcjami aktualizacji stanu technicznego.
- Harmonogram:
- Widok zmian i dyżurów strażaków.
- Raporty:
- Przegląd raportów z zakończonych interwencji.
Mechanizmy wymiany danych
Autoryzacja użytkowników:
- Token JWT przesyłany z każdym zapytaniem do API.
Synchronizacja danych:
- Dane o interwencjach, sprzęcie i harmonogramach są aktualizowane w czasie rzeczywistym.
Powiadomienia:
- Automatyczne powiadomienia o nowych zgłoszeniach i zmianach w harmonogramach.