Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion backend/app/crud/entries.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,16 @@ def get_entries_by_newsletter(
logger.debug(
f"Querying entries for newsletter_id={newsletter_id}, skip={skip}, limit={limit}"
)
query = db.query(Entry).filter(Entry.newsletter_id == newsletter_id).offset(skip)
query = (
db.query(Entry)
.order_by(Entry.received_at.desc())
.filter(Entry.newsletter_id == newsletter_id)
.offset(skip)
)

if limit is not None:
query = query.limit(limit)

return query.all()


Expand Down
1 change: 1 addition & 0 deletions backend/app/schemas/entries.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class EntryBase(BaseModel):
subject: str
body: str
message_id: str
received_at: datetime.datetime | None = None


class EntryCreate(EntryBase):
Expand Down
6 changes: 5 additions & 1 deletion backend/app/services/email_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,14 +199,18 @@ def _process_single_email(

subject = str(make_header(decode_header(msg["Subject"])))
body = _get_email_body(msg)
date_str = msg["Date"]
received_at = email.utils.parsedate_to_datetime(date_str) if date_str else None

if newsletter.extract_content:
cleaned_data = _extract_and_clean_html(body)
# The subject from the email itself is often better than what readability extracts
# so we only override the body.
body = cleaned_data["body"]

entry_schema = EntryCreate(subject=subject, body=body, message_id=message_id)
entry_schema = EntryCreate(
subject=subject, body=body, message_id=message_id, received_at=received_at
)
new_entry = create_entry(db, entry_schema, newsletter.id)

if not new_entry:
Expand Down
3 changes: 3 additions & 0 deletions backend/app/services/feed_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,14 @@ def _add_entries_to_feed(
else entry.subject
)
fe.content(entry.body, type="html")

if entry.received_at.tzinfo is None:
timezone_aware_received_at = entry.received_at.replace(tzinfo=tz.tzutc())
fe.published(timezone_aware_received_at)
fe.updated(timezone_aware_received_at)
else:
fe.published(entry.received_at)
fe.updated(entry.received_at)


def generate_feed(db: Session, feed_identifier: str):
Expand Down
2 changes: 1 addition & 1 deletion backend/app/tests/test_crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ def test_get_entries_by_newsletter(db_session: Session):
)
entries = get_entries_by_newsletter(db_session, newsletter.id)
assert len(entries) == 2
assert entries[0].subject == "Entry 1"
assert entries[0].subject == "Entry 2"


def test_update_newsletter(db_session: Session):
Expand Down