Projekt aplikacji Kalendarz
Wymagania funkcjonalne
Dodawanie wydarzeń:
- Użytkownicy mogą dodawać wydarzenia z datą, godziną i opisem.
- Możliwość ustawienia powiadomień dla wydarzenia.
Wyświetlanie wydarzeń:
- Widok miesięczny, tygodniowy i dzienny.
- Lista wydarzeń z możliwością sortowania (np. po dacie).
Edycja wydarzeń:
- Możliwość zmiany szczegółów wydarzenia (data, godzina, opis).
Usuwanie wydarzeń:
- Użytkownicy mogą usuwać wydarzenia.
Współdzielenie wydarzeń:
- Umożliwienie zapraszania innych użytkowników na wydarzenie.
Powiadomienia:
- Powiadomienia o zbliżających się wydarzeniach.
Architektura aplikacji
Struktura bazy danych
Tabela: tablet_CalendarEvents
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
user_id | INT | ID użytkownika tworzącego |
title | VARCHAR(100) | Tytuł wydarzenia |
description | TEXT | Opis wydarzenia |
start_time | DATETIME | Data i godzina rozpoczęcia |
end_time | DATETIME | Data i godzina zakończenia |
is_shared | BOOLEAN | Czy wydarzenie jest współdzielone |
Tabela: tablet_SharedEvents
Pole | Typ | Opis |
---|---|---|
id | INT | Klucz główny |
event_id | INT | ID wydarzenia |
user_id | INT | ID użytkownika zaproszonego |
Relacje:
tablet_CalendarEvents.user_id
to klucz obcy odnoszący się doTabletAccounts.id
.tablet_SharedEvents.event_id
to klucz obcy odnoszący się dotablet_CalendarEvents.id
.
Backend w Lua
Funkcje serwera:
- 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)
- 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)
- 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)
- 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)
- 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:
Widok miesięczny:
- Wyświetlanie wszystkich wydarzeń w układzie kalendarza.
Widok tygodniowy:
- Szczegółowy widok wydarzeń dla jednego tygodnia.
Widok dzienny:
- Lista wydarzeń dla wybranego dnia.
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
Autoryzacja użytkowników:
- Token JWT przesyłany z każdym zapytaniem do API.
Ładowanie wydarzeń:
- Wydarzenia ładowane są na bieżąco w zależności od wybranego widoku (miesiąc, tydzień, dzień).
Powiadomienia:
- Powiadomienia o zbliżających się wydarzeniach wysyłane są przez serwer (np. 10 minut przed rozpoczęciem).