File size: 3,511 Bytes
585d753
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
01a35a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
585d753
01a35a9
 
 
 
 
 
 
 
585d753
 
01a35a9
585d753
01a35a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
585d753
01a35a9
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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)}