Un code-barre inconnu scanné propose désormais le même formulaire de création que /materiels au lieu d'un simple message d'erreur. La quantité peut être ajustée d'un delta choisi librement (pas figé à ±1) ou définie directement à une valeur absolue après un inventaire. La racine "/" sert directement la liste des matériels sans redirection. La page Matériels gagne un filtre par catégorie, un filtre stock bas, et un tri incluant un regroupement par catégorie.
34 lines
977 B
Python
34 lines
977 B
Python
"""
|
|
Point d'entrée de l'application FastAPI.
|
|
|
|
Lancement en local : uvicorn app.main:app --reload
|
|
"""
|
|
|
|
from contextlib import asynccontextmanager
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
|
from app.database import init_db
|
|
from app.routers import categories, destinataires, materiels, scan
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
"""Crée les tables SQLite au démarrage si elles n'existent pas encore."""
|
|
init_db()
|
|
yield
|
|
|
|
|
|
app = FastAPI(title="Gestion de stock IT", lifespan=lifespan)
|
|
|
|
app.mount("/static", StaticFiles(directory="app/static"), name="static")
|
|
|
|
app.include_router(categories.router)
|
|
# "/" est enregistrée directement sur le routeur materiels (voir
|
|
# lister_materiels) pour afficher la liste des matériels sans redirection
|
|
# HTTP : l'URL reste "/" plutôt que de rebondir vers "/materiels".
|
|
app.include_router(materiels.router)
|
|
app.include_router(scan.router)
|
|
app.include_router(destinataires.router)
|