Skip to content
Snippets Groups Projects
Commit 2ac75484 authored by CHEVRIER Maelys's avatar CHEVRIER Maelys
Browse files

Merge branch 'feature/capteur-front' into 'main'

Feature/capteur front

See merge request m20chevr/smartgarden!18
parents 59afb909 728c5308
No related branches found
No related tags found
No related merge requests found
......@@ -3,7 +3,7 @@ from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from datetime import timedelta, date, datetime
from sqlalchemy.orm import Session
from sqlalchemy import desc
from sqlalchemy import desc, func
from typing import Annotated
from .database import engine, SessionLocal
from .models import *
......@@ -234,6 +234,54 @@ async def read_capteur_by_name(capteur_nom: str, db: db_dependency):
raise HTTPException(status_code=404, detail="Capteur not found")
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)
async def create_releve(releve: ReleveBase, db: db_dependency):
db_releve = Releve(**releve.dict())
......@@ -246,10 +294,3 @@ async def read_releve(releve_id: int, db: db_dependency):
if releve is None:
raise HTTPException(status_code=404, detail="Releve not found")
return releve
@app.get("/releve/", tags=["Relevé"], status_code=status.HTTP_200_OK)
async def read_last_releve(db: db_dependency):
releve = db.query(Releve).order_by(desc(Releve.date)).first()
if releve is None:
raise HTTPException(status_code=404, detail="Releve not found")
return releve
\ No newline at end of file
......@@ -3,7 +3,7 @@ import { useState, useEffect } from 'react';
function Home() {
const [jardin, setJardin] = useState([]);
const [releve, setReleve] = useState([]);
const [capteurs, setCapteurs] = useState([]);
useEffect(() => {
fetch(`http://localhost:9002/jardin/1`,{type: "GET"})
......@@ -13,17 +13,17 @@ function Home() {
setJardin(result);
},
(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/releve/`,{type: "GET"})
fetch(`http://localhost:9002/capteurs-releve/`,{type: "GET"})
.then(res => res.json())
.then(
(result) => {
setReleve(result);
setCapteurs(result);
},
(error) => {
console.log('Erreur lors de la requête GET :', error);
console.log('Erreur lors de la requête GET capteurs :', error);
}
)
......@@ -36,9 +36,15 @@ function Home() {
<p>Présentation : {jardin.description}</p>
<p>Addresse : {jardin.numero_adresse} {jardin.rue}, {jardin.code_postal} {jardin.ville}</p>
<br/>
<h3>Dernier relevé de capteur</h3>
<p> Date du relevé : {releve.date_releve}</p>
<p> valeur : {releve.valeur}</p>
<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>
)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment