Catalogo food
Plate, Drink, Ingredient e le categorie PlateCategory / DrinkCategory, con la relazione ingredienti‑piatto.
Integri FoodManager nella tua app web, mobile o nel tuo POS. REST + JSON, autenticazione JWT e una documentazione OpenAPI sempre allineata al codice.
CRUD completo per ogni entità. Lo spec OpenAPI è la sorgente di verità sempre aggiornata.
Plate, Drink, Ingredient e le categorie PlateCategory / DrinkCategory, con la relazione ingredienti‑piatto.
User e UserGroup con permessi granulari e isolamento dei dati per gruppo (multi‑tenant).
/login, /refresh, /logout con access/refresh token JWT e revoca via token version.
Autenticati con POST /login, includi il token come
Bearer nelle richieste successive e lavora sulle risorse.
# 1) effettua il login
curl -X POST http://127.0.0.1:5000/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"••••"}'
# 2) elenca i piatti con il token ricevuto
curl http://127.0.0.1:5000/get_plates \
-H "Authorization: Bearer <access_token>"
const base = "http://127.0.0.1:5000";
const login = await fetch(`${base}/login`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ username: "admin", password: "••••" }),
});
const { access_token } = await login.json();
const plates = await fetch(`${base}/get_plates`, {
headers: { Authorization: `Bearer ${access_token}` },
});
console.log(await plates.json());
import requests
base = "http://127.0.0.1:5000"
auth = requests.post(f"{base}/login", json={
"username": "admin", "password": "••••",
}).json()
plates = requests.get(f"{base}/get_plates", headers={
"Authorization": f'Bearer {auth["access_token"]}',
})
print(plates.json())
Access e refresh token. Revoca al logout basata su token version sul DB, non su blacklist in memoria.
Spec e Swagger UI generate a runtime da flask-openapi3, a partire dai modelli Pydantic.
Ogni risorsa ha un group_id. Visibilità filtrata lato server; il gruppo root amministra tutto.
Flag can_create / read / update / delete e ruolo is_admin per utente.
Payload validati con Pydantic: errori coerenti 422, contratto chiaro e documentato.
Servito da Hypercorn; database SQLite di default, sostituibile con altri backend supportati da SQLAlchemy.
Vuoi vedere tutto il codice dell'integrazione? La documentazione interattiva è su /openapi/swagger.
Avvia il server in locale e apri la Swagger UI per esplorare ogni endpoint.