From eff8df359564c81ada77b83f8b095c89a348ade6 Mon Sep 17 00:00:00 2001 From: Valentin Matton Date: Tue, 13 Aug 2024 16:46:10 +0200 Subject: [PATCH] feat(api): add score_qualite field --- ...3_151329_68fe052dc63c_add_score_qualite.py | 28 +++++++++++++++++++ .../api/inclusion_data/models.py | 1 + .../api/inclusion_data/schemas.py | 16 ++++++++++- .../__snapshots__/test_inclusion_data.ambr | 18 +++++++++++- api/tests/e2e/api/test_inclusion_data.py | 1 + api/tests/factories.py | 2 ++ 6 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 api/src/alembic/versions/20240813_151329_68fe052dc63c_add_score_qualite.py diff --git a/api/src/alembic/versions/20240813_151329_68fe052dc63c_add_score_qualite.py b/api/src/alembic/versions/20240813_151329_68fe052dc63c_add_score_qualite.py new file mode 100644 index 00000000..df54f54a --- /dev/null +++ b/api/src/alembic/versions/20240813_151329_68fe052dc63c_add_score_qualite.py @@ -0,0 +1,28 @@ +"""add-score-qualite + +Revision ID: 68fe052dc63c +Revises: e3f3dfa4ad01 +Create Date: 2024-08-13 15:13:29.690054 + +""" + +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = "68fe052dc63c" +down_revision = "e3f3dfa4ad01" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + op.add_column( + "api__services", sa.Column("score_qualite", sa.Float(), nullable=True) + ) + op.execute("UPDATE api__services SET score_qualite = 0.5") + op.alter_column("api__services", "score_qualite", nullable=False) + + +def downgrade() -> None: + op.drop_column("api__services", "score_qualite") diff --git a/api/src/data_inclusion/api/inclusion_data/models.py b/api/src/data_inclusion/api/inclusion_data/models.py index bf975841..894869c9 100644 --- a/api/src/data_inclusion/api/inclusion_data/models.py +++ b/api/src/data_inclusion/api/inclusion_data/models.py @@ -101,6 +101,7 @@ class Service(Base): zone_diffusion_code: Mapped[str | None] zone_diffusion_nom: Mapped[str | None] zone_diffusion_type: Mapped[str | None] + score_qualite: Mapped[float] commune_: Mapped[Commune] = relationship(back_populates="services") diff --git a/api/src/data_inclusion/api/inclusion_data/schemas.py b/api/src/data_inclusion/api/inclusion_data/schemas.py index 27eed59d..eaf8875e 100644 --- a/api/src/data_inclusion/api/inclusion_data/schemas.py +++ b/api/src/data_inclusion/api/inclusion_data/schemas.py @@ -1,4 +1,7 @@ -from pydantic import BaseModel, ConfigDict +from textwrap import dedent +from typing import Annotated + +from pydantic import BaseModel, ConfigDict, Field from data_inclusion import schema @@ -17,6 +20,17 @@ class Service(schema.Service): formulaire_en_ligne: str | None = None lien_source: str | None = None + score_qualite: Annotated[ + float, + Field( + ge=0, + le=1, + description=dedent("""\ + Score de qualité du service, défini et calculé par data·inclusion. + """), + ), + ] + class Structure(schema.Structure): model_config = ConfigDict(from_attributes=True, populate_by_name=True) diff --git a/api/tests/e2e/api/__snapshots__/test_inclusion_data.ambr b/api/tests/e2e/api/__snapshots__/test_inclusion_data.ambr index bb8b8269..bae34fb7 100644 --- a/api/tests/e2e/api/__snapshots__/test_inclusion_data.ambr +++ b/api/tests/e2e/api/__snapshots__/test_inclusion_data.ambr @@ -1876,6 +1876,13 @@ ], "title": "Modes Orientation Accompagnateur Autres" }, + "score_qualite": { + "type": "number", + "maximum": 1.0, + "minimum": 0.0, + "title": "Score Qualite", + "description": "Score de qualité du service, défini et calculé par data·inclusion.\n" + }, "structure": { "$ref": "#/components/schemas/Structure" } @@ -1886,6 +1893,7 @@ "structure_id", "source", "nom", + "score_qualite", "structure" ], "title": "DetailedService" @@ -2961,6 +2969,13 @@ } ], "title": "Modes Orientation Accompagnateur Autres" + }, + "score_qualite": { + "type": "number", + "maximum": 1.0, + "minimum": 0.0, + "title": "Score Qualite", + "description": "Score de qualité du service, défini et calculé par data·inclusion.\n" } }, "type": "object", @@ -2968,7 +2983,8 @@ "id", "structure_id", "source", - "nom" + "nom", + "score_qualite" ], "title": "Service" }, diff --git a/api/tests/e2e/api/test_inclusion_data.py b/api/tests/e2e/api/test_inclusion_data.py index 28ca6c2f..e070bdfc 100644 --- a/api/tests/e2e/api/test_inclusion_data.py +++ b/api/tests/e2e/api/test_inclusion_data.py @@ -289,6 +289,7 @@ def test_list_services_all(api_client): "prise_rdv": "https://teixeira.fr/", "profils": ["femmes"], "recurrence": None, + "score_qualite": 0.5, "source": "dora", "structure_id": "prince-point-monde", "telephone": "0102030405", diff --git a/api/tests/factories.py b/api/tests/factories.py index 2f5cf1bd..f0365f2f 100644 --- a/api/tests/factories.py +++ b/api/tests/factories.py @@ -164,3 +164,5 @@ class Meta: zone_diffusion_type = None zone_diffusion_code = None zone_diffusion_nom = None + + score_qualite = 0.5