Prima di procedeere alle cose complicate, è importante capire MVP (Minimum Viable Product), andremo prima a fare una base di front end che sia collegato a backend che sia funzionale al minimo necessario per il nostro sito.
- Login: Effettua un POST al backend per il login, inviando un JSON con email e password.
- Registrazione: Effettua un POST al backend per la registrazione, includendo email, nome utente e doppia password.
- Logout: Effettua un POST al backend per il logout e cancella il cookie.
Abbiamo tre tipi di utenti:
-
UR (Utente Registrato):
- GET:
api/apartments
- Visualizza tutti gli appartamenti pubblici. - POST:
api/messages
- Invia un messaggio al backend che verrà salvato nel database delle chat.
- GET:
-
URA (Utente Registrato con Appartamento):
- GET:
api/apartments
,api/messages
,api/user
- Visualizza i dati pubblici, i propri dati personali e quelli dell'appartamento. - POST:
api/apartments
- Crea un nuovo appartamento. - PUT:
api/apartments
- Modifica i dati dell'appartamento. - DELETE:
api/apartments
- Cancella i dati dell'appartamento.
- GET:
-
UI (Utente Interessato):
- GET:
api/apartments
- Visualizza i dati pubblici.
- GET:
-
GET:
api/apartments
- Visualizza i dati pubblici. http://ilvostrolink.test/api/apartments -
POST:
api/apartments
- Crea un nuovo appartamento. Utilizza il seguente JSON:{ "user_id": 1, "title": "Beautiful Apartment", "rooms": 3, "beds": 2, "bathrooms": 1, "square_meters": 75, "address": "123 Main St, Anytown", "latitude": 40.7128, "longitude": -74.0060, "image": "image_url_or_path", "is_visible": true }
-
PUT:
api/apartments/{id}
- Modifica i dati dell'appartamento. URL: http://ilvostrolink.test/api/apartments/{id} -
DELETE:
api/apartments/{id}
- Cancella i dati dell'appartamento. URL: http://ilvostrolink.test/api/apartments/{id}
- id: ID dell'appartamento
- stanze: Numero di stanze
- letti: Numero di letti
- bagni: Numero di bagni
- metri_quadrati: Metri quadrati
- indirizzo: Indirizzo completo con latitudine e longitudine
- immagine: Immagine rappresentativa
- servizi_aggiuntivi: Uno o più servizi aggiuntivi (es. WiFi, piscina, portineria, vista mare)
- visibile: Sì o No
Quindi:
- Login: Il frontend invia una richiesta POST al backend per il login. Il backend verifica l'esistenza dei dati e, se validi, invia un token come cookie al frontend.
- Registrazione: Il frontend invia una richiesta POST al backend per registrare un nuovo utente. Il backend crea l'utente con i dati forniti se non esistono già, altrimenti restituisce un errore.
- Logout: Il frontend invia una richiesta POST al backend per effettuare il logout. Il backend elimina il token e il frontend rimuove il cookie.
Abbiamo tre tipi di utenti:
- UR (Utente Registrato):
- GET: Può visualizzare i dati.
- POST: Può inviare messaggi ad altri utenti. I messaggi vengono gestiti dal backend e salvati nel database delle chat.
- URA (Utente Registrato con Appartamento):
- GET: Può visualizzare i propri dati personali e quelli dell'appartamento. Il backend invia i dati solo all'utente registrato con l'appartamento.
- POST: Può creare o modificare appartamenti. Il backend consente queste operazioni solo se l'utente che le richiede è lo stesso associato all'appartamento.
- PUT: Può modificare i dati dell'appartamento. Il backend esegue la modifica solo se l'utente è lo stesso associato all'appartamento.
- DELETE: Può cancellare i dati dell'appartamento. Il backend esegue la cancellazione solo se l'utente è lo stesso associato all'appartamento.
- UI (Utente Interessato):
- GET: Può visualizzare solo i dati pubblici. Il backend invia solo i dati pubblici.
Post:
- /api/login -> effettua il login
- /api/register -> effettua la registrazione
- /api/logout -> effettua il logout
- /api/message -> invia un messaggio
- /api/apartments -> crea un nuovo appartamento (solo per URA)
Get:
- /api/user -> mostra i dati dell'utente registrato, inclusi nome, email e ruolo
- /api/apartments -> mostra tutti gli appartamenti pubblici disponibili
- /api/messages -> mostra tutti i messaggi inviati e ricevuti dall'utente
- /api/apartments/{id} -> mostra i dettagli di un appartamento specifico (solo per URA e UR)
Put:
- /api/apartments/{id} -> modifica un appartamento specifico (solo per URA)
- /api/user -> modifica i dati dell'utente registrato (solo per UR)
Delete:
- /api/apartments/{id} -> cancella un appartamento specifico (solo per URA)
ancora da aggiungere: ...
- Un utente può possedere più appartamenti, quindi la relazione è:
user
1 a moltiapartments
. - Un utente può inviare più messaggi, quindi la relazione è:
user
1 a moltimessages
.
- Un appartamento può ricevere più messaggi, quindi la relazione è:
apartments
1 a moltimessages
. - Un appartamento può essere associato a più sponsorizzazioni, quindi la relazione è:
apartments
1 a moltisponsorships
. - Un appartamento può avere molteplici registrazioni statistiche, quindi la relazione è:
apartments
1 a moltistatistics
. - Un appartamento può offrire diversi servizi aggiuntivi, quindi la relazione è:
apartments
1 a moltiproperty services
.
- ID:
id
(Primary Key) - Email:
email
(Unique) - Password:
password
- Nome:
first_name
- Cognome:
last_name
- Ruolo:
role
// UI, UR, URA - Data di Nascita:
birth_date
- ID:
id
(Primary Key) - Proprietario:
user_id
(Foreign Key, referencesusers.id
) - Servizi Aggiuntivi:
additional_services
(Foreign Key, referencesservices.id
) - Titolo:
title
- Numero di Stanze:
rooms
- Numero di Letti:
beds
- Numero di Bagni:
bathrooms
- Metri Quadrati:
square_meters
- Indirizzo:
address
- Latitudine:
latitude
- Longitudine:
longitude
- Immagine:
image
- Visibile:
is_visible
- ID:
id
(Primary Key) - Appartamento:
apartment_id
(Foreign Key, referencesapartments.id
) - Nome:
name
- ID:
id
(Primary Key) - Appartamento:
apartment_id
(Foreign Key, referencesapartments.id
) - Utente Mittente:
user_id
(Foreign Key, referencesusers.id
) - Email Mittente:
sender_email
- Messaggio:
message
- ID:
id
(Primary Key) - Appartamento:
apartment_id
(Foreign Key, referencesapartments.id
) - Data:
date
- Visite:
views
- ID:
id
(Primary Key) - Appartamento:
apartment_id
(Foreign Key, referencesapartments.id
) - Evento:
evento
- Data Inizio:
start_date
- Data Fine:
end_date