diff --git a/alembic/versions/2025_09_26_2002-50a710e413f8_add_suggestion_url_link_table.py b/alembic/versions/2025_09_26_2002-50a710e413f8_add_suggestion_url_link_table.py new file mode 100644 index 00000000..0c55aad5 --- /dev/null +++ b/alembic/versions/2025_09_26_2002-50a710e413f8_add_suggestion_url_link_table.py @@ -0,0 +1,39 @@ +"""Add new agency suggestion url link table + +Revision ID: 50a710e413f8 +Revises: d4c63e23d3f0 +Create Date: 2025-09-26 20:02:10.867728 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + +from src.util.alembic_helpers import url_id_column, agency_id_column, created_at_column + +# revision identifiers, used by Alembic. +revision: str = '50a710e413f8' +down_revision: Union[str, None] = 'd4c63e23d3f0' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.create_table( + 'link_url_new_agency_suggestion', + url_id_column(), + sa.Column( + 'suggestion_id', + sa.Integer, + sa.ForeignKey('new_agency_suggestions.id'), nullable=False + ), + created_at_column(), + sa.PrimaryKeyConstraint( + 'url_id', 'suggestion_id' + ) + ) + + +def downgrade() -> None: + pass diff --git a/src/api/endpoints/annotate/all/post/query.py b/src/api/endpoints/annotate/all/post/query.py index 01c6973e..95bb9102 100644 --- a/src/api/endpoints/annotate/all/post/query.py +++ b/src/api/endpoints/annotate/all/post/query.py @@ -48,4 +48,7 @@ async def run(self, session: AsyncSession) -> None: requester.add_agency_ids(self.post_info.agency_info.agency_ids) - await requester.optionally_add_new_agency_suggestion(self.post_info.agency_info.new_agency_suggestion) + await requester.optionally_add_new_agency_suggestion( + self.post_info.agency_info.new_agency_suggestion, + url_id=self.url_id, + ) diff --git a/src/api/endpoints/annotate/all/post/requester.py b/src/api/endpoints/annotate/all/post/requester.py index 9f9d0a78..dc19c92d 100644 --- a/src/api/endpoints/annotate/all/post/requester.py +++ b/src/api/endpoints/annotate/all/post/requester.py @@ -5,6 +5,7 @@ from src.core.enums import RecordType from src.db.models.impl.agency.suggestion.sqlalchemy import NewAgencySuggestion from src.db.models.impl.flag.url_validated.enums import URLType +from src.db.models.impl.link.url_new_agency_suggestion.sqlalchemy import LinkURLNewAgencySuggestion from src.db.models.impl.link.user_name_suggestion.sqlalchemy import LinkUserNameSuggestion from src.db.models.impl.url.suggestion.agency.user import UserUrlAgencySuggestion from src.db.models.impl.url.suggestion.location.user.sqlalchemy import UserLocationSuggestion @@ -98,7 +99,8 @@ async def optionally_add_name_suggestion( async def optionally_add_new_agency_suggestion( self, - suggestion_info: AnnotationNewAgencySuggestionInfo | None + suggestion_info: AnnotationNewAgencySuggestionInfo | None, + url_id: int, ) -> None: if suggestion_info is None: return @@ -108,4 +110,10 @@ async def optionally_add_new_agency_suggestion( jurisdiction_type=suggestion_info.jurisdiction_type, agency_type=suggestion_info.agency_type, ) - self.session.add(new_agency_suggestion) \ No newline at end of file + self.session.add(new_agency_suggestion) + await self.session.flush() + link = LinkURLNewAgencySuggestion( + url_id=url_id, + suggestion_id=new_agency_suggestion.id, + ) + self.session.add(link) diff --git a/src/db/models/impl/link/url_new_agency_suggestion/__init__.py b/src/db/models/impl/link/url_new_agency_suggestion/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/db/models/impl/link/url_new_agency_suggestion/sqlalchemy.py b/src/db/models/impl/link/url_new_agency_suggestion/sqlalchemy.py new file mode 100644 index 00000000..fe5daf35 --- /dev/null +++ b/src/db/models/impl/link/url_new_agency_suggestion/sqlalchemy.py @@ -0,0 +1,19 @@ +from sqlalchemy import Column, Integer, ForeignKey, PrimaryKeyConstraint +from sqlalchemy.orm import Mapped + +from src.db.models.mixins import URLDependentMixin +from src.db.models.templates_.base import Base + + +class LinkURLNewAgencySuggestion( + Base, + URLDependentMixin, +): + + __tablename__ = 'link_url_new_agency_suggestion' + + suggestion_id: Mapped[int] = Column(Integer, ForeignKey('new_agency_suggestions.id'), nullable=False) + + __table_args__ = ( + PrimaryKeyConstraint('url_id', 'suggestion_id'), + )