Skip to content

Projekt aplikacji Kalendarz

Wymagania funkcjonalne

  1. Dodawanie wydarzeń:

    • Użytkownicy mogą dodawać wydarzenia z datą, godziną i opisem.
    • Możliwość ustawienia powiadomień dla wydarzenia.
  2. Wyświetlanie wydarzeń:

    • Widok miesięczny, tygodniowy i dzienny.
    • Lista wydarzeń z możliwością sortowania (np. po dacie).
  3. Edycja wydarzeń:

    • Możliwość zmiany szczegółów wydarzenia (data, godzina, opis).
  4. Usuwanie wydarzeń:

    • Użytkownicy mogą usuwać wydarzenia.
  5. Współdzielenie wydarzeń:

    • Umożliwienie zapraszania innych użytkowników na wydarzenie.
  6. Powiadomienia:

    • Powiadomienia o zbliżających się wydarzeniach.

Architektura aplikacji

Struktura bazy danych

Tabela: tablet_CalendarEvents

PoleTypOpis
idINTKlucz główny
user_idINTID użytkownika tworzącego
titleVARCHAR(100)Tytuł wydarzenia
descriptionTEXTOpis wydarzenia
start_timeDATETIMEData i godzina rozpoczęcia
end_timeDATETIMEData i godzina zakończenia
is_sharedBOOLEANCzy wydarzenie jest współdzielone

Tabela: tablet_SharedEvents

PoleTypOpis
idINTKlucz główny
event_idINTID wydarzenia
user_idINTID użytkownika zaproszonego

Relacje:

  • tablet_CalendarEvents.user_id to klucz obcy odnoszący się do TabletAccounts.id.
  • tablet_SharedEvents.event_id to klucz obcy odnoszący się do tablet_CalendarEvents.id.

Backend w Lua

Funkcje serwera:

  1. Dodawanie wydarzenia:
lua
RegisterServerEvent('calendar:addEvent')
AddEventHandler('calendar:addEvent', function(title, description, start_time, end_time, is_shared)
    local user_id = source
    local query = [[INSERT INTO tablet_CalendarEvents (user_id, title, description, start_time, end_time, is_shared) VALUES (?, ?, ?, ?, ?, ?)]]
    MySQL.insert.await(query, {user_id, title, description, start_time, end_time, is_shared})
end)
  1. Pobieranie wydarzeń:
lua
RegisterServerEvent('calendar:getEvents')
AddEventHandler('calendar:getEvents', function()
    local user_id = source
    local query = [[SELECT * FROM tablet_CalendarEvents WHERE user_id = ? OR id IN (SELECT event_id FROM tablet_SharedEvents WHERE user_id = ?)]]
    local events = MySQL.query.await(query, {user_id, user_id})
    TriggerClientEvent('calendar:loadEvents', source, events)
end)
  1. Edycja wydarzenia:
lua
RegisterServerEvent('calendar:editEvent')
AddEventHandler('calendar:editEvent', function(event_id, title, description, start_time, end_time)
    local query = [[UPDATE tablet_CalendarEvents SET title = ?, description = ?, start_time = ?, end_time = ? WHERE id = ?]]
    MySQL.update.await(query, {title, description, start_time, end_time, event_id})
end)
  1. Usuwanie wydarzenia:
lua
RegisterServerEvent('calendar:deleteEvent')
AddEventHandler('calendar:deleteEvent', function(event_id)
    local query = [[DELETE FROM tablet_CalendarEvents WHERE id = ?]]
    MySQL.update.await(query, {event_id})
end)
  1. Dodawanie użytkownika do wydarzenia:
lua
RegisterServerEvent('calendar:shareEvent')
AddEventHandler('calendar:shareEvent', function(event_id, user_id)
    local query = [[INSERT INTO tablet_SharedEvents (event_id, user_id) VALUES (?, ?)]]
    MySQL.insert.await(query, {event_id, user_id})
end)

Frontend (Vue.js)

Widoki:

  1. Widok miesięczny:

    • Wyświetlanie wszystkich wydarzeń w układzie kalendarza.
  2. Widok tygodniowy:

    • Szczegółowy widok wydarzeń dla jednego tygodnia.
  3. Widok dzienny:

    • Lista wydarzeń dla wybranego dnia.
  4. Formularz dodawania/edycji wydarzeń:

    • Pola: Tytuł, Opis, Data i godzina rozpoczęcia, Data i godzina zakończenia, Współdzielenie.

Komponenty wspólne:

  • Modal do potwierdzania usunięcia.
  • Powiadomienia o zbliżających się wydarzeniach.

Mechanizmy wymiany danych

  1. Autoryzacja użytkowników:

    • Token JWT przesyłany z każdym zapytaniem do API.
  2. Ładowanie wydarzeń:

    • Wydarzenia ładowane są na bieżąco w zależności od wybranego widoku (miesiąc, tydzień, dzień).
  3. Powiadomienia:

    • Powiadomienia o zbliżających się wydarzeniach wysyłane są przez serwer (np. 10 minut przed rozpoczęciem).