Spaces:
Sleeping
Sleeping
| 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() | |
| def root(): | |
| return {"status": "API en marche", "message": "Bienvenue sur l'API d'offres d'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."} | |
| 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) |