diff --git a/src/api/endpoints/annotate/all/get/queries/convert.py b/src/api/endpoints/annotate/all/get/queries/convert.py index 0b0f0791..80625d3c 100644 --- a/src/api/endpoints/annotate/all/get/queries/convert.py +++ b/src/api/endpoints/annotate/all/get/queries/convert.py @@ -5,12 +5,12 @@ from src.api.endpoints.annotate.all.get.models.url_type import URLTypeAnnotationSuggestion from src.core.enums import RecordType from src.db.models.impl.flag.url_validated.enums import URLType -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser def convert_user_url_type_suggestion_to_url_type_annotation_suggestion( - db_suggestions: list[AnnotationUserURLType] + db_suggestions: list[AnnotationURLTypeUser] ) -> list[URLTypeAnnotationSuggestion]: counter: Counter[URLType] = Counter() for suggestion in db_suggestions: @@ -26,7 +26,7 @@ def convert_user_url_type_suggestion_to_url_type_annotation_suggestion( return anno_suggestions def convert_user_record_type_suggestion_to_record_type_annotation_suggestion( - db_suggestions: list[AnnotationUserRecordType] + db_suggestions: list[AnnotationRecordTypeUser] ) -> RecordTypeAnnotationResponseOuterInfo: counter: Counter[RecordType] = Counter() for suggestion in db_suggestions: diff --git a/src/api/endpoints/annotate/all/get/queries/core.py b/src/api/endpoints/annotate/all/get/queries/core.py index efaf0ce8..852886c6 100644 --- a/src/api/endpoints/annotate/all/get/queries/core.py +++ b/src/api/endpoints/annotate/all/get/queries/core.py @@ -6,8 +6,8 @@ from src.api.endpoints.annotate.all.get.models.response import GetNextURLForAllAnnotationResponse from src.db.models.impl.annotation.agency.user.sqlalchemy import AnnotationAgencyUser from src.db.models.impl.annotation.location.user.sqlalchemy import AnnotationLocationUser -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.models.impl.link.batch_url.sqlalchemy import LinkBatchURL from src.db.models.impl.url.core.sqlalchemy import URL from src.db.queries.base.builder import QueryBuilderBase @@ -42,10 +42,10 @@ async def run( .where( # Must not have been previously annotated by user ~exists( - select(AnnotationUserURLType.url_id) + select(AnnotationURLTypeUser.url_id) .where( - AnnotationUserURLType.url_id == URL.id, - AnnotationUserURLType.user_id == self.user_id, + AnnotationURLTypeUser.url_id == URL.id, + AnnotationURLTypeUser.user_id == self.user_id, ) ), ~exists( @@ -66,11 +66,11 @@ async def run( ), ~exists( select( - AnnotationUserRecordType.url_id + AnnotationRecordTypeUser.url_id ) .where( - AnnotationUserRecordType.url_id == URL.id, - AnnotationUserRecordType.user_id == self.user_id, + AnnotationRecordTypeUser.url_id == URL.id, + AnnotationRecordTypeUser.user_id == self.user_id, ) ) ) diff --git a/src/api/endpoints/annotate/all/get/queries/name/core.py b/src/api/endpoints/annotate/all/get/queries/name/core.py index 9eba70ee..3cc1324d 100644 --- a/src/api/endpoints/annotate/all/get/queries/name/core.py +++ b/src/api/endpoints/annotate/all/get/queries/name/core.py @@ -7,7 +7,7 @@ from src.db.helpers.session import session_helper as sh from src.db.models.impl.annotation.name.suggestion.enums import NameSuggestionSource from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement from src.db.queries.base.builder import QueryBuilderBase @@ -26,7 +26,7 @@ async def run(self, session: AsyncSession) -> NameAnnotationResponseOuterInfo: AnnotationNameSuggestion.id.label('id'), AnnotationNameSuggestion.suggestion.label('display_name'), func.count( - LinkUserNameSuggestion.user_id + AnnotationNameUserEndorsement.user_id ).label('user_count'), case( (AnnotationNameSuggestion.source == NameSuggestionSource.HTML_METADATA_TITLE, 1), @@ -34,8 +34,8 @@ async def run(self, session: AsyncSession) -> NameAnnotationResponseOuterInfo: ).label("robo_count") ) .outerjoin( - LinkUserNameSuggestion, - LinkUserNameSuggestion.suggestion_id == AnnotationNameSuggestion.id, + AnnotationNameUserEndorsement, + AnnotationNameUserEndorsement.suggestion_id == AnnotationNameSuggestion.id, ) .where( AnnotationNameSuggestion.url_id == self.url_id, @@ -45,7 +45,7 @@ async def run(self, session: AsyncSession) -> NameAnnotationResponseOuterInfo: AnnotationNameSuggestion.suggestion, ) .order_by( - func.count(LinkUserNameSuggestion.user_id).desc(), + func.count(AnnotationNameUserEndorsement.user_id).desc(), AnnotationNameSuggestion.id.asc(), ) .limit(3) diff --git a/src/api/endpoints/annotate/all/post/requester.py b/src/api/endpoints/annotate/all/post/requester.py index 2034ecc1..e0119235 100644 --- a/src/api/endpoints/annotate/all/post/requester.py +++ b/src/api/endpoints/annotate/all/post/requester.py @@ -7,11 +7,11 @@ from src.db.models.impl.annotation.name.suggestion.enums import NameSuggestionSource from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion from src.db.models.impl.flag.url_validated.enums import URLType -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement from src.db.models.impl.link.user_suggestion_not_found.agency.sqlalchemy import LinkUserSuggestionAgencyNotFound from src.db.models.impl.link.user_suggestion_not_found.location.sqlalchemy import LinkUserSuggestionLocationNotFound -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.templates.requester import RequesterBase @@ -33,7 +33,7 @@ def optionally_add_record_type( ) -> None: if rt is None: return - record_type_suggestion = AnnotationUserRecordType( + record_type_suggestion = AnnotationRecordTypeUser( url_id=self.url_id, user_id=self.user_id, record_type=rt.value @@ -44,7 +44,7 @@ def add_relevant_annotation( self, url_type: URLType, ) -> None: - relevant_suggestion = AnnotationUserURLType( + relevant_suggestion = AnnotationURLTypeUser( url_id=self.url_id, user_id=self.user_id, type=url_type @@ -77,7 +77,7 @@ async def optionally_add_name_suggestion( if name_info.empty: return if name_info.existing_name_id is not None: - link = LinkUserNameSuggestion( + link = AnnotationNameUserEndorsement( user_id=self.user_id, suggestion_id=name_info.existing_name_id, ) @@ -90,7 +90,7 @@ async def optionally_add_name_suggestion( ) self.session.add(name_suggestion) await self.session.flush() - link = LinkUserNameSuggestion( + link = AnnotationNameUserEndorsement( user_id=self.user_id, suggestion_id=name_suggestion.id, ) diff --git a/src/api/endpoints/annotate/anonymous/get/query.py b/src/api/endpoints/annotate/anonymous/get/query.py index b9097ac3..684df2f5 100644 --- a/src/api/endpoints/annotate/anonymous/get/query.py +++ b/src/api/endpoints/annotate/anonymous/get/query.py @@ -9,8 +9,8 @@ from src.api.endpoints.annotate.anonymous.get.response import GetNextURLForAnonymousAnnotationResponse from src.db.models.impl.annotation.agency.anon.sqlalchemy import AnnotationAgencyAnon from src.db.models.impl.annotation.location.anon.sqlalchemy import AnnotationLocationAnon -from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationAnonRecordType -from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationAnonURLType +from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationRecordTypeAnon +from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationURLTypeAnon from src.db.models.impl.url.core.sqlalchemy import URL from src.db.queries.base.builder import QueryBuilderBase @@ -34,11 +34,11 @@ async def run(self, session: AsyncSession) -> GetNextURLForAnonymousAnnotationRe # Must not have been previously annotated by user not_exists_anon_annotation( session_id=self.session_id, - anon_model=AnnotationAnonURLType + anon_model=AnnotationURLTypeAnon ), not_exists_anon_annotation( session_id=self.session_id, - anon_model=AnnotationAnonRecordType + anon_model=AnnotationRecordTypeAnon ), not_exists_anon_annotation( session_id=self.session_id, diff --git a/src/api/endpoints/annotate/anonymous/post/query.py b/src/api/endpoints/annotate/anonymous/post/query.py index 50ebad7c..a4f0cebf 100644 --- a/src/api/endpoints/annotate/anonymous/post/query.py +++ b/src/api/endpoints/annotate/anonymous/post/query.py @@ -7,8 +7,8 @@ from src.db.models.impl.annotation.location.anon.sqlalchemy import AnnotationLocationAnon from src.db.models.impl.annotation.name.suggestion.enums import NameSuggestionSource from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion -from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationAnonRecordType -from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationAnonURLType +from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationRecordTypeAnon +from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationURLTypeAnon from src.db.models.impl.annotation.name.anon.sqlalchemy import AnnotationNameAnonEndorsement from src.db.queries.base.builder import QueryBuilderBase @@ -27,7 +27,7 @@ def __init__( async def run(self, session: AsyncSession) -> None: - url_type_suggestion = AnnotationAnonURLType( + url_type_suggestion = AnnotationURLTypeAnon( url_id=self.url_id, url_type=self.post_info.suggested_status, session_id=self.session_id @@ -57,7 +57,7 @@ async def run(self, session: AsyncSession) -> None: session.add(name_suggestion) if self.post_info.record_type is not None: - record_type_suggestion = AnnotationAnonRecordType( + record_type_suggestion = AnnotationRecordTypeAnon( url_id=self.url_id, record_type=self.post_info.record_type, session_id=self.session_id diff --git a/src/api/endpoints/annotate/migrate/__init__.py b/src/api/endpoints/annotate/migrate/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/api/endpoints/annotate/migrate/query.py b/src/api/endpoints/annotate/migrate/query.py new file mode 100644 index 00000000..327f43ce --- /dev/null +++ b/src/api/endpoints/annotate/migrate/query.py @@ -0,0 +1,131 @@ +from typing import Any +from uuid import UUID + +from sqlalchemy import insert, select, delete +from sqlalchemy.ext.asyncio import AsyncSession + +from src.db.models.impl.annotation.agency.anon.sqlalchemy import AnnotationAgencyAnon +from src.db.models.impl.annotation.agency.user.sqlalchemy import AnnotationAgencyUser +from src.db.models.impl.annotation.location.anon.sqlalchemy import AnnotationLocationAnon +from src.db.models.impl.annotation.location.user.sqlalchemy import AnnotationLocationUser +from src.db.models.impl.annotation.name.anon.sqlalchemy import AnnotationNameAnonEndorsement +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement +from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationRecordTypeAnon +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationURLTypeAnon +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser +from src.db.queries.base.builder import QueryBuilderBase + + +class MigrateAnonymousAnnotationsQueryBuilder(QueryBuilderBase): + + def __init__( + self, + session_id: UUID, + user_id: int + ): + super().__init__() + self.session_id = session_id + self.user_id = user_id + + async def run(self, session: AsyncSession) -> Any: + await self.migrate_agency_annotations(session) + await self.migrate_location_annotations(session) + await self.migrate_record_type_annotations(session) + await self.migrate_url_type_annotations(session) + await self.migrate_name_annotations(session) + + async def migrate_agency_annotations(self, session: AsyncSession) -> None: + # Copy all agency annotations from anonymous to user. + statement = insert(AnnotationAgencyUser).from_select( + ["agency_id", "url_id", "user_id"], + select( + AnnotationAgencyAnon.agency_id, + AnnotationAgencyAnon.url_id, + self.user_id + ).where( + AnnotationAgencyAnon.session_id == self.session_id + ) + ) + await session.execute(statement) + # Delete all anonymous agency annotations. + statement = delete(AnnotationAgencyAnon).where( + AnnotationAgencyAnon.session_id == self.session_id + ) + await session.execute(statement) + + + async def migrate_location_annotations(self, session: AsyncSession) -> None: + # Copy all location annotations from anonymous to user. + statement = insert(AnnotationLocationUser).from_select( + ['location_id', 'url_id', 'user_id'], + select( + AnnotationLocationAnon.location_id, + AnnotationLocationAnon.url_id, + self.user_id + ).where( + AnnotationLocationAnon.session_id == self.session_id + ) + ) + await session.execute(statement) + # Delete all anonymous location annotations. + statement = delete(AnnotationLocationAnon).where( + AnnotationLocationAnon.session_id == self.session_id + ) + await session.execute(statement) + + async def migrate_record_type_annotations(self, session: AsyncSession) -> None: + # Copy all record type annotations from anonymous to user. + statement = insert(AnnotationRecordTypeUser).from_select( + ['record_type', 'url_id', 'user_id'], + select( + AnnotationRecordTypeAnon.record_type, + AnnotationRecordTypeAnon.url_id, + self.user_id + ).where( + AnnotationRecordTypeAnon.session_id == self.session_id + ) + ) + await session.execute(statement) + # Delete all anonymous record type annotations. + statement = delete(AnnotationRecordTypeAnon).where( + AnnotationRecordTypeAnon.session_id == self.session_id + ) + await session.execute(statement) + + async def migrate_url_type_annotations(self, session: AsyncSession) -> None: + # Copy all url type annotations from anonymous to user. + statement = insert(AnnotationURLTypeUser).from_select( + ['type', 'url_id', 'user_id'], + select( + AnnotationURLTypeAnon.url_type, + AnnotationURLTypeAnon.url_id, + self.user_id + ).where( + AnnotationURLTypeAnon.session_id == self.session_id + ) + ) + await session.execute(statement) + # Delete all anonymous url type annotations. + statement = delete(AnnotationURLTypeAnon).where( + AnnotationURLTypeAnon.session_id == self.session_id + ) + await session.execute(statement) + + async def migrate_name_annotations(self, session: AsyncSession) -> None: + # Copy all name annotations from anonymous to user. + statement = insert(AnnotationNameUserEndorsement).from_select( + ['suggestion_id', 'user_id'], + select( + AnnotationNameAnonEndorsement.suggestion_id, + self.user_id + ).where( + AnnotationNameAnonEndorsement.session_id == self.session_id + ) + ) + await session.execute(statement) + # Delete all anonymous name annotations. + statement = delete(AnnotationNameAnonEndorsement).where( + AnnotationNameAnonEndorsement.session_id == self.session_id + ) + await session.execute(statement) diff --git a/src/api/endpoints/annotate/routes.py b/src/api/endpoints/annotate/routes.py index ee3cc3c7..945de945 100644 --- a/src/api/endpoints/annotate/routes.py +++ b/src/api/endpoints/annotate/routes.py @@ -12,6 +12,8 @@ from src.api.endpoints.annotate.anonymous.get.query import GetNextURLForAnonymousAnnotationQueryBuilder from src.api.endpoints.annotate.anonymous.get.response import GetNextURLForAnonymousAnnotationResponse from src.api.endpoints.annotate.anonymous.post.query import AddAnonymousAnnotationsToURLQueryBuilder +from src.api.endpoints.annotate.migrate.query import MigrateAnonymousAnnotationsQueryBuilder +from src.api.shared.models.message_response import MessageResponse from src.core.core import AsyncCore from src.db.queries.implementations.anonymous_session import MakeAnonymousSessionQueryBuilder from src.security.dtos.access_info import AccessInfo @@ -113,6 +115,23 @@ async def annotate_url_for_all_annotations_and_get_next_url( url_id=anno_url_id ) +@annotate_router.post('/migrate') +async def migrate_annotations_to_user( + async_core: AsyncCore = Depends(get_async_core), + access_info: AccessInfo = Depends(get_standard_user_access_info), + session_id: UUID = Query(description="The session id of the anonymous user") +) -> MessageResponse: + """Migrate annotations from an anonymous session to a user's account.""" + await async_core.adb_client.run_query_builder( + MigrateAnonymousAnnotationsQueryBuilder( + session_id=session_id, + user_id=access_info.user_id + ) + ) + return MessageResponse( + message="Annotations migrated successfully." + ) + @annotate_router.get("/suggestions/agencies/{url_id}") async def get_agency_suggestions( url_id: int, @@ -125,4 +144,5 @@ async def get_agency_suggestions( url_id=url_id, location_id=location_id ) - ) \ No newline at end of file + ) + diff --git a/src/api/endpoints/contributions/shared/contributions.py b/src/api/endpoints/contributions/shared/contributions.py index e62c0e7f..66d7b0be 100644 --- a/src/api/endpoints/contributions/shared/contributions.py +++ b/src/api/endpoints/contributions/shared/contributions.py @@ -1,6 +1,6 @@ from sqlalchemy import select, func, CTE, Column -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser class ContributionsCTEContainer: @@ -8,11 +8,11 @@ class ContributionsCTEContainer: def __init__(self): self._cte = ( select( - AnnotationUserURLType.user_id, + AnnotationURLTypeUser.user_id, func.count().label("count") ) .group_by( - AnnotationUserURLType.user_id + AnnotationURLTypeUser.user_id ) .cte("contributions") ) diff --git a/src/api/endpoints/contributions/user/queries/agreement/record_type.py b/src/api/endpoints/contributions/user/queries/agreement/record_type.py index 278c4c60..b865cb52 100644 --- a/src/api/endpoints/contributions/user/queries/agreement/record_type.py +++ b/src/api/endpoints/contributions/user/queries/agreement/record_type.py @@ -3,7 +3,7 @@ from src.api.endpoints.contributions.user.queries.annotated_and_validated import AnnotatedAndValidatedCTEContainer from src.api.endpoints.contributions.user.queries.templates.agreement import AgreementCTEContainer from src.db.models.impl.url.record_type.sqlalchemy import URLRecordType -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser def get_record_type_agreement_cte_container( @@ -16,8 +16,8 @@ def get_record_type_agreement_cte_container( func.count() ) .join( - AnnotationUserRecordType, - AnnotationUserRecordType.url_id == inner_cte.url_id + AnnotationRecordTypeUser, + AnnotationRecordTypeUser.url_id == inner_cte.url_id ) .group_by( inner_cte.user_id @@ -31,14 +31,14 @@ def get_record_type_agreement_cte_container( func.count() ) .join( - AnnotationUserRecordType, - AnnotationUserRecordType.url_id == inner_cte.url_id + AnnotationRecordTypeUser, + AnnotationRecordTypeUser.url_id == inner_cte.url_id ) .join( URLRecordType, and_( URLRecordType.url_id == inner_cte.url_id, - URLRecordType.record_type == AnnotationUserRecordType.record_type + URLRecordType.record_type == AnnotationRecordTypeUser.record_type ) ) .group_by( diff --git a/src/api/endpoints/contributions/user/queries/agreement/url_type.py b/src/api/endpoints/contributions/user/queries/agreement/url_type.py index 57a2a5a1..a0ffc2e0 100644 --- a/src/api/endpoints/contributions/user/queries/agreement/url_type.py +++ b/src/api/endpoints/contributions/user/queries/agreement/url_type.py @@ -3,7 +3,7 @@ from src.api.endpoints.contributions.user.queries.annotated_and_validated import AnnotatedAndValidatedCTEContainer from src.api.endpoints.contributions.user.queries.templates.agreement import AgreementCTEContainer from src.db.models.impl.flag.url_validated.sqlalchemy import FlagURLValidated -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser def get_url_type_agreement_cte_container( @@ -17,8 +17,8 @@ def get_url_type_agreement_cte_container( func.count() ) .join( - AnnotationUserURLType, - AnnotationUserURLType.url_id == inner_cte.url_id + AnnotationURLTypeUser, + AnnotationURLTypeUser.url_id == inner_cte.url_id ) .join( FlagURLValidated, @@ -36,14 +36,14 @@ def get_url_type_agreement_cte_container( func.count() ) .join( - AnnotationUserURLType, - AnnotationUserURLType.url_id == inner_cte.url_id + AnnotationURLTypeUser, + AnnotationURLTypeUser.url_id == inner_cte.url_id ) .join( FlagURLValidated, and_( FlagURLValidated.url_id == inner_cte.url_id, - AnnotationUserURLType.type == FlagURLValidated.type + AnnotationURLTypeUser.type == FlagURLValidated.type ) ) diff --git a/src/api/endpoints/contributions/user/queries/annotated_and_validated.py b/src/api/endpoints/contributions/user/queries/annotated_and_validated.py index 1be14e28..b617449e 100644 --- a/src/api/endpoints/contributions/user/queries/annotated_and_validated.py +++ b/src/api/endpoints/contributions/user/queries/annotated_and_validated.py @@ -1,7 +1,7 @@ from sqlalchemy import select, Column, CTE from src.db.models.impl.flag.url_validated.sqlalchemy import FlagURLValidated -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser class AnnotatedAndValidatedCTEContainer: @@ -9,16 +9,16 @@ class AnnotatedAndValidatedCTEContainer: def __init__(self, user_id: int | None): self._cte = ( select( - AnnotationUserURLType.user_id, - AnnotationUserURLType.url_id + AnnotationURLTypeUser.user_id, + AnnotationURLTypeUser.url_id ) .join( FlagURLValidated, - FlagURLValidated.url_id == AnnotationUserURLType.url_id + FlagURLValidated.url_id == AnnotationURLTypeUser.url_id ) ) if user_id is not None: - self._cte = self._cte.where(AnnotationUserURLType.user_id == user_id) + self._cte = self._cte.where(AnnotationURLTypeUser.user_id == user_id) self._cte = self._cte.cte("annotated_and_validated") @property diff --git a/src/api/endpoints/metrics/urls/breakdown/query/core.py b/src/api/endpoints/metrics/urls/breakdown/query/core.py index 949c8abd..c214b169 100644 --- a/src/api/endpoints/metrics/urls/breakdown/query/core.py +++ b/src/api/endpoints/metrics/urls/breakdown/query/core.py @@ -7,8 +7,8 @@ from src.db.models.impl.annotation.agency.user.sqlalchemy import AnnotationAgencyUser from src.db.models.impl.flag.url_validated.sqlalchemy import FlagURLValidated from src.db.models.impl.url.core.sqlalchemy import URL -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.queries.base.builder import QueryBuilderBase @@ -19,18 +19,18 @@ async def run(self, session: AsyncSession) -> GetMetricsURLsBreakdownPendingResp flags = ( select( URL.id.label("url_id"), - case((AnnotationUserRecordType.url_id != None, literal(True)), else_=literal(False)).label( + case((AnnotationRecordTypeUser.url_id != None, literal(True)), else_=literal(False)).label( "has_user_record_type_annotation" ), - case((AnnotationUserURLType.url_id != None, literal(True)), else_=literal(False)).label( + case((AnnotationURLTypeUser.url_id != None, literal(True)), else_=literal(False)).label( "has_user_relevant_annotation" ), case((AnnotationAgencyUser.url_id != None, literal(True)), else_=literal(False)).label( "has_user_agency_annotation" ), ) - .outerjoin(AnnotationUserRecordType, URL.id == AnnotationUserRecordType.url_id) - .outerjoin(AnnotationUserURLType, URL.id == AnnotationUserURLType.url_id) + .outerjoin(AnnotationRecordTypeUser, URL.id == AnnotationRecordTypeUser.url_id) + .outerjoin(AnnotationURLTypeUser, URL.id == AnnotationURLTypeUser.url_id) .outerjoin(AnnotationAgencyUser, URL.id == AnnotationAgencyUser.url_id) ).cte("flags") diff --git a/src/api/endpoints/submit/data_source/queries/core.py b/src/api/endpoints/submit/data_source/queries/core.py index 17233386..77c33dca 100644 --- a/src/api/endpoints/submit/data_source/queries/core.py +++ b/src/api/endpoints/submit/data_source/queries/core.py @@ -12,8 +12,8 @@ from src.db.models.impl.annotation.location.anon.sqlalchemy import AnnotationLocationAnon from src.db.models.impl.annotation.name.suggestion.enums import NameSuggestionSource from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion -from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationAnonRecordType -from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationAnonURLType +from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationRecordTypeAnon +from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationURLTypeAnon from src.db.models.impl.batch.sqlalchemy import Batch from src.db.models.impl.flag.url_validated.enums import URLType from src.db.models.impl.link.batch_url.sqlalchemy import LinkBatchURL @@ -75,7 +75,7 @@ async def run( session_id: uuid.UUID = await MakeAnonymousSessionQueryBuilder().run(session=session) # Add URL Type Suggestion - url_type_suggestion = AnnotationAnonURLType( + url_type_suggestion = AnnotationURLTypeAnon( url_id=url_id, url_type=URLType.DATA_SOURCE, session_id=session_id @@ -84,7 +84,7 @@ async def run( # Optionally add Record Type as suggestion if self.request.record_type is not None: - record_type_suggestion = AnnotationAnonRecordType( + record_type_suggestion = AnnotationRecordTypeAnon( url_id=url_id, record_type=self.request.record_type.value, session_id=session_id diff --git a/src/api/endpoints/submit/url/queries/core.py b/src/api/endpoints/submit/url/queries/core.py index ccbbc2c4..54ab5439 100644 --- a/src/api/endpoints/submit/url/queries/core.py +++ b/src/api/endpoints/submit/url/queries/core.py @@ -12,11 +12,11 @@ from src.db.models.impl.annotation.location.user.sqlalchemy import AnnotationLocationUser from src.db.models.impl.annotation.name.suggestion.enums import NameSuggestionSource from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement from src.db.models.impl.link.user_suggestion_not_found.users_submitted_url.sqlalchemy import LinkUserSubmittedURL from src.db.models.impl.url.core.enums import URLSource from src.db.models.impl.url.core.sqlalchemy import URL -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser from src.db.queries.base.builder import QueryBuilderBase from src.util.models.url_and_scheme import URLAndScheme from src.util.url import clean_url, get_url_and_scheme, is_valid_url @@ -77,7 +77,7 @@ async def run(self, session: AsyncSession) -> URLSubmissionResponse: # Add record type as suggestion if exists if self.request.record_type is not None: - rec_sugg = AnnotationUserRecordType( + rec_sugg = AnnotationRecordTypeUser( user_id=self.user_id, url_id=url_insert.id, record_type=self.request.record_type.value @@ -94,7 +94,7 @@ async def run(self, session: AsyncSession) -> URLSubmissionResponse: session.add(name_sugg) await session.flush() - link_name_sugg = LinkUserNameSuggestion( + link_name_sugg = AnnotationNameUserEndorsement( suggestion_id=name_sugg.id, user_id=self.user_id ) diff --git a/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/name.py b/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/name.py index cec89ef2..606105d0 100644 --- a/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/name.py +++ b/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/name.py @@ -3,7 +3,7 @@ from src.core.tasks.url.operators.validate.queries.ctes.counts.core import ValidatedCountsCTEContainer from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion from src.db.models.impl.annotation.name.anon.sqlalchemy import AnnotationNameAnonEndorsement -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement from src.db.models.views.unvalidated_url import UnvalidatedURL _user_counts = ( @@ -13,8 +13,8 @@ func.count().label("votes") ) .join( - LinkUserNameSuggestion, - LinkUserNameSuggestion.suggestion_id == AnnotationNameSuggestion.id + AnnotationNameUserEndorsement, + AnnotationNameUserEndorsement.suggestion_id == AnnotationNameSuggestion.id ) .group_by( AnnotationNameSuggestion.url_id, diff --git a/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/record_type.py b/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/record_type.py index efc92455..19455587 100644 --- a/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/record_type.py +++ b/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/record_type.py @@ -2,31 +2,31 @@ from src.core.tasks.url.operators.validate.queries.ctes.counts.constants import ANONYMOUS_VOTE_RATIO from src.core.tasks.url.operators.validate.queries.ctes.counts.core import ValidatedCountsCTEContainer -from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationAnonRecordType -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType +from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationRecordTypeAnon +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser from src.db.models.views.unvalidated_url import UnvalidatedURL _user_counts = ( select( - AnnotationUserRecordType.url_id, - AnnotationUserRecordType.record_type.label("entity"), + AnnotationRecordTypeUser.url_id, + AnnotationRecordTypeUser.record_type.label("entity"), func.count().label("votes") ) .group_by( - AnnotationUserRecordType.url_id, - AnnotationUserRecordType.record_type + AnnotationRecordTypeUser.url_id, + AnnotationRecordTypeUser.record_type ) ) _anon_counts = ( select( - AnnotationAnonRecordType.url_id, - AnnotationAnonRecordType.record_type.label("entity"), + AnnotationRecordTypeAnon.url_id, + AnnotationRecordTypeAnon.record_type.label("entity"), (func.count() * ANONYMOUS_VOTE_RATIO).label("votes") ) .group_by( - AnnotationAnonRecordType.url_id, - AnnotationAnonRecordType.record_type + AnnotationRecordTypeAnon.url_id, + AnnotationRecordTypeAnon.record_type ) ) diff --git a/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/url_type.py b/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/url_type.py index 6c87e69b..bd92fdb8 100644 --- a/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/url_type.py +++ b/src/core/tasks/url/operators/validate/queries/ctes/counts/impl/url_type.py @@ -2,31 +2,31 @@ from src.core.tasks.url.operators.validate.queries.ctes.counts.constants import ANONYMOUS_VOTE_RATIO from src.core.tasks.url.operators.validate.queries.ctes.counts.core import ValidatedCountsCTEContainer -from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationAnonURLType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationURLTypeAnon +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.models.views.unvalidated_url import UnvalidatedURL _user_counts = ( select( - AnnotationUserURLType.url_id, - AnnotationUserURLType.type.label("entity"), + AnnotationURLTypeUser.url_id, + AnnotationURLTypeUser.type.label("entity"), func.count().label("votes") ) .group_by( - AnnotationUserURLType.url_id, - AnnotationUserURLType.type + AnnotationURLTypeUser.url_id, + AnnotationURLTypeUser.type ) ) _anon_counts = ( select( - AnnotationAnonURLType.url_id, - AnnotationAnonURLType.url_type.label("entity"), + AnnotationURLTypeAnon.url_id, + AnnotationURLTypeAnon.url_type.label("entity"), (func.count() / ANONYMOUS_VOTE_RATIO).label("votes") ) .group_by( - AnnotationAnonURLType.url_id, - AnnotationAnonURLType.url_type + AnnotationURLTypeAnon.url_id, + AnnotationURLTypeAnon.url_type ) ) diff --git a/src/db/client/async_.py b/src/db/client/async_.py index c780f9d1..89187f11 100644 --- a/src/db/client/async_.py +++ b/src/db/client/async_.py @@ -77,9 +77,9 @@ from src.db.models.impl.url.html.compressed.sqlalchemy import URLCompressedHTML from src.db.models.impl.url.optional_ds_metadata.sqlalchemy import URLOptionalDataSourceMetadata from src.db.models.impl.annotation.record_type.auto.sqlalchemy import AnnotationAutoRecordType -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser from src.db.models.impl.annotation.url_type.auto.sqlalchemy import AnnotationAutoURLType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.models.impl.url.task_error.sqlalchemy import URLTaskError from src.db.models.impl.url.web_metadata.sqlalchemy import URLWebMetadata from src.db.models.templates_.base import Base @@ -263,7 +263,7 @@ async def add_user_relevant_suggestion( ): prior_suggestion = await self.get_user_suggestion( session, - model=AnnotationUserURLType, + model=AnnotationURLTypeUser, user_id=user_id, url_id=url_id ) @@ -271,7 +271,7 @@ async def add_user_relevant_suggestion( prior_suggestion.type = suggested_status.value return - suggestion = AnnotationUserURLType( + suggestion = AnnotationURLTypeUser( url_id=url_id, user_id=user_id, type=suggested_status.value @@ -304,7 +304,7 @@ async def add_user_record_type_suggestion( ): prior_suggestion = await self.get_user_suggestion( session, - model=AnnotationUserRecordType, + model=AnnotationRecordTypeUser, user_id=user_id, url_id=url_id ) @@ -312,7 +312,7 @@ async def add_user_record_type_suggestion( prior_suggestion.record_type = record_type.value return - suggestion = AnnotationUserRecordType( + suggestion = AnnotationRecordTypeUser( url_id=url_id, user_id=user_id, record_type=record_type.value diff --git a/src/db/client/types.py b/src/db/client/types.py index 8e3bff0d..0f132aeb 100644 --- a/src/db/client/types.py +++ b/src/db/client/types.py @@ -1,5 +1,5 @@ from src.db.models.impl.annotation.agency.user.sqlalchemy import AnnotationAgencyUser -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser -UserSuggestionModel = AnnotationUserURLType or AnnotationUserRecordType or AnnotationAgencyUser +UserSuggestionModel = AnnotationURLTypeUser or AnnotationRecordTypeUser or AnnotationAgencyUser diff --git a/src/db/constants.py b/src/db/constants.py index 87fd1f19..cf073fb7 100644 --- a/src/db/constants.py +++ b/src/db/constants.py @@ -1,13 +1,13 @@ from src.db.models.impl.annotation.agency.user.sqlalchemy import AnnotationAgencyUser -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser PLACEHOLDER_AGENCY_NAME = "PLACEHOLDER_AGENCY_NAME" STANDARD_ROW_LIMIT = 100 USER_ANNOTATION_MODELS = [ - AnnotationUserURLType, - AnnotationUserRecordType, + AnnotationURLTypeUser, + AnnotationRecordTypeUser, AnnotationAgencyUser ] \ No newline at end of file diff --git a/src/db/dto_converter.py b/src/db/dto_converter.py index 4eb5a4cd..eec2f32c 100644 --- a/src/db/dto_converter.py +++ b/src/db/dto_converter.py @@ -11,9 +11,9 @@ from src.db.models.impl.url.html.content.enums import HTMLContentType from src.db.models.impl.url.html.content.sqlalchemy import URLHTMLContent from src.db.models.impl.annotation.record_type.auto.sqlalchemy import AnnotationAutoRecordType -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser from src.db.models.impl.annotation.url_type.auto.sqlalchemy import AnnotationAutoURLType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser class DTOConverter: @@ -24,7 +24,7 @@ class DTOConverter: @staticmethod def final_review_annotation_relevant_info( - user_suggestions: list[AnnotationUserURLType], + user_suggestions: list[AnnotationURLTypeUser], auto_suggestion: AnnotationAutoURLType ) -> FinalReviewAnnotationRelevantInfo: @@ -44,7 +44,7 @@ def final_review_annotation_relevant_info( @staticmethod def final_review_annotation_record_type_info( - user_suggestions: list[AnnotationUserRecordType], + user_suggestions: list[AnnotationRecordTypeUser], auto_suggestion: AnnotationAutoRecordType ): diff --git a/src/db/models/impl/annotation/name/user/pydantic.py b/src/db/models/impl/annotation/name/user/pydantic.py index 95fe0150..fb662bcd 100644 --- a/src/db/models/impl/annotation/name/user/pydantic.py +++ b/src/db/models/impl/annotation/name/user/pydantic.py @@ -1,4 +1,4 @@ -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement from src.db.templates.markers.bulk.insert import BulkInsertableModel @@ -8,5 +8,5 @@ class LinkUserNameSuggestionPydantic(BulkInsertableModel): user_id: int @classmethod - def sa_model(cls) -> type[LinkUserNameSuggestion]: - return LinkUserNameSuggestion \ No newline at end of file + def sa_model(cls) -> type[AnnotationNameUserEndorsement]: + return AnnotationNameUserEndorsement \ No newline at end of file diff --git a/src/db/models/impl/annotation/name/user/sqlalchemy.py b/src/db/models/impl/annotation/name/user/sqlalchemy.py index cf23dd6f..e456d026 100644 --- a/src/db/models/impl/annotation/name/user/sqlalchemy.py +++ b/src/db/models/impl/annotation/name/user/sqlalchemy.py @@ -4,7 +4,7 @@ from src.db.models.templates_.base import Base -class LinkUserNameSuggestion( +class AnnotationNameUserEndorsement( Base, CreatedAtMixin, ): diff --git a/src/db/models/impl/annotation/record_type/anon/sqlalchemy.py b/src/db/models/impl/annotation/record_type/anon/sqlalchemy.py index 304ab1be..7f7ac028 100644 --- a/src/db/models/impl/annotation/record_type/anon/sqlalchemy.py +++ b/src/db/models/impl/annotation/record_type/anon/sqlalchemy.py @@ -7,7 +7,7 @@ from src.db.models.templates_.base import Base -class AnnotationAnonRecordType( +class AnnotationRecordTypeAnon( Base, URLDependentMixin, CreatedAtMixin, diff --git a/src/db/models/impl/annotation/record_type/user/user.py b/src/db/models/impl/annotation/record_type/user/user.py index 689d985b..c4a84b72 100644 --- a/src/db/models/impl/annotation/record_type/user/user.py +++ b/src/db/models/impl/annotation/record_type/user/user.py @@ -8,7 +8,7 @@ from src.db.models.types import record_type_values -class AnnotationUserRecordType( +class AnnotationRecordTypeUser( UpdatedAtMixin, CreatedAtMixin, URLDependentMixin, diff --git a/src/db/models/impl/annotation/url_type/anon/sqlalchemy.py b/src/db/models/impl/annotation/url_type/anon/sqlalchemy.py index a1de1826..e8a8db18 100644 --- a/src/db/models/impl/annotation/url_type/anon/sqlalchemy.py +++ b/src/db/models/impl/annotation/url_type/anon/sqlalchemy.py @@ -7,7 +7,7 @@ from src.db.models.templates_.base import Base -class AnnotationAnonURLType( +class AnnotationURLTypeAnon( Base, URLDependentMixin, CreatedAtMixin, diff --git a/src/db/models/impl/annotation/url_type/user/sqlalchemy.py b/src/db/models/impl/annotation/url_type/user/sqlalchemy.py index af84a758..8f02a65d 100644 --- a/src/db/models/impl/annotation/url_type/user/sqlalchemy.py +++ b/src/db/models/impl/annotation/url_type/user/sqlalchemy.py @@ -9,7 +9,7 @@ from src.db.models.templates_.with_id import WithIDBase -class AnnotationUserURLType( +class AnnotationURLTypeUser( UpdatedAtMixin, CreatedAtMixin, URLDependentMixin, diff --git a/src/db/models/impl/url/core/sqlalchemy.py b/src/db/models/impl/url/core/sqlalchemy.py index dd52c1e1..a4295ae3 100644 --- a/src/db/models/impl/url/core/sqlalchemy.py +++ b/src/db/models/impl/url/core/sqlalchemy.py @@ -15,9 +15,9 @@ from src.db.models.impl.url.html.compressed.sqlalchemy import URLCompressedHTML from src.db.models.impl.url.record_type.sqlalchemy import URLRecordType from src.db.models.impl.annotation.record_type.auto.sqlalchemy import AnnotationAutoRecordType -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser from src.db.models.impl.annotation.url_type.auto.sqlalchemy import AnnotationAutoURLType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.models.impl.url.task_error.sqlalchemy import URLTaskError from src.db.models.mixins import UpdatedAtMixin, CreatedAtMixin from src.db.models.templates_.with_id import WithIDBase @@ -118,12 +118,12 @@ def full_url(cls): auto_record_type_suggestion = relationship( AnnotationAutoRecordType, uselist=False, back_populates="url") user_record_type_suggestions = relationship( - AnnotationUserRecordType, back_populates="url") + AnnotationRecordTypeUser, back_populates="url") # Relvant/URL Type auto_relevant_suggestion = relationship( AnnotationAutoURLType, uselist=False, back_populates="url") user_relevant_suggestions = relationship( - AnnotationUserURLType, back_populates="url") + AnnotationURLTypeUser, back_populates="url") reviewing_user = relationship( "ReviewingUserURL", uselist=False, back_populates="url") diff --git a/src/db/queries/implementations/core/common/annotation_exists_/constants.py b/src/db/queries/implementations/core/common/annotation_exists_/constants.py index 5851b42b..dbdfaa1b 100644 --- a/src/db/queries/implementations/core/common/annotation_exists_/constants.py +++ b/src/db/queries/implementations/core/common/annotation_exists_/constants.py @@ -1,15 +1,15 @@ from src.db.models.impl.annotation.agency.auto.subtask.sqlalchemy import AnnotationAgencyAutoSubtask from src.db.models.impl.annotation.agency.user.sqlalchemy import AnnotationAgencyUser from src.db.models.impl.annotation.record_type.auto.sqlalchemy import AnnotationAutoRecordType -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser from src.db.models.impl.annotation.url_type.auto.sqlalchemy import AnnotationAutoURLType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser ALL_ANNOTATION_MODELS = [ AnnotationAutoRecordType, AnnotationAutoURLType, AnnotationAgencyAutoSubtask, - AnnotationUserURLType, - AnnotationUserRecordType, + AnnotationURLTypeUser, + AnnotationRecordTypeUser, AnnotationAgencyUser ] diff --git a/src/db/queries/implementations/core/metrics/urls/aggregated/pending.py b/src/db/queries/implementations/core/metrics/urls/aggregated/pending.py index be8a76f9..c224fa40 100644 --- a/src/db/queries/implementations/core/metrics/urls/aggregated/pending.py +++ b/src/db/queries/implementations/core/metrics/urls/aggregated/pending.py @@ -7,8 +7,8 @@ from src.collectors.enums import URLStatus from src.db.models.impl.annotation.agency.user.sqlalchemy import AnnotationAgencyUser from src.db.models.impl.url.core.sqlalchemy import URL -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.models.mixins import URLDependentMixin from src.db.queries.base.builder import QueryBuilderBase from src.db.queries.implementations.core.common.annotation_exists_.core import AnnotationExistsCTEQueryBuilder @@ -17,11 +17,11 @@ class PendingAnnotationExistsCTEQueryBuilder(AnnotationExistsCTEQueryBuilder): @property def has_user_relevant_annotation(self): - return self.get_exists_for_model(AnnotationUserURLType) + return self.get_exists_for_model(AnnotationURLTypeUser) @property def has_user_record_type_annotation(self): - return self.get_exists_for_model(AnnotationUserRecordType) + return self.get_exists_for_model(AnnotationRecordTypeUser) @property def has_user_agency_annotation(self): diff --git a/src/db/types.py b/src/db/types.py index 0ff28637..df065cab 100644 --- a/src/db/types.py +++ b/src/db/types.py @@ -1,10 +1,10 @@ from typing import TypeVar from src.db.models.impl.annotation.agency.user.sqlalchemy import AnnotationAgencyUser -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.queries.base.labels import LabelsBase -UserSuggestionType = AnnotationAgencyUser | AnnotationUserURLType | AnnotationUserRecordType +UserSuggestionType = AnnotationAgencyUser | AnnotationURLTypeUser | AnnotationRecordTypeUser LabelsType = TypeVar("LabelsType", bound=LabelsBase) \ No newline at end of file diff --git a/tests/automated/integration/api/annotate/all/test_happy_path.py b/tests/automated/integration/api/annotate/all/test_happy_path.py index faed2220..0ed29def 100644 --- a/tests/automated/integration/api/annotate/all/test_happy_path.py +++ b/tests/automated/integration/api/annotate/all/test_happy_path.py @@ -12,9 +12,9 @@ from src.db.models.impl.annotation.location.user.sqlalchemy import AnnotationLocationUser from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion from src.db.models.impl.flag.url_validated.enums import URLType -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from tests.helpers.data_creator.models.creation_info.us_state import USStateCreationInfo from tests.helpers.setup.final_review.core import setup_for_get_next_url_for_final_review @@ -106,7 +106,7 @@ async def test_annotate_all( # Check that all annotations are present in the database # Check URL Type Suggestions - all_relevance_suggestions: list[AnnotationUserURLType] = await adb_client.get_all(AnnotationUserURLType) + all_relevance_suggestions: list[AnnotationURLTypeUser] = await adb_client.get_all(AnnotationURLTypeUser) assert len(all_relevance_suggestions) == 4 suggested_types: set[URLType] = {sugg.type for sugg in all_relevance_suggestions} assert suggested_types == {URLType.DATA_SOURCE, URLType.NOT_RELEVANT} @@ -118,7 +118,7 @@ async def test_annotate_all( assert agency_id in suggested_agency_ids # Should be one record type - all_record_type_suggestions = await adb_client.get_all(AnnotationUserRecordType) + all_record_type_suggestions = await adb_client.get_all(AnnotationRecordTypeUser) assert len(all_record_type_suggestions) == 3 suggested_record_types: set[RecordType] = { sugg.record_type for sugg in all_record_type_suggestions @@ -172,6 +172,6 @@ async def test_annotate_all( assert "New Name" in suggested_names # Confirm 2 link user name suggestions - link_user_name_suggestions: list[LinkUserNameSuggestion] = await adb_client.get_all(LinkUserNameSuggestion) + link_user_name_suggestions: list[AnnotationNameUserEndorsement] = await adb_client.get_all(AnnotationNameUserEndorsement) assert len(link_user_name_suggestions) == 2 diff --git a/tests/automated/integration/api/annotate/anonymous/test_core.py b/tests/automated/integration/api/annotate/anonymous/test_core.py index 48fb4f4d..e977accb 100644 --- a/tests/automated/integration/api/annotate/anonymous/test_core.py +++ b/tests/automated/integration/api/annotate/anonymous/test_core.py @@ -8,18 +8,25 @@ from src.api.endpoints.annotate.all.post.models.name import AnnotationPostNameInfo from src.api.endpoints.annotate.all.post.models.request import AllAnnotationPostInfo from src.api.endpoints.annotate.anonymous.get.response import GetNextURLForAnonymousAnnotationResponse +from src.api.shared.models.message_response import MessageResponse from src.core.enums import RecordType from src.db.dtos.url.mapping_.simple import SimpleURLMapping from src.db.models.impl.annotation.agency.anon.sqlalchemy import AnnotationAgencyAnon +from src.db.models.impl.annotation.agency.user.sqlalchemy import AnnotationAgencyUser from src.db.models.impl.annotation.location.anon.sqlalchemy import AnnotationLocationAnon +from src.db.models.impl.annotation.location.user.sqlalchemy import AnnotationLocationUser from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion -from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationAnonRecordType -from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationAnonURLType +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement +from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationRecordTypeAnon +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationURLTypeAnon +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.models.impl.flag.url_validated.enums import URLType from src.db.models.impl.annotation.name.anon.sqlalchemy import AnnotationNameAnonEndorsement from src.db.models.mixins import URLDependentMixin from tests.automated.integration.api.annotate.anonymous.helper import get_next_url_for_anonymous_annotation, \ post_and_get_next_url_for_anonymous_annotation +from tests.automated.integration.conftest import MOCK_USER_ID from tests.helpers.data_creator.models.creation_info.us_state import USStateCreationInfo from tests.helpers.setup.final_review.core import setup_for_get_next_url_for_final_review from tests.helpers.setup.final_review.model import FinalReviewSetupInfo @@ -83,8 +90,8 @@ async def test_annotate_anonymous( for model in [ AnnotationAgencyAnon, AnnotationLocationAnon, - AnnotationAnonRecordType, - AnnotationAnonURLType + AnnotationRecordTypeAnon, + AnnotationURLTypeAnon ]: instances: list[URLDependentMixin] = await ddc.adb_client.get_all(model) assert len(instances) == 1 @@ -113,3 +120,52 @@ async def test_annotate_anonymous( assert get_response_3.next_annotation is not None assert get_response_3.next_annotation.url_info.url_id == post_response_1.next_annotation.url_info.url_id + ### TEST MIGRATION ### + # Call the migration endpoint with a user ID, and confirm all anonymous annotations have transferred to the user. + response: MessageResponse = rv.post_v3( + f'/annotate/migrate?session_id={session_id}', + expected_model=MessageResponse, + ) + assert response.message == 'Annotations migrated successfully.' + + # Check all annotations + + # URL Types + url_types: list[AnnotationURLTypeUser] = await ddc.adb_client.get_all(AnnotationURLTypeUser) + assert len(url_types) == 3 + annotation_url_type: AnnotationURLTypeUser = url_types[-1] + assert annotation_url_type.user_id == MOCK_USER_ID + assert annotation_url_type.url_id == get_response_1.next_annotation.url_info.url_id + assert annotation_url_type.type == URLType.DATA_SOURCE + + # Locations + locations: list[AnnotationLocationUser] = await ddc.adb_client.get_all(AnnotationLocationUser) + assert len(locations) == 1 + annotation_location: AnnotationLocationUser = locations[0] + assert annotation_location.user_id == MOCK_USER_ID + assert annotation_location.url_id == get_response_1.next_annotation.url_info.url_id + assert annotation_location.location_id == pennsylvania.location_id + + # Agencies + agencies: list[AnnotationAgencyUser] = await ddc.adb_client.get_all(AnnotationAgencyUser) + assert len(agencies) == 3 + annotation_agency: AnnotationAgencyUser = agencies[-1] + assert annotation_agency.user_id == MOCK_USER_ID + assert annotation_agency.url_id == get_response_1.next_annotation.url_info.url_id + assert annotation_agency.agency_id == agency_id + + # Record Types + record_types: list[AnnotationRecordTypeUser] = await ddc.adb_client.get_all(AnnotationRecordTypeUser) + assert len(record_types) == 3 + annotation_record_type: AnnotationRecordTypeUser = record_types[-1] + assert annotation_record_type.user_id == MOCK_USER_ID + assert annotation_record_type.url_id == get_response_1.next_annotation.url_info.url_id + assert annotation_record_type.record_type == RecordType.ACCIDENT_REPORTS.value + + # Name Suggestions + name_suggestions: list[AnnotationNameUserEndorsement] = await ddc.adb_client.get_all(AnnotationNameUserEndorsement) + assert len(name_suggestions) == 1 + annotation_name: AnnotationNameUserEndorsement = name_suggestions[0] + assert annotation_name.user_id == MOCK_USER_ID + + diff --git a/tests/automated/integration/api/submit/data_source/test_core.py b/tests/automated/integration/api/submit/data_source/test_core.py index 5a8fb103..51bbc93b 100644 --- a/tests/automated/integration/api/submit/data_source/test_core.py +++ b/tests/automated/integration/api/submit/data_source/test_core.py @@ -10,8 +10,8 @@ from src.db.models.impl.annotation.agency.anon.sqlalchemy import AnnotationAgencyAnon from src.db.models.impl.annotation.location.anon.sqlalchemy import AnnotationLocationAnon from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion -from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationAnonRecordType -from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationAnonURLType +from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationRecordTypeAnon +from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationURLTypeAnon from src.db.models.impl.batch.sqlalchemy import Batch from src.db.models.impl.flag.url_validated.enums import URLType from src.db.models.impl.link.batch_url.sqlalchemy import LinkBatchURL @@ -96,7 +96,7 @@ async def test_submit_data_source( assert batch_url_link.url_id == url.id # Check for anonymous annotations - url_type_suggestion: AnnotationAnonURLType = await adb_client.one_or_none_model(AnnotationAnonURLType) + url_type_suggestion: AnnotationURLTypeAnon = await adb_client.one_or_none_model(AnnotationURLTypeAnon) assert url_type_suggestion is not None assert url_type_suggestion.url_id == url.id assert url_type_suggestion.url_type == URLType.DATA_SOURCE @@ -120,7 +120,7 @@ async def test_submit_data_source( assert name_suggestion.suggestion == "Example name" # Check for Record Type Suggestion - record_type_suggestion: AnnotationAnonRecordType = await adb_client.one_or_none_model(AnnotationAnonRecordType) + record_type_suggestion: AnnotationRecordTypeAnon = await adb_client.one_or_none_model(AnnotationRecordTypeAnon) assert record_type_suggestion.record_type == RecordType.COMPLAINTS_AND_MISCONDUCT assert record_type_suggestion.session_id == session_id diff --git a/tests/automated/integration/api/submit/test_url_maximal.py b/tests/automated/integration/api/submit/test_url_maximal.py index 27fbfe2f..1d458c98 100644 --- a/tests/automated/integration/api/submit/test_url_maximal.py +++ b/tests/automated/integration/api/submit/test_url_maximal.py @@ -9,10 +9,10 @@ from src.db.models.impl.annotation.location.user.sqlalchemy import AnnotationLocationUser from src.db.models.impl.annotation.name.suggestion.enums import NameSuggestionSource from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement from src.db.models.impl.link.user_suggestion_not_found.users_submitted_url.sqlalchemy import LinkUserSubmittedURL from src.db.models.impl.url.core.sqlalchemy import URL -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser from tests.helpers.api_test_helper import APITestHelper from tests.helpers.data_creator.core import DBDataCreator from tests.helpers.data_creator.models.creation_info.locality import LocalityCreationInfo @@ -75,13 +75,13 @@ async def test_maximal( assert name_sugg.suggestion == "Example URL" assert name_sugg.source == NameSuggestionSource.USER - name_link_suggs: list[LinkUserNameSuggestion] = await adb_client.get_all(LinkUserNameSuggestion) + name_link_suggs: list[AnnotationNameUserEndorsement] = await adb_client.get_all(AnnotationNameUserEndorsement) assert len(name_link_suggs) == 1 - name_link_sugg: LinkUserNameSuggestion = name_link_suggs[0] + name_link_sugg: AnnotationNameUserEndorsement = name_link_suggs[0] assert name_link_sugg.suggestion_id == name_sugg.id - rec_suggs: list[AnnotationUserRecordType] = await adb_client.get_all(AnnotationUserRecordType) + rec_suggs: list[AnnotationRecordTypeUser] = await adb_client.get_all(AnnotationRecordTypeUser) assert len(rec_suggs) == 1 - rec_sugg: AnnotationUserRecordType = rec_suggs[0] + rec_sugg: AnnotationRecordTypeUser = rec_suggs[0] assert rec_sugg.url_id == url_id assert rec_sugg.record_type == RecordType.INCARCERATION_RECORDS.value diff --git a/tests/automated/integration/api/url/by_id/delete/test_any_url.py b/tests/automated/integration/api/url/by_id/delete/test_any_url.py index 49f7a407..2711c103 100644 --- a/tests/automated/integration/api/url/by_id/delete/test_any_url.py +++ b/tests/automated/integration/api/url/by_id/delete/test_any_url.py @@ -19,8 +19,8 @@ from src.db.models.impl.annotation.location.user.sqlalchemy import AnnotationLocationUser from src.db.models.impl.annotation.name.suggestion.enums import NameSuggestionSource from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion -from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationAnonRecordType -from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationAnonURLType +from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationRecordTypeAnon +from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationURLTypeAnon from src.db.models.impl.change_log import ChangeLog from src.db.models.impl.flag.checked_for_ia.sqlalchemy import FlagURLCheckedForInternetArchives from src.db.models.impl.flag.root_url.sqlalchemy import FlagRootURL @@ -29,7 +29,7 @@ from src.db.models.impl.link.batch_url.sqlalchemy import LinkBatchURL from src.db.models.impl.link.url_redirect_url.sqlalchemy import LinkURLRedirectURL from src.db.models.impl.link.urls_root_url.sqlalchemy import LinkURLRootURL -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement from src.db.models.impl.link.user_suggestion_not_found.agency.sqlalchemy import LinkUserSuggestionAgencyNotFound from src.db.models.impl.link.user_suggestion_not_found.location.sqlalchemy import LinkUserSuggestionLocationNotFound from src.db.models.impl.link.user_suggestion_not_found.users_submitted_url.sqlalchemy import LinkUserSubmittedURL @@ -41,9 +41,9 @@ from src.db.models.impl.url.internet_archives.save.sqlalchemy import URLInternetArchivesSaveMetadata from src.db.models.impl.url.screenshot.sqlalchemy import URLScreenshot from src.db.models.impl.annotation.record_type.auto.sqlalchemy import AnnotationAutoRecordType -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser from src.db.models.impl.annotation.url_type.auto.sqlalchemy import AnnotationAutoURLType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser from src.db.models.impl.url.task_error.sqlalchemy import URLTaskError from src.db.models.impl.url.web_metadata.sqlalchemy import URLWebMetadata from src.db.queries.implementations.anonymous_session import MakeAnonymousSessionQueryBuilder @@ -141,9 +141,9 @@ async def _check_results( ### Agency AnnotationAgencyUser, ### Record Type - AnnotationUserRecordType, + AnnotationRecordTypeUser, ### URL Type - AnnotationUserURLType, + AnnotationURLTypeUser, ### Location AnnotationLocationUser, AnnotationNameSuggestion, @@ -153,9 +153,9 @@ async def _check_results( ### Location AnnotationLocationAnon, ### Record Type - AnnotationAnonRecordType, + AnnotationRecordTypeAnon, ### URL Type - AnnotationAnonURLType, + AnnotationURLTypeAnon, ] for model in models: assert await dbc.get_all(model) == [] @@ -380,7 +380,7 @@ async def _setup( ) ### Record Type await dbc.add( - AnnotationUserRecordType( + AnnotationRecordTypeUser( url_id=url.url_id, user_id=1, record_type=RecordType.BOOKING_REPORTS.value, @@ -388,7 +388,7 @@ async def _setup( ) ### URL Type await dbc.add( - AnnotationUserURLType( + AnnotationURLTypeUser( url_id=url.url_id, type=URLType.INDIVIDUAL_RECORD, user_id=1 @@ -412,7 +412,7 @@ async def _setup( return_id=True ) await dbc.add( - LinkUserNameSuggestion( + AnnotationNameUserEndorsement( suggestion_id=name_suggestion_id, user_id=1, ) @@ -429,13 +429,13 @@ async def _setup( session_id=session_id, ), ### Record Type - AnnotationAnonRecordType( + AnnotationRecordTypeAnon( url_id=url.url_id, record_type=RecordType.BOOKING_REPORTS.value, session_id=session_id, ), ### URL Type - AnnotationAnonURLType( + AnnotationURLTypeAnon( url_id=url.url_id, url_type=URLType.INDIVIDUAL_RECORD, session_id=session_id, diff --git a/tests/automated/integration/readonly/setup/annotations.py b/tests/automated/integration/readonly/setup/annotations.py index ab2ef13e..9e701f62 100644 --- a/tests/automated/integration/readonly/setup/annotations.py +++ b/tests/automated/integration/readonly/setup/annotations.py @@ -5,9 +5,9 @@ from src.db.models.impl.annotation.name.suggestion.enums import NameSuggestionSource from src.db.models.impl.annotation.name.suggestion.sqlalchemy import AnnotationNameSuggestion from src.db.models.impl.flag.url_validated.enums import URLType -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion -from src.db.models.impl.annotation.record_type.user.user import AnnotationUserRecordType -from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationUserURLType +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement +from src.db.models.impl.annotation.record_type.user.user import AnnotationRecordTypeUser +from src.db.models.impl.annotation.url_type.user.sqlalchemy import AnnotationURLTypeUser async def add_full_data_sources_annotations( @@ -26,17 +26,17 @@ async def add_full_data_sources_annotations( name_suggestion, return_id=True ) - url_type_suggestion = AnnotationUserURLType( + url_type_suggestion = AnnotationURLTypeUser( url_id=url_id, user_id=user_id, type=URLType.DATA_SOURCE ) - record_type_suggestion = AnnotationUserRecordType( + record_type_suggestion = AnnotationRecordTypeUser( user_id=user_id, url_id=url_id, record_type=RecordType.RECORDS_REQUEST_INFO.value ) - user_name_suggestion = LinkUserNameSuggestion( + user_name_suggestion = AnnotationNameUserEndorsement( user_id=user_id, suggestion_id=name_suggestion_id, ) @@ -64,7 +64,7 @@ async def add_minimal_not_relevant_annotation( user_id: int, adb_client: AsyncDatabaseClient ) -> None: - url_type_suggestion = AnnotationUserURLType( + url_type_suggestion = AnnotationURLTypeUser( url_id=url_id, user_id=user_id, type=URLType.NOT_RELEVANT diff --git a/tests/automated/integration/tasks/url/impl/validate/test_data_source.py b/tests/automated/integration/tasks/url/impl/validate/test_data_source.py index d99e4448..95d636c2 100644 --- a/tests/automated/integration/tasks/url/impl/validate/test_data_source.py +++ b/tests/automated/integration/tasks/url/impl/validate/test_data_source.py @@ -14,8 +14,8 @@ from src.core.tasks.url.operators.validate.core import AutoValidateURLTaskOperator from src.db.models.impl.annotation.agency.anon.sqlalchemy import AnnotationAgencyAnon from src.db.models.impl.annotation.location.anon.sqlalchemy import AnnotationLocationAnon -from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationAnonRecordType -from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationAnonURLType +from src.db.models.impl.annotation.record_type.anon.sqlalchemy import AnnotationRecordTypeAnon +from src.db.models.impl.annotation.url_type.anon.sqlalchemy import AnnotationURLTypeAnon from src.db.models.impl.flag.url_validated.enums import URLType from src.db.models.impl.annotation.name.anon.sqlalchemy import AnnotationNameAnonEndorsement from tests.automated.integration.tasks.url.impl.validate.helper import TestValidateTaskHelper, DEFAULT_RECORD_TYPE @@ -55,12 +55,12 @@ async def test_data_source( session_id_2: UUID = await helper.get_anonymous_session_id() for session_id in [session_id_1, session_id_2]: - anon_url_type = AnnotationAnonURLType( + anon_url_type = AnnotationURLTypeAnon( url_type=URLType.DATA_SOURCE, session_id=session_id, url_id=helper.url_id ) - anon_record_type = AnnotationAnonRecordType( + anon_record_type = AnnotationRecordTypeAnon( record_type=DEFAULT_RECORD_TYPE, session_id=session_id, url_id=helper.url_id @@ -101,7 +101,7 @@ async def test_data_source( # Add tiebreaker -- a single anonymous vote session_id_3: UUID = await helper.get_anonymous_session_id() - anon_record_type = AnnotationAnonRecordType( + anon_record_type = AnnotationRecordTypeAnon( record_type=DEFAULT_RECORD_TYPE, session_id=session_id_3, url_id=helper.url_id diff --git a/tests/helpers/data_creator/core.py b/tests/helpers/data_creator/core.py index d3252202..d3f6c924 100644 --- a/tests/helpers/data_creator/core.py +++ b/tests/helpers/data_creator/core.py @@ -26,7 +26,7 @@ from src.db.models.impl.link.agency_location.sqlalchemy import LinkAgencyLocation from src.db.models.impl.link.url_agency.sqlalchemy import LinkURLAgency from src.db.models.impl.link.urls_root_url.sqlalchemy import LinkURLRootURL -from src.db.models.impl.annotation.name.user.sqlalchemy import LinkUserNameSuggestion +from src.db.models.impl.annotation.name.user.sqlalchemy import AnnotationNameUserEndorsement from src.db.models.impl.link.user_suggestion_not_found.agency.sqlalchemy import LinkUserSuggestionAgencyNotFound from src.db.models.impl.link.user_suggestion_not_found.location.sqlalchemy import LinkUserSuggestionLocationNotFound from src.db.models.impl.url.core.enums import URLSource @@ -709,7 +709,7 @@ async def user_name_endorsement( suggestion_id: int, user_id: int, ): - link = LinkUserNameSuggestion( + link = AnnotationNameUserEndorsement( suggestion_id=suggestion_id, user_id=user_id, )