From ddb8bb03e536b86e03352b7e4b5fe5f94e42712e Mon Sep 17 00:00:00 2001 From: Julien Maupetit Date: Thu, 11 Apr 2024 11:50:29 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(api)=20add=20sessions=20dynamic=20rou?= =?UTF-8?q?ter=20and=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For now we only design the API. --- src/api/qualicharge/api/v1/routers/dynamic.py | 8 +++++++- src/api/qualicharge/factories/dynamic.py | 6 +++++- src/api/qualicharge/models/dynamic.py | 9 +++++++++ src/api/tests/models/test_dynamic.py | 10 +++++++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/api/qualicharge/api/v1/routers/dynamic.py b/src/api/qualicharge/api/v1/routers/dynamic.py index f0ae3be5..e6446115 100644 --- a/src/api/qualicharge/api/v1/routers/dynamic.py +++ b/src/api/qualicharge/api/v1/routers/dynamic.py @@ -5,7 +5,7 @@ from fastapi import APIRouter, Path, status -from qualicharge.models.dynamic import Status +from qualicharge.models.dynamic import Session, Status logger = logging.getLogger(__name__) @@ -41,3 +41,9 @@ async def read_status( async def create_status(status: Status) -> Status: """Create a status.""" raise NotImplementedError + + +@router.post("/session/", status_code=status.HTTP_201_CREATED, tags=["Session"]) +async def create_session(session: Session) -> Session: + """Create a session.""" + raise NotImplementedError diff --git a/src/api/qualicharge/factories/dynamic.py b/src/api/qualicharge/factories/dynamic.py index bc4077df..84c14e1d 100644 --- a/src/api/qualicharge/factories/dynamic.py +++ b/src/api/qualicharge/factories/dynamic.py @@ -2,7 +2,11 @@ from polyfactory.factories.pydantic_factory import ModelFactory -from ..models.dynamic import Status +from ..models.dynamic import Session, Status + + +class SessionFactory(ModelFactory[Session]): + """Session model factory.""" class StatusFactory(ModelFactory[Status]): diff --git a/src/api/qualicharge/models/dynamic.py b/src/api/qualicharge/models/dynamic.py index 5705cf32..3f60e1da 100644 --- a/src/api/qualicharge/models/dynamic.py +++ b/src/api/qualicharge/models/dynamic.py @@ -44,3 +44,12 @@ class Status(BaseModel): etat_prise_type_combo_ccs: Optional[EtatPriseEnum] etat_prise_type_chademo: Optional[EtatPriseEnum] etat_prise_type_ef: Optional[EtatPriseEnum] + + +class Session(BaseModel): + """IRVE dynamic model: point of charge sessions.""" + + id_pdc_itinerance: Annotated[str, Field(pattern="^[A-Z]{2}[A-Z0-9]{4,33}$")] + start: PastDatetime + end: PastDatetime + energy: float diff --git a/src/api/tests/models/test_dynamic.py b/src/api/tests/models/test_dynamic.py index 6c360f4e..3f556512 100644 --- a/src/api/tests/models/test_dynamic.py +++ b/src/api/tests/models/test_dynamic.py @@ -2,7 +2,15 @@ from datetime import datetime -from qualicharge.factories.dynamic import StatusFactory +from qualicharge.factories.dynamic import SessionFactory, StatusFactory + + +def test_session_model(): + """Test the dynamic Session model.""" + session = SessionFactory.build() + + assert session.start < datetime.now() + assert session.end < datetime.now() def test_status_model():