Loren's picture
Upload 2 files
01a35a9 verified
raw
history blame
3.51 kB
from fastapi import FastAPI, Query
from typing import List
from app import database
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI(
title="Articles API",
description="API pour récupérer articles et tags depuis SQLite",
version="1.0"
)
# CORS pour permettre l'accès depuis le navigateur
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # autorise toutes les origines
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/get_tags")
def get_tags():
"""
Récupère la liste de tous les tags disponibles via l'API.
Returns:
Dict: Un dictionnaire contenant soit la liste des tags, soit les informations d'erreur.
- Si succès :
{
"tags": List[str] # Liste des noms de tags triés par ordre alphabétique
}
- En cas d'erreur :
{
"status": "error",
"code": str, # Nom de l'exception
"message": str # Message de l'exception
}
Notes:
- L'appel de cet endpoint effectue un accès à la base de données via la fonction `fetch_tags`.
- En cas de problème avec la base de données, un message d'erreur détaillé est retourné.
"""
try:
dict_result = database.fetch_tags()
if dict_result["status"] == "ok":
return {"tags": dict_result["result"]}
else:
return dict_result
except Exception as e:
return {"status": "error", "code": type(e).__name__, "message": str(e)}
@app.get("/get_articles_with_tags")
def get_articles_with_tags(tags: List[str] = Query(..., description="Liste des tags à filtrer")):
"""
Récupère les articles associés à une ou plusieurs tags spécifiés.
Args:
tags (List[str]): Liste des noms de tags utilisés pour filtrer les articles.
Doit contenir au moins un tag.
Returns:
Dict: Un dictionnaire contenant soit les articles correspondants, soit les informations d'erreur.
- Si succès :
{
"tags": List[str], # Tags utilisés pour filtrer
"articles": List[Dict] # Liste des articles correspondants
}
Chaque article est un dictionnaire contenant :
- 'article_id': int, ID de l'article
- 'article_title': str, Titre de l'article
- 'article_url': str, URL de l'article
- En cas d'erreur :
{
"status": "error",
"code": str, # Code d'erreur ou nom de l'exception
"message": str # Message d'erreur
}
Notes:
- Si la liste `tags` est vide, la fonction retourne une erreur avec le code "no_tags".
- L'appel de cet endpoint utilise la fonction `fetch_articles_by_tags` pour récupérer les articles.
"""
try:
dict_result = database.fetch_articles_by_tags(tags)
if dict_result["status"] == "ok":
return {"tags": tags,
"articles": dict_result["result"]}
else:
return dict_result
except Exception as e:
return {"status": "error", "code": type(e).__name__, "message": str(e)}