File size: 3,485 Bytes
61e6fe7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
de9ae20
 
 
 
 
 
61e6fe7
 
 
de9ae20
61e6fe7
 
 
 
 
 
 
 
de9ae20
 
 
 
 
 
61e6fe7
 
 
 
de9ae20
 
 
 
 
 
61e6fe7
 
de9ae20
61e6fe7
 
 
 
 
 
 
 
de9ae20
 
 
 
 
 
61e6fe7
 
 
 
 
 
 
de9ae20
61e6fe7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
de9ae20
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
93
94
95
96
97
import os
from dotenv import load_dotenv
load_dotenv()
from sqlalchemy import create_engine, text
from fastapi import FastAPI, Depends

DATABASE_URL = os.getenv('DATABASE_URL')

def get_engine():
    if not DATABASE_URL:
        raise ValueError("L'URL de la base de données (DATABASE_URL) n'est pas définie dans l'environnement.")
    engine = create_engine(DATABASE_URL)
    return engine

def get_db_connection(engine=Depends(get_engine)):
    with engine.connect() as connection:
        yield connection

def load_job_offer(connection):
    # MISE À JOUR : Requête avec toutes les nouvelles colonnes
    query_offre = text('''
        SELECT entreprise, ville, poste, contrat, description_poste, publication, lien, id,
               description_nettoyee, mission, profil_recherche, competences, pole 
        FROM "job_offers"
    ''')
    resultats = connection.execute(query_offre).fetchall()
    offres = []
    for row in resultats:
        entreprise, ville, poste, contrat, description_poste, publication, lien, id, description_nettoyee, mission, profil_recherche, competences, pole = row
        offres.append({
            "entreprise": entreprise,
            "ville": ville,
            "poste": poste,
            "contrat": contrat,
            "description_poste": description_poste,
            "publication": publication,
            "lien": lien,
            "id": id,
            "description_nettoyee": description_nettoyee,
            "mission": mission,
            "profil_recherche": profil_recherche,
            "competences": competences,
            "pole": pole
        })
    return offres

def get_job_offer_by_id(connection, offre_id: str):
    query = text('''
        SELECT entreprise, ville, poste, contrat, description_poste, publication, lien, id,
               description_nettoyee, mission, profil_recherche, competences, pole 
        FROM "job_offers" 
        WHERE id = :id
    ''')
    result = connection.execute(query, {"id": offre_id}).fetchone()
    if result:
        entreprise, ville, poste, contrat, description_poste, publication, lien, id, description_nettoyee, mission, profil_recherche, competences, pole = result
        return {
            "entreprise": entreprise,
            "ville": ville,
            "poste": poste,
            "contrat": contrat,
            "description_poste": description_poste,
            "publication": publication,
            "lien": lien,
            "id": id,
            "description_nettoyee": description_nettoyee,
            "mission": mission,
            "profil_recherche": profil_recherche,
            "competences": competences,
            "pole": pole
        }
    return None

app = FastAPI()

@app.get("/")
def root():
    return {"status": "API en marche", "message": "Bienvenue sur l'API d'offres d'emploi !"}

@app.get("/offre-emploi")
async def read_job_offer(connection = Depends(get_db_connection)):
    offres = load_job_offer(connection)
    if offres:
        return offres
    return {"message": "Aucune offre d'emploi trouvée."}

@app.get("/offre-emploi/{offre_id}")
async def read_job_offer_by_id(offre_id: str, connection = Depends(get_db_connection)):
    offre = get_job_offer_by_id(connection, offre_id)
    if offre:
        return offre
    return {"message": f"Aucune offre trouvée avec l'id {offre_id}"}

if __name__ == "__main__":
    import uvicorn
    port = int(os.environ.get("PORT", 7860))
    uvicorn.run(app, host="0.0.0.0", port=port)