QuentinL52 commited on
Commit
61e6fe7
·
verified ·
1 Parent(s): b9579a5

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +77 -72
main.py CHANGED
@@ -1,72 +1,77 @@
1
- import os
2
- from dotenv import load_dotenv
3
- load_dotenv()
4
- from sqlalchemy import create_engine, text
5
- from fastapi import FastAPI, Depends
6
-
7
- DATABASE_URL = os.getenv('DATABASE_URL')
8
-
9
- def get_engine():
10
- if not DATABASE_URL:
11
- raise ValueError("L'URL de la base de données (PG_URL) n'est pas définie dans l'environnement.")
12
- engine = create_engine(DATABASE_URL)
13
- return engine
14
-
15
- def get_db_connection(engine=Depends(get_engine)):
16
- with engine.connect() as connection:
17
- yield connection
18
-
19
- def load_job_offer(connection):
20
- query_offre = text('SELECT entreprise, ville, poste, contrat, description_poste, publication, lien, id FROM "jobs_offers"')
21
- resultats = connection.execute(query_offre).fetchall()
22
- offres = []
23
- for row in resultats:
24
- entreprise, ville, poste, contrat, description_poste, publication, lien, id = row
25
- offres.append({
26
- "entreprise": entreprise,
27
- "ville": ville,
28
- "poste": poste,
29
- "contrat": contrat,
30
- "description_poste": description_poste,
31
- "publication": publication,
32
- "lien": lien,
33
- "id": id
34
- })
35
- return offres
36
-
37
- def get_job_offer_by_id(connection, offre_id: str):
38
- query = text('SELECT entreprise, ville, poste, contrat, description_poste, publication, lien, id FROM "jobs_offers" WHERE id = :id')
39
- result = connection.execute(query, {"id": offre_id}).fetchone()
40
- if result:
41
- entreprise, ville, poste, contrat, description_poste, publication, lien, id = result
42
- return {
43
- "entreprise": entreprise,
44
- "ville": ville,
45
- "poste": poste,
46
- "contrat": contrat,
47
- "description_poste": description_poste,
48
- "publication": publication,
49
- "lien": lien,
50
- "id": id
51
- }
52
- return None
53
-
54
- app = FastAPI()
55
-
56
- @app.get("/offre-emploi")
57
- async def read_job_offer(connection = Depends(get_db_connection)):
58
- offres = load_job_offer(connection)
59
- if offres:
60
- return offres
61
- return {"message": "Aucune offre d'emploi trouvée."}
62
-
63
- @app.get("/offre-emploi/{offre_id}")
64
- async def read_job_offer_by_id(offre_id: str, connection = Depends(get_db_connection)):
65
- offre = get_job_offer_by_id(connection, offre_id)
66
- if offre:
67
- return offre
68
- return {"message": f"Aucune offre trouvée avec l'id {offre_id}"}
69
-
70
- if __name__ == "__main__":
71
- import uvicorn
72
- uvicorn.run(app, host="0.0.0.0", port=8010)
 
 
 
 
 
 
1
+ import os
2
+ from dotenv import load_dotenv
3
+ load_dotenv()
4
+ from sqlalchemy import create_engine, text
5
+ from fastapi import FastAPI, Depends
6
+
7
+ DATABASE_URL = os.getenv('DATABASE_URL')
8
+
9
+ def get_engine():
10
+ if not DATABASE_URL:
11
+ raise ValueError("L'URL de la base de données (DATABASE_URL) n'est pas définie dans l'environnement.")
12
+ engine = create_engine(DATABASE_URL)
13
+ return engine
14
+
15
+ def get_db_connection(engine=Depends(get_engine)):
16
+ with engine.connect() as connection:
17
+ yield connection
18
+
19
+ def load_job_offer(connection):
20
+ query_offre = text('SELECT entreprise, ville, poste, contrat, description_poste, publication, lien, id FROM "jobs_offers"')
21
+ resultats = connection.execute(query_offre).fetchall()
22
+ offres = []
23
+ for row in resultats:
24
+ entreprise, ville, poste, contrat, description_poste, publication, lien, id = row
25
+ offres.append({
26
+ "entreprise": entreprise,
27
+ "ville": ville,
28
+ "poste": poste,
29
+ "contrat": contrat,
30
+ "description_poste": description_poste,
31
+ "publication": publication,
32
+ "lien": lien,
33
+ "id": id
34
+ })
35
+ return offres
36
+
37
+ def get_job_offer_by_id(connection, offre_id: str):
38
+ query = text('SELECT entreprise, ville, poste, contrat, description_poste, publication, lien, id FROM "jobs_offers" WHERE id = :id')
39
+ result = connection.execute(query, {"id": offre_id}).fetchone()
40
+ if result:
41
+ entreprise, ville, poste, contrat, description_poste, publication, lien, id = result
42
+ return {
43
+ "entreprise": entreprise,
44
+ "ville": ville,
45
+ "poste": poste,
46
+ "contrat": contrat,
47
+ "description_poste": description_poste,
48
+ "publication": publication,
49
+ "lien": lien,
50
+ "id": id
51
+ }
52
+ return None
53
+
54
+ app = FastAPI()
55
+
56
+ @app.get("/")
57
+ def root():
58
+ return {"status": "API en marche", "message": "Bienvenue sur l’API d’offres d’emploi !"}
59
+
60
+ @app.get("/offre-emploi")
61
+ async def read_job_offer(connection = Depends(get_db_connection)):
62
+ offres = load_job_offer(connection)
63
+ if offres:
64
+ return offres
65
+ return {"message": "Aucune offre d'emploi trouvée."}
66
+
67
+ @app.get("/offre-emploi/{offre_id}")
68
+ async def read_job_offer_by_id(offre_id: str, connection = Depends(get_db_connection)):
69
+ offre = get_job_offer_by_id(connection, offre_id)
70
+ if offre:
71
+ return offre
72
+ return {"message": f"Aucune offre trouvée avec l'id {offre_id}"}
73
+
74
+ if __name__ == "__main__":
75
+ import uvicorn
76
+ port = int(os.environ.get("PORT", 7860))
77
+ uvicorn.run(app, host="0.0.0.0", port=port)