Skip to content
Snippets Groups Projects
Commit f8db38ba authored by DIROU Aina's avatar DIROU Aina
Browse files
parents 0d448d81 2ac75484
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ from fastapi.middleware.cors import CORSMiddleware ...@@ -3,6 +3,7 @@ from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel from pydantic import BaseModel
from datetime import timedelta, date, datetime from datetime import timedelta, date, datetime
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from sqlalchemy import desc, func
from typing import Annotated from typing import Annotated
from .database import engine, SessionLocal from .database import engine, SessionLocal
from .models import * from .models import *
...@@ -57,7 +58,7 @@ class ParcelleBase(BaseModel): ...@@ -57,7 +58,7 @@ class ParcelleBase(BaseModel):
class ActionBase(BaseModel): class ActionBase(BaseModel):
nom : str nom : str
descritpion : str description : str
class FicheBase(BaseModel): class FicheBase(BaseModel):
nom : str nom : str
...@@ -80,7 +81,7 @@ class TacheBase(BaseModel): ...@@ -80,7 +81,7 @@ class TacheBase(BaseModel):
class CapteurBase(BaseModel): class CapteurBase(BaseModel):
nom : str nom : str
descritpion : str description : str
unite : str unite : str
parcelle_id : int parcelle_id : int
...@@ -233,6 +234,54 @@ async def read_capteur_by_name(capteur_nom: str, db: db_dependency): ...@@ -233,6 +234,54 @@ async def read_capteur_by_name(capteur_nom: str, db: db_dependency):
raise HTTPException(status_code=404, detail="Capteur not found") raise HTTPException(status_code=404, detail="Capteur not found")
return capteur return capteur
@app.get("/capteurs/", tags=["Capteur"], status_code=status.HTTP_200_OK)
async def read_capteurs(db: db_dependency):
capteurs = db.query(Capteur).all()
if capteurs is None:
raise HTTPException(status_code=404, detail="Capteurs not found")
return capteurs
@app.get("/capteurs-releve/", tags=["Capteur"], status_code=status.HTTP_200_OK)
async def read_capteurs_last_releve(db: db_dependency):
subquery = (
db.query(
Releve.capteur_id,
func.max(Releve.date_releve).label("max_date_releve")
)
.group_by(Releve.capteur_id)
.subquery()
)
# Requête principale pour récupérer les derniers relevés pour chaque capteur
query = (
db.query(
Capteur,
subquery.c.max_date_releve.label("date_releve"),
Releve.valeur
)
.join(subquery, Capteur.id == subquery.c.capteur_id)
.join(Releve, (Releve.capteur_id == Capteur.id) & (Releve.date_releve == subquery.c.max_date_releve))
.all()
)
if not query:
raise HTTPException(status_code=404, detail="Relevé not found")
results = [
{
"capteur_id": capteur.id,
"nom": capteur.nom,
"description": capteur.description,
"unite": capteur.unite,
"parcelle_id": capteur.parcelle_id,
"date_releve": date_releve,
"valeur": valeur
}
for capteur, date_releve, valeur in query
]
return results
@app.post("/releve/", tags=["Relevé"], status_code=status.HTTP_201_CREATED) @app.post("/releve/", tags=["Relevé"], status_code=status.HTTP_201_CREATED)
async def create_releve(releve: ReleveBase, db: db_dependency): async def create_releve(releve: ReleveBase, db: db_dependency):
db_releve = Releve(**releve.dict()) db_releve = Releve(**releve.dict())
......
...@@ -29,7 +29,7 @@ class Action(Base): ...@@ -29,7 +29,7 @@ class Action(Base):
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
nom = Column(String(50)) nom = Column(String(50))
descritpion = Column(String(100)) description = Column(String(100))
class Fiche(Base): class Fiche(Base):
__tablename__ = 'fiche' __tablename__ = 'fiche'
...@@ -61,7 +61,7 @@ class Capteur(Base): ...@@ -61,7 +61,7 @@ class Capteur(Base):
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
nom = Column(String(50)) nom = Column(String(50))
descritpion = Column(String(100)) description = Column(String(100))
unite = Column(String(10)) unite = Column(String(10))
parcelle_id = Column(Integer) parcelle_id = Column(Integer)
......
...@@ -3,6 +3,8 @@ import { useState, useEffect } from 'react'; ...@@ -3,6 +3,8 @@ import { useState, useEffect } from 'react';
function Home() { function Home() {
const [jardin, setJardin] = useState([]); const [jardin, setJardin] = useState([]);
const [capteurs, setCapteurs] = useState([]);
useEffect(() => { useEffect(() => {
fetch(`http://localhost:9002/jardin/1`,{type: "GET"}) fetch(`http://localhost:9002/jardin/1`,{type: "GET"})
.then(res => res.json()) .then(res => res.json())
...@@ -11,16 +13,38 @@ function Home() { ...@@ -11,16 +13,38 @@ function Home() {
setJardin(result); setJardin(result);
}, },
(error) => { (error) => {
console.log('Erreur lors de la requête GET :', error); console.log('Erreur lors de la requête GET jardin :', error);
}
)
fetch(`http://localhost:9002/capteurs-releve/`,{type: "GET"})
.then(res => res.json())
.then(
(result) => {
setCapteurs(result);
},
(error) => {
console.log('Erreur lors de la requête GET capteurs :', error);
} }
) )
}, []) }, [])
return ( return (
<div> <div>
<h1>Votre jardin : {jardin.nom}</h1> <h1>Votre jardin : {jardin.nom}</h1>
<h3>Informations Générales</h3>
<p>Présentation : {jardin.description}</p> <p>Présentation : {jardin.description}</p>
<p>Addresse : {jardin.numero_adresse} {jardin.rue}, {jardin.code_postal} {jardin.ville}</p> <p>Addresse : {jardin.numero_adresse} {jardin.rue}, {jardin.code_postal} {jardin.ville}</p>
<br/>
<div>
{capteurs.map((capteur) =>
<div key={capteur.capteur_id}>
<h3>Dernier relevé de {capteur.nom}</h3>
<p> Date du relevé : {capteur.date_releve}</p>
<p> valeur : {capteur.valeur} {capteur.unite} </p>
</div>
)}
</div>
</div> </div>
) )
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment