diff --git a/pyproject.toml b/pyproject.toml index d767e7b..3b5fdc2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,7 @@ [project] name = "welearn-database" -version = "1.5.3.dev1" +version = "1.5.4.dev1" + description = "All stuff related to relationnal database from the WeLearn project" authors = [ {name = "Théo",email = "theo.nardin@cri-paris.org"} diff --git a/welearn_database/alembic/versions/0310ff0bda4f_track_document_last_state.py b/welearn_database/alembic/versions/0310ff0bda4f_track_document_last_state.py new file mode 100644 index 0000000..3537052 --- /dev/null +++ b/welearn_database/alembic/versions/0310ff0bda4f_track_document_last_state.py @@ -0,0 +1,38 @@ +"""track_document_last_state + +Revision ID: 0310ff0bda4f +Revises: d22d6324c256 +Create Date: 2026-09-23 11:48:30.473174 + +""" + +from typing import Sequence, Union + +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "0310ff0bda4f" +down_revision: Union[str, None] = "d22d6324c256" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.execute(""" + CREATE OR REPLACE VIEW document_related.track_document_latest_state + AS SELECT DISTINCT ON (ps.document_id) ps.id, + ps.document_id, + wd.corpus_id, + wd.lang, + ps.title, + ps.created_at, + ps.operation_order + FROM document_related.process_state ps + JOIN document_related.welearn_document wd ON ps.document_id = wd.id + ORDER BY ps.document_id, ps.operation_order DESC; + """) + + +def downgrade() -> None: + op.execute("DROP VIEW IF EXISTS document_related.track_document_latest_state;") diff --git a/welearn_database/alembic/versions/d22d6324c256_cleaned_document_state.py b/welearn_database/alembic/versions/d22d6324c256_cleaned_document_state.py new file mode 100644 index 0000000..207e5ce --- /dev/null +++ b/welearn_database/alembic/versions/d22d6324c256_cleaned_document_state.py @@ -0,0 +1,30 @@ +"""cleaned_document_state + +Revision ID: d22d6324c256 +Revises: 5d46d7920342 +Create Date: 2026-09-23 11:18:46.784209 + +""" + +from typing import Sequence, Union + +import sqlalchemy as sa +from alembic import op + +from welearn_database.data.enumeration import Step + +# revision identifiers, used by Alembic. +revision: str = "d22d6324c256" +down_revision: Union[str, None] = "5d46d7920342" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.execute( + f"""ALTER TYPE document_related.step ADD VALUE '{Step.DOCUMENT_CLEANED.value}'""" + ) + + +def downgrade() -> None: + pass diff --git a/welearn_database/data/enumeration.py b/welearn_database/data/enumeration.py index d74a879..61c0dc9 100644 --- a/welearn_database/data/enumeration.py +++ b/welearn_database/data/enumeration.py @@ -12,6 +12,7 @@ class Step(Enum): DOCUMENT_IS_INVALID = "document_is_invalid" KEPT_FOR_TRACE = "kept_for_trace" DOCUMENT_IS_IRRETRIEVABLE = "document_is_irretrievable" + DOCUMENT_CLEANED = "document_cleaned" class Counter(Enum): diff --git a/welearn_database/data/models/document_related.py b/welearn_database/data/models/document_related.py index 51a3ca2..d9d7a8b 100644 --- a/welearn_database/data/models/document_related.py +++ b/welearn_database/data/models/document_related.py @@ -563,3 +563,21 @@ class QtyDocumentPerCorpus(Base): source_name: Mapped[str] = mapped_column(primary_key=True) count: Mapped[int] + + +class TrackDocumentLatestState(Base): + __tablename__ = "track_document_latest_state" + __table_args__ = {"schema": schema_name} + __read_only__ = True + + id: Mapped[UUID] = mapped_column( + primary_key=True, + type_=types.Uuid, + ) + document_id: Mapped[UUID] = mapped_column( + type_=types.Uuid, + ) + lang: Mapped[str] + title: Mapped[str] + created_at: Mapped[datetime] = mapped_column() + operation_order: Mapped[int]