Skip to content

Commit

Permalink
Merge pull request #73 from CCRI-POPROX/mahamadul/feature/storage-new…
Browse files Browse the repository at this point in the history
…sletters-image_preview-modified

Add preview image id to impressions table
  • Loading branch information
karlhigley authored Feb 11, 2025
2 parents 6f1fdec + 343f3f4 commit e2f2827
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""adding preview image
Revision ID: 3d17fcf49eaa
Revises: f6ccafdb5b24
Create Date: 2025-01-31 15:54:10.085416
"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision: str = '3d17fcf49eaa'
down_revision: Union[str, None] = 'f6ccafdb5b24'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
op.add_column("impressions", sa.Column("preview_image_id", sa.UUID, nullable=True))

op.create_foreign_key(
"fk_impressions_images",
"impressions",
"images",
["preview_image_id"],
["image_id"]
)


def downgrade() -> None:
op.drop_constraint("fk_impressions_images", "impressions", type_="foreignkey")
op.drop_column("impressions", "preview_image_id")
20 changes: 20 additions & 0 deletions src/poprox_storage/repositories/articles.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import json
import logging
from collections import defaultdict
from datetime import datetime, timedelta
from uuid import UUID

Expand Down Expand Up @@ -169,6 +170,25 @@ def fetch_mentions(self) -> list[Mention]:
mentions.append(mention)
return mentions

def fetch_associated_image_ids(self, articles: list[Article]) -> dict[UUID, list[UUID]]:
association_table = self.tables["article_image_associations"]

article_ids = [a.article_id for a in articles]
association_query = select(association_table.c.article_id, association_table.c.image_id).where(
association_table.c.article_id.in_(article_ids)
)

association_result = self.conn.execute(association_query).fetchall()

# Converting association_result into a dictionary
article_image_dict = defaultdict(list)
for article_id, image_id in association_result:
if article_id not in article_image_dict:
article_image_dict[article_id] = []
article_image_dict[article_id].append(image_id)

return article_image_dict

def fetch_article_by_url(self, article_url: str, newsletter_id: UUID | None = None) -> UUID | None:
impression_table = self.tables["impressions"]
article_table = self.tables["articles"]
Expand Down
15 changes: 14 additions & 1 deletion src/poprox_storage/repositories/newsletters.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
Table,
and_,
insert,
null,
select,
)

Expand Down Expand Up @@ -41,9 +42,15 @@ def store_newsletter(self, newsletter: Newsletter):
self.conn.execute(stmt)

for impression in newsletter.impressions:
if impression.article.preview_image_id:
preview_image_id = str(impression.article.preview_image_id)
else:
preview_image_id = null()

stmt = insert(impression_table).values(
newsletter_id=str(newsletter.newsletter_id),
article_id=str(impression.article.article_id),
preview_image_id=preview_image_id,
position=impression.position,
)
self.conn.execute(stmt)
Expand Down Expand Up @@ -147,7 +154,12 @@ def _fetch_newsletters(self, newsletters_table, impressions_table, articles_tabl
newsletter_result = self.conn.execute(newsletter_query).fetchall()

impressions_query = (
select(impressions_table.c.newsletter_id, impressions_table.c.position, articles_table)
select(
impressions_table.c.newsletter_id,
impressions_table.c.preview_image_id,
impressions_table.c.position,
articles_table,
)
.join(
impressions_table,
articles_table.c.article_id == impressions_table.c.article_id,
Expand All @@ -164,6 +176,7 @@ def _convert_to_newsletter_objs(self, newsletter_result, impressions_result):
impressions_by_newsletter_id[row.newsletter_id].append(
Impression(
newsletter_id=row.newsletter_id,
preview_image_id=row.preview_image_id,
position=row.position,
article=Article(
article_id=row.article_id,
Expand Down

0 comments on commit e2f2827

Please sign in to comment.