InCrowd API (1.0.0)

Download OpenAPI specification:

License: MIT

InCrowd API

Benvenuto nella documentazione dell'API di InCrowd, una piattaforma innovativa di crowdsourcing per proposte e iniziative cittadine.

Panoramica

L'API InCrowd fornisce accesso completo alla piattaforma per:

  • Gestione utenti unificata (cittadini privati ed enti)
  • Creazione e gestione proposte
  • Sistema di follow/followers
  • Amministrazione e moderazione con separazione dei ruoli

Funzionalità principali:

  • Autenticazione: Login tradizionale e Google OAuth
  • Gestione utenti: Registrazione, profili, ricerca
  • Proposte: Creazione, moderazione, commenti, hype
  • Follow system: Relazioni tra utenti
  • Gestione operatori: Creazione e gestione account moderatori

Autenticazione e Sicurezza

L'API utilizza autenticazione JWT

Flusso di Autenticazione

  1. Login: Ottieni il token tramite POST /api/auth/login o POST /api/auth/google
  2. Utilizzo: Includi il token nell'header di ogni richiesta:
    Authorization: Bearer <your-jwt-token>
    
  3. Validazione: Il token viene validato ad ogni richiesta tramite middleware
  4. Scadenza: Token validi per 7 giorni (configurabile)

Struttura JWT

Il JWT contiene i seguenti claim:

  • userId: ID univoco dell'utente nel database
  • email: Email dell'utente per identificazione
  • userType: Tipo utente (privato, ente, operatore, admin)

Gestione sicurezza

Parametrizzazione: La sicurezza è parametrizzabile tramite variabile di ambiente ENABLE_SECURITY_CONTROLS

Requisiti minimi per le password sono:

  • 8 caratteri minimo
  • 1 lettera maiuscola
  • 1 lettera minuscola
  • 1 carattere speciale (!@#$%^&*)

Struttura delle Response

Tutte le risposte seguono il formato standardizzato:

{
  "data": { 
    // Dati della risposta (opzionale)
  },
  "message": "Messaggio descrittivo specifico",
  "error": {
    // Dettagli errore (solo presente in caso di errore)
  }
}

Ruoli e Permessi

Admin

Gli amministratori hanno accesso esclusivo alla gestione degli account operatori:

  • Gestione Operatori: Creare, eliminare e gestire account operatori (/api/operatori)
  • NON possono: Moderare proposte, vedere commenti globali, accedere ai dati utente

IMPORTANTE: Gli admin sono limitati alla gestione degli account operatori e non hanno accesso alle funzionalità di moderazione. Questo è un design di sicurezza intenzionale.

Operatori

Gli operatori gestiscono la moderazione e la gestione utenti:

  • Moderazione: Approvare/rifiutare proposte (/api/proposte/pending)
  • Commenti: Vedere tutti i commenti globali (/api/proposte/commenti)
  • Utenti: Vedere tutti i dati utente inclusi email e codice fiscale (/api/user)
  • NON possono: Gestire altri operatori

IMPORTANTE: Solo gli operatori possono moderare proposte e vedere commenti globali. Gli admin non hanno accesso a queste funzionalità per mantenere la separazione dei ruoli.

Utenti Privati ed Enti

Gli utenti normali gestiscono solo i propri contenuti:

  • Proposte: Creare e gestire le proprie proposte
  • Commenti: Commentare proposte approvate
  • Follow: Seguire altri utenti
  • NON possono: Moderare, vedere dati sensibili di altri utenti

Modello Utente Unificato

L'API espone un modello utente unico con user_type che può essere:

  • "privato": Cittadino privato
  • "ente": Ente/organizzazione

Architettura Backend:

  • Nel database esistono due collezioni distinte (Privato e Ente)
  • Ogni collezione ha il proprio modello con campi specifici
  • L'API unifica le risposte tramite il campo user_type
  • L'autenticazione è gestita tramite il modello Credenziali condiviso

Schemi Utente Disponibili

L'API fornisce diversi schemi utente in base al contesto d'uso:

Schema Utilizzo Dati Inclusi Accesso
UserBase Schema base comune Dati pubblici essenziali Tutti
UserSearchResult Ricerche e profili pubblici Dati base + email condizionale Pubblico/Operatori
UserComplete Profilo personale Dati completi + credenziali sicure Solo proprietario
UserForOperators Gestione amministrativa Dati completi + sensibili Solo operatori
UserFollowInfo Liste follow Dati base senza contatori Pubblico

Sicurezza dei Dati:

  • Dati pubblici: Nome, biografia, foto profilo, data creazione (sempre visibili)
  • Dati sensibili: Email, codice fiscale (visibili solo agli operatori autenticati)
  • Endpoint pubblici: Ricerca e visualizzazione utenti senza autenticazione
  • Controllo accesso: Gli operatori vedono tutti i dati, gli altri utenti solo dati pubblici

Modello Credenziali

Il modello Credenziali gestisce l'autenticazione per tutti i tipi di utente:

  • Password: Autenticazione tradizionale (obbligatoria per signup classico)
  • OAuth: Autenticazione Google (obbligatoria per signup Google)
  • Email: Campo unico per identificazione

Intercambiabilità: Password e OAuth sono intercambiabili:

  • Un utente può registrarsi con password e poi collegare Google
  • Un utente può registrarsi con Google e poi impostare una password
  • Entrambi i metodi sono validi per l'autenticazione

Visibilità Condizionale dei Dati Utente

La visibilità dei dati utente varia in base al ruolo dell'utente che fa la richiesta:

Campo Pubblico Autenticato Operatore
nome, biografia, fotoProfilo, createdAt ✅ Sempre ✅ Sempre ✅ Sempre
cognome (privati) ✅ Sempre ✅ Sempre ✅ Sempre
nome_org (enti) ✅ Sempre ✅ Sempre ✅ Sempre
email ❌ Mai ❌ Mai ✅ Sempre
codiceFiscale ❌ Mai ❌ Mai ✅ Sempre

Esempi di utilizzo:

  • Endpoint pubblici (/api/user/search, /api/user/{id}): Dati base senza email/codice fiscale
  • Profilo personale (/api/user/me): Dati completi con credenziali sicure
  • Gestione operatori (/api/user): Dati completi con email e codice fiscale

Upload e Limiti

  • Immagini profilo: Limite 5MB
  • Immagini proposte: Limite 5MB (specifico per le proposte)
  • Formati supportati: JPEG, PNG, GIF, WebP

Nota: I limiti sono applicati separatamente per profilo e proposte, ma entrambi sono 5MB.

System

Welcome message

Messaggio di benvenuto dell'API con controlli di sicurezza configurabili.

Controlli Configurabili:

  • ENABLE_SECURITY_CONTROLS: Abilita/disabilita controlli password (default: true)
  • JWT_SECRET: Chiave segreta per firma JWT (obbligatoria)
  • ADMIN_EMAIL e ADMIN_PASSWORD: Credenziali admin speciali

Funzionalità:

  • Endpoint pubblico accessibile senza autenticazione
  • Verifica stato server e configurazione
  • Messaggio di benvenuto personalizzabile

Responses

Response samples

Content type
application/json
{
  • "message": "Benvenuti nelle API di InCrowd"
}

Health check

Verifica lo stato del server

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Server is running"
}

Authentication

Login utente

Autentica un utente e restituisce JWT token

Request Body schema: application/json
required
email
required
string <email>
password
required
string

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Login completato con successo"
}

Login Google OAuth

Autentica un utente tramite Google OAuth e restituisce JWT token.

Flusso:

  1. Frontend ottiene idToken da Google Sign-In
  2. Frontend invia idToken a questo endpoint
  3. Backend verifica il token con Google
  4. Se l'utente esiste, restituisce JWT
  5. Se l'utente non esiste, restituisce needsRegistration: true

Casi d'uso:

  • Login utente esistente con Google
  • Verifica utente per registrazione Google
Request Body schema: application/json
required
idToken
required
string

ID token ottenuto da Google Sign-In

Responses

Request samples

Content type
application/json
{
  • "idToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFiYzFm..."
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Login Google completato con successo"
}

Collega account Google

Collega un account Google esistente all'utente autenticato.

Requisiti:

  • Utente deve essere autenticato
  • Account Google non deve essere già collegato ad altri utenti

Flusso:

  1. Utente autenticato ottiene idToken da Google
  2. Frontend invia idToken a questo endpoint
  3. Backend verifica e collega l'account
  4. Utente può ora fare login con Google o password
Authorizations:
bearerAuth
Request Body schema: application/json
required
idToken
required
string

ID token ottenuto da Google Sign-In

Responses

Request samples

Content type
application/json
{
  • "idToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFiYzFm..."
}

Response samples

Content type
application/json
{
  • "message": "Account Google collegato con successo"
}

Imposta password per utenti senza password

Imposta la password per utenti (privati ed enti) che non ne hanno una.

IMPORTANTE: Questo endpoint NON permette di cambiare una password esistente. È utilizzato solo per impostare una password per utenti che si sono registrati tramite Google OAuth e non hanno ancora impostato una password tradizionale.

Requisiti:

  • Utente deve essere autenticato
  • Utente non deve avere già una password impostata

Casi d'uso:

  • Utenti registrati con Google che vogliono aggiungere una password
  • Completamento profilo per utenti OAuth-only
Authorizations:
bearerAuth
Request Body schema: application/json
required
newPassword
required
string

Nuova password da impostare. Deve rispettare i requisiti di sicurezza

Responses

Request samples

Content type
application/json
{
  • "newPassword": "NewPassword456!"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Password impostata con successo"
}

Users

Lista tutti gli utenti

Recupera tutti gli utenti (solo per operatori).

Accesso: Solo operatori autenticati (NO admin) Dati inclusi: Nome, biografia, foto profilo, email, codice fiscale Sicurezza: Include dati sensibili non visibili agli utenti pubblici Utilizzo: Per gestione amministrativa e moderazione

IMPORTANTE: Gli admin non possono accedere a questo endpoint per vedere i dati utente. Gli admin possono solo gestire gli account operatori. Questa è una limitazione di sicurezza intenzionale per mantenere la separazione dei ruoli.

Per vedere i dati utente come admin:

  1. Creare un account operatore tramite /api/operatori
  2. Utilizzare l'account operatore per accedere a questo endpoint
  3. Mantenere l'account admin solo per la gestione degli operatori
Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Utenti recuperati con successo"
}

Crea nuovo utente

Crea un nuovo utente (privato o ente) con validazione dei dati.

Campi obbligatori per tutti:

  • user_type ('privato' | 'ente')
  • nome, codiceFiscale, email, password

Campi specifici per privati:

  • cognome (obbligatorio)
Request Body schema: multipart/form-data
required
user_type
required
string
Enum: "privato" "ente"
nome
required
string

Nome visualizzato, può essere il nome di una persona o un'organizzazione

cognome
string

Obbligatorio per user_type='privato'

codiceFiscale
required
string
biografia
string
email
required
string <email>
password
required
string

Deve rispettare i requisiti di sicurezza

fotoProfilo
string <binary>

Immagine profilo (max 5MB)

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Utente creato con successo"
}

Profilo utente corrente

Recupera il profilo completo dell'utente autenticato

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Profilo recuperato con successo"
}

Aggiorna profilo

Aggiorna il profilo dell'utente autenticato

Authorizations:
bearerAuth
Request Body schema: multipart/form-data
nome
string

Nome visualizzato, può essere il nome di una persona o un'organizzazione

cognome
string

Solo per utenti privati

biografia
string
fotoProfilo
string <binary>

Nuova immagine profilo (max 5MB)

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Profilo aggiornato con successo"
}

Elimina account

Elimina l'account dell'utente autenticato

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "message": "Account eliminato con successo"
}

Cerca utenti

Cerca utenti per nome, cognome o biografia.

Sicurezza:

  • Endpoint pubblico accessibile senza autenticazione
  • Email e dati sensibili sono visibili solo agli operatori autenticati
  • Utenti non autenticati vedono solo dati pubblici (nome, biografia, foto)

Esempi di ricerca:

  • ?q=Mario - Cerca "Mario" in tutti i campi
  • ?q=Comune&user_type=ente - Cerca "Comune" solo negli enti
  • ?q=sviluppatore - Cerca "sviluppatore" in tutti i campi
query Parameters
q
required
string >= 2 characters
Example: q=Mario

Query di ricerca (minimo 2 caratteri)

user_type
string
Enum: "privato" "ente"
Example: user_type=privato

Filtra per tipo utente

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Ricerca completata"
}

Dettagli utente

Recupera i dettagli di un utente specifico.

Sicurezza:

  • Endpoint pubblico accessibile senza autenticazione
  • Email e dati sensibili sono visibili solo agli operatori autenticati
  • Utenti non autenticati vedono solo dati pubblici (nome, biografia, foto)

Esempi di risposta per diversi tipi:

path Parameters
id
required
string
Example: 64a1b2c3d4e5f678901234

Responses

Response samples

Content type
application/json
Example

Nota: email è visibile solo agli operatori

{
  • "data": {
    },
  • "message": "Utente recuperato con successo"
}

Avatar utente

Recupera solo l'avatar di un utente

path Parameters
id
required
string
Example: 64a1b2c3d4e5f678901234

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Avatar recuperato"
}

Proposte

Lista proposte approvate

Recupera tutte le proposte approvate pubblicamente.

Filtri applicati:

  • Solo proposte con stato "approvata"
  • Ordinate per data di creazione (più recenti prima)
  • Accesso pubblico senza autenticazione

Campi inclusi:

  • Dati base della proposta
  • Proponente (ID e tipo)
  • Contatori calcolati (hype = listaHyper.length)

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Proposte recuperate con successo"
}

Crea nuova proposta

Crea una nuova proposta con upload immagine opzionale.

Accesso: Solo utenti autenticati (privati ed enti) Upload: Immagine opzionale (max 5MB, formati: JPEG, PNG, GIF, WebP) Stato iniziale: "bozza" (richiede approvazione operatore) Validazioni: Titolo e descrizione obbligatori

Authorizations:
bearerAuth
Request Body schema: multipart/form-data
required
titolo
required
string

Titolo della proposta

descrizione
required
string

Descrizione dettagliata

categoria
required
string
Enum: "cultura" "concerti" "mostreInstallazioni" "sport" "workshopCorsi" "conferenze"

Categoria della proposta (obbligatoria)

object
dataIpotetica
string <date-time>

Data ipotetica di realizzazione

foto
string <binary>

Immagine della proposta (max 5MB, JPEG/PNG/GIF/WebP)

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Proposta creata con successo"
}

Ultimi commenti globali

Recupera tutti i commenti da tutte le proposte (solo operatori).

Accesso: Solo operatori autenticati (NO admin) Ordinamento: Per data commento (più recenti prima) Dati inclusi: Proposta (titolo, ID) e utente (nome, cognome)

IMPORTANTE: Gli admin non possono accedere a questo endpoint per vedere commenti globali. Gli admin possono solo gestire gli account operatori. Questa è una limitazione di sicurezza intenzionale per mantenere la separazione dei ruoli.

Per vedere commenti globali come admin:

  1. Creare un account operatore tramite /api/operatori
  2. Utilizzare l'account operatore per accedere a questo endpoint
  3. Mantenere l'account admin solo per la gestione degli operatori
Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Tutti i commenti"
}

Proposte utente corrente

Recupera tutte le proposte dell'utente autenticato.

Accesso: Solo utenti autenticati (privati ed enti) Filtri: Tutti gli stati (bozza, pubblicata, in_corso, completata, respinta) Ordinamento: Per data di creazione (più recenti prima)

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Proposte utente recuperate"
}

Proposte utenti seguiti

Recupera le proposte approvate degli utenti seguiti dall'utente corrente.

Accesso: Solo utenti autenticati Filtri: Solo proposte approvate Ordinamento: Per data di creazione (più recenti prima) Limitazioni: Solo proposte di utenti attualmente seguiti

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Proposte utenti seguiti recuperate"
}

Ricerca proposte

Cerca proposte per testo, categoria, città o stato.

Parametri di ricerca:

  • q: Testo libero (titolo, descrizione)
  • categoria: Filtra per categoria specifica
  • citta: Filtra per città
  • stato: Filtra per stato (bozza, pubblicata, in_corso, completata, respinta)
  • sortBy: Ordinamento (createdAt, listaHyper, titolo)
  • sortOrder: Direzione ordinamento (asc, desc)

Accesso: Pubblico senza autenticazione Filtri: Solo proposte approvate

query Parameters
q
string
Example: q=parco

Testo di ricerca libera

categoria
string
Example: categoria=Ambiente

Categoria specifica

citta
string
Example: citta=Gardolo

Città specifica

stato
string
Enum: "bozza" "pubblicata" "in_corso" "completata" "respinta"
Example: stato=pubblicata

Stato della proposta

sortBy
string
Enum: "createdAt" "listaHyper" "titolo"
Example: sortBy=createdAt

Campo per ordinamento

sortOrder
string
Enum: "asc" "desc"
Example: sortOrder=desc

Direzione ordinamento

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Ricerca completata"
}

Proposte utente specifico

Recupera le proposte approvate di un utente specifico.

Accesso: Pubblico senza autenticazione Filtri: Solo proposte approvate Ordinamento: Per data di creazione (più recenti prima) Utente: Può essere privato o ente (identificato automaticamente)

path Parameters
userId
required
string
Example: 64a1b2c3d4e5f678901234

ID dell'utente (privato o ente)

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Proposte utente recuperate"
}

Proposte in attesa di moderazione

Recupera le proposte in attesa di approvazione (solo operatori).

Accesso: Solo operatori autenticati (NO admin) Stato: Solo proposte con stato "bozza" Ordinamento: Per data di creazione (più recenti prima) Utilizzo: Per moderazione e revisione proposte

IMPORTANTE: Gli admin non possono accedere a questo endpoint per moderare proposte. Gli admin possono solo gestire gli account operatori. Questa è una limitazione di sicurezza intenzionale per mantenere la separazione dei ruoli.

Per moderare proposte come admin:

  1. Creare un account operatore tramite /api/operatori
  2. Utilizzare l'account operatore per accedere a questo endpoint
  3. Mantenere l'account admin solo per la gestione degli operatori
Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Proposte in attesa recuperate"
}

Dettagli proposta

Recupera i dettagli completi di una proposta specifica.

Accesso: Pubblico senza autenticazione O proprietario autenticato Dati inclusi: Tutti i campi della proposta, proponente, commenti Stato: Solo proposte approvate sono visibili pubblicamente Sicurezza: Il proprietario può vedere le proprie proposte indipendentemente dallo stato (in_approvazione, rifiutata, etc.)

path Parameters
id
required
string
Example: 64a1b2c3d4e5f678901234

ID della proposta

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Proposta recuperata con successo"
}

Elimina proposta

Elimina una proposta e tutti i suoi commenti.

Accesso: Solo il proponente, operatori o admin Validazioni: Proposta deve esistere e appartenere all'utente Sicurezza: Solo il proprietario può eliminare le proprie proposte

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: 64a1b2c3d4e5f678901234

ID della proposta

Responses

Response samples

Content type
application/json
{
  • "message": "Proposta eliminata con successo"
}

Toggle hype proposta

Aggiunge o rimuove l'utente corrente dalla lista hype della proposta.

Accesso: Solo utenti autenticati (privati ed enti) Funzionamento: Se l'utente è già nella lista, viene rimosso; altrimenti viene aggiunto Risultato: Lista hype aggiornata (il contatore è calcolato lato frontend)

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: 64a1b2c3d4e5f678901234

ID della proposta

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Lista commenti proposta

Recupera tutti i commenti di una proposta specifica.

Accesso: Pubblico senza autenticazione Ordinamento: Per data commento (più recenti prima) Dati inclusi: Contenuto, data, utente (nome, cognome)

path Parameters
id
required
string
Example: 64a1b2c3d4e5f678901234

ID della proposta

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Commenti recuperati"
}

Aggiungi commento

Aggiunge un nuovo commento a una proposta.

Accesso: Solo utenti autenticati (privati ed enti) Validazioni: Contenuto obbligatorio e non vuoto Stato: Solo proposte approvate possono ricevere commenti

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: 64a1b2c3d4e5f678901234

ID della proposta

Request Body schema: application/json
required
contenuto
required
string

Testo del commento

Responses

Request samples

Content type
application/json
{
  • "contenuto": "Ottima idea! Sostengo questa proposta"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Commento aggiunto con successo"
}

Aggiorna stato proposta

Aggiorna lo stato di una proposta (moderazione).

Accesso: Solo operatori e admin Stati possibili: bozza, pubblicata, in_corso, completata, respinta Commento: Opzionale per spiegare il cambio di stato

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: 64a1b2c3d4e5f678901234

ID della proposta

Request Body schema: application/json
stato
required
string
Enum: "bozza" "pubblicata" "in_corso" "completata" "respinta"

Nuovo stato della proposta

commento
string

Commento opzionale per il cambio di stato

Responses

Request samples

Content type
application/json
{
  • "stato": "pubblicata",
  • "commento": "Proposta approvata e pubblicata"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Stato proposta aggiornato"
}

Elimina commento

Elimina un commento specifico da una proposta.

Accesso: Solo il creatore del commento o operatori/admin Validazioni: Commento deve esistere e appartenere alla proposta Sicurezza: Solo il proprietario può eliminare i propri commenti

Authorizations:
bearerAuth
path Parameters
propostaId
required
string
Example: 64a1b2c3d4e5f678901234

ID della proposta

commentoId
required
string
Example: 64a1b2c3d4e5f678901235

ID del commento

Responses

Response samples

Content type
application/json
{
  • "message": "Commento eliminato con successo"
}

Follow

Segui utente

Segue un utente specifico (privato o ente).

Accesso: Solo utenti autenticati (privati ed enti) Validazioni: Utente da seguire deve esistere e non essere già seguito Risultato: Relazione di follow creata (il contatore è calcolato lato frontend)

Authorizations:
bearerAuth
path Parameters
userId
required
string
Example: 64a1b2c3d4e5f678901234

ID dell'utente da seguire

Responses

Response samples

Content type
application/json
{
  • "message": "Utente seguito con successo"
}

Smetti di seguire utente

Smette di seguire un utente specifico.

Accesso: Solo utenti autenticati Validazioni: Relazione di follow deve esistere Risultato: Relazione di follow rimossa (il contatore è calcolato lato frontend)

Authorizations:
bearerAuth
path Parameters
userId
required
string
Example: 64a1b2c3d4e5f678901234

ID dell'utente da smettere di seguire

Responses

Response samples

Content type
application/json
{
  • "message": "Follow rimosso con successo"
}

Lista followers

Recupera la lista dei follower di un utente specifico.

Accesso: Pubblico senza autenticazione Dati inclusi: ID e dati base degli utenti follower Ordinamento: Per data di follow (più recenti prima) Nota: I contatori followersCount e followingCount sono calcolati lato frontend tramite array.length

path Parameters
userId
required
string
Example: 64a1b2c3d4e5f678901234

ID dell'utente

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Followers recuperati"
}

Lista following

Recupera la lista degli utenti seguiti da un utente specifico.

Accesso: Pubblico senza autenticazione Dati inclusi: ID e dati base degli utenti seguiti Ordinamento: Per data di follow (più recenti prima) Nota: I contatori followersCount e followingCount sono calcolati lato frontend tramite array.length

path Parameters
userId
required
string
Example: 64a1b2c3d4e5f678901234

ID dell'utente

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Following recuperati"
}

Status follow

Verifica se l'utente corrente segue un utente specifico.

Accesso: Solo utenti autenticati Risultato: Boolean che indica se l'utente è seguito Utilizzo: Per mostrare stato pulsante follow/unfollow Nota: I contatori followersCount e followingCount sono calcolati lato frontend tramite array.length

Authorizations:
bearerAuth
path Parameters
userId
required
string
Example: 64a1b2c3d4e5f678901234

ID dell'utente da verificare

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Status follow verificato"
}

Operatori

Lista operatori

Recupera tutti gli operatori (solo admin)

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Operatori recuperati con successo"
}

Crea operatore

Crea un nuovo operatore (solo admin)

Authorizations:
bearerAuth
Request Body schema: application/json
required
nome
required
string
email
required
string <email>
password
required
string

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Operatore creato con successo"
}

Elimina operatore

Elimina un operatore (solo admin)

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: 64a1b2c3d4e5f678901234

Responses

Response samples

Content type
application/json
{
  • "message": "Operatore eliminato con successo"
}

Statistiche operatore

Recupera le statistiche dell'operatore autenticato

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Statistiche recuperate"
}