Projekt aplikacji DOC (Department of Correction)
Wymagania funkcjonalne
System logowania i autoryzacji:
- Dostęp tylko dla członków DOC.
- Logowanie na podstawie konta tabletu.
- Przydzielanie uprawnień na podstawie rangi (np. Strażnik, Kierownik Zmiany, Dyrektor).
Panel główny:
- Podsumowanie kluczowych informacji:
- Lista aktualnych więźniów.
- Harmonogram zmian strażników.
- Status cel i sprzętu (np. monitoring, stan zamków).
- Podsumowanie kluczowych informacji:
Rejestr więźniów:
- Dodawanie i aktualizacja informacji o więźniach:
- Dane personalne (np. imię, nazwisko, numer ID).
- Powód osadzenia i czas wyroku.
- Aktualny status (np. w celi, na spacerze, w izolatce).
- Dodawanie i aktualizacja informacji o więźniach:
Harmonogramy:
- Planowanie zmian strażników:
- Data i godzina zmiany.
- Przypisanie obowiązków (np. monitoring, patrol).
- Planowanie zmian strażników:
Rejestr zdarzeń:
- Zapisywanie zdarzeń w placówce:
- Incydenty (np. bójki, próby ucieczki).
- Opis działań podjętych przez strażników.
- Zapisywanie zdarzeń w placówce:
System zgłoszeń:
- Zarządzanie zgłoszeniami od strażników:
- Potrzeby sprzętowe.
- Problemy techniczne (np. awarie zamków).
- Zgłoszenia dotyczące więźniów (np. złe zachowanie).
- Zarządzanie zgłoszeniami od strażników:
Powiadomienia:
- Automatyczne powiadomienia o ważnych wydarzeniach (np. nowe zgłoszenia, zmiany w harmonogramach).
- Możliwość ręcznego wysyłania powiadomień przez kierowników zmiany.
Architektura aplikacji
Struktura bazy danych
Tabela: tablet_DOCInmates
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
name | VARCHAR(100) | Imię i nazwisko |
inmate_id | VARCHAR(50) | Numer ID więźnia |
reason | TEXT | Powód osadzenia |
sentence_start | DATETIME | Data rozpoczęcia wyroku |
sentence_end | DATETIME | Data zakończenia wyroku |
status | VARCHAR(50) | Status (np. W celi, Izolatka) |
Tabela: tablet_DOCShifts
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
guard_id | INT | ID strażnika |
shift_start | DATETIME | Początek zmiany |
shift_end | DATETIME | Koniec zmiany |
assigned_duty | VARCHAR(100) | Przypisane zadanie |
Tabela: tablet_DOCEvents
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
inmate_id | INT | ID więźnia |
description | TEXT | Opis zdarzenia |
reported_by | INT | ID strażnika zgłaszającego |
date | DATETIME | Data zdarzenia |
Tabela: tablet_DOCRequests
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
guard_id | INT | ID strażnika |
type | VARCHAR(50) | Typ zgłoszenia (np. Techniczne, Sprzętowe) |
description | TEXT | Szczegóły zgłoszenia |
status | VARCHAR(50) | Status (np. Oczekuje, Zakończone) |
created_at | DATETIME | Data zgłoszenia |
Backend w Lua
Przykładowe funkcje serwera:
- Dodawanie więźnia:
lua
RegisterServerEvent('doc:addInmate')
AddEventHandler('doc:addInmate', function(name, inmate_id, reason, sentence_start, sentence_end, status)
local query = [[INSERT INTO tablet_DOCInmates (name, inmate_id, reason, sentence_start, sentence_end, status) VALUES (?, ?, ?, ?, ?, ?)]]
MySQL.insert.await(query, {name, inmate_id, reason, sentence_start, sentence_end, status})
end)
- Planowanie zmiany:
lua
RegisterServerEvent('doc:scheduleShift')
AddEventHandler('doc:scheduleShift', function(guard_id, shift_start, shift_end, assigned_duty)
local query = [[INSERT INTO tablet_DOCShifts (guard_id, shift_start, shift_end, assigned_duty) VALUES (?, ?, ?, ?)]]
MySQL.insert.await(query, {guard_id, shift_start, shift_end, assigned_duty})
end)
- Dodawanie zdarzenia:
lua
RegisterServerEvent('doc:addEvent')
AddEventHandler('doc:addEvent', function(inmate_id, description, reported_by)
local query = [[INSERT INTO tablet_DOCEvents (inmate_id, description, reported_by, date) VALUES (?, ?, ?, NOW())]]
MySQL.insert.await(query, {inmate_id, description, reported_by})
end)
- Tworzenie zgłoszenia:
lua
RegisterServerEvent('doc:createRequest')
AddEventHandler('doc:createRequest', function(guard_id, type, description)
local query = [[INSERT INTO tablet_DOCRequests (guard_id, type, description, status, created_at) VALUES (?, ?, ?, 'Oczekuje', NOW())]]
MySQL.insert.await(query, {guard_id, type, description})
end)
Frontend (Vue.js)
Widoki:
- Panel główny:
- Lista więźniów i zgłoszeń.
- Harmonogram zmian strażników.
- Rejestr więźniów:
- Wyszukiwanie i aktualizacja danych więźniów.
- Przegląd historii zdarzeń dla wybranego więźnia.
- Harmonogram:
- Widok zaplanowanych zmian strażników.
- Zarządzanie zgłoszeniami:
- Lista zgłoszeń z opcją zmiany statusu.
- Rejestr zdarzeń:
- Przegląd i dodawanie nowych zdarzeń w placówce.
Mechanizmy wymiany danych
Autoryzacja użytkowników:
- Token JWT przesyłany z każdym zapytaniem do API.
Synchronizacja danych:
- Dane więźniów, harmonogramów i zdarzeń są synchronizowane na bieżąco w czasie rzeczywistym.
Powiadomienia:
- Automatyczne powiadomienia o nowych zgłoszeniach i zmianach w harmonogramach.