Skip to content
Draft
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
35 changes: 25 additions & 10 deletions app/dao/template_email_files_dao.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,39 @@ def dao_create_template_email_file(template_email_file: TemplateEmailFile):


@autocommit
def dao_get_template_email_files_by_template_id(template_id, template_version=None):
def dao_get_template_email_files_by_template_id(template_id, template_version=None, get_pending=False):
if template_version:
query = (
select(TemplateEmailFileHistory)
.where(TemplateEmailFileHistory.template_id == template_id)
.where(TemplateEmailFileHistory.template_version <= template_version)
# .where(TemplateEmailFileHistory.archived_at.is_(None))
.order_by(TemplateEmailFileHistory.id)
.order_by(TemplateEmailFileHistory.version.desc())
.distinct(TemplateEmailFileHistory.id)
)
if get_pending:
query = (
select(TemplateEmailFileHistory)
.where(TemplateEmailFileHistory.template_id == template_id)
.where(TemplateEmailFileHistory.template_version <= template_version)
.order_by(TemplateEmailFileHistory.id)
.order_by(TemplateEmailFileHistory.version.desc())
.distinct(TemplateEmailFileHistory.id)
)
else:
query = (
select(TemplateEmailFileHistory)
.where(TemplateEmailFileHistory.template_id == template_id)
.where(TemplateEmailFileHistory.template_version <= template_version)
.where(TemplateEmailFileHistory.pending.is_(False))
.order_by(TemplateEmailFileHistory.id)
.order_by(TemplateEmailFileHistory.version.desc())
.distinct(TemplateEmailFileHistory.id)
)
# prune archived after the fact
# return db.session.execute(query).all()
return list(filter(lambda x: not x.archived_at, list(chain.from_iterable(db.session.execute(query).all()))))
if get_pending:
return TemplateEmailFile.query.filter(
TemplateEmailFile.template_id == template_id, TemplateEmailFile.archived_at.is_(None)
).all()

return TemplateEmailFile.query.filter(
TemplateEmailFile.template_id == template_id,
TemplateEmailFile.archived_at.is_(None),
TemplateEmailFile.pending == False,
).all()


Expand Down
2 changes: 2 additions & 0 deletions app/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1301,6 +1301,7 @@ class TemplateEmailFileBase(db.Model):
created_at = db.Column(db.DateTime, nullable=False, default=datetime.datetime.utcnow)
updated_at = db.Column(db.DateTime, nullable=True, onupdate=datetime.datetime.utcnow)
archived_at = db.Column(db.DateTime, nullable=True)
pending = db.Column(db.Boolean, default=False, nullable=True)

def serialize(self) -> SerializedTemplateEmailFile:
return SerializedTemplateEmailFile(
Expand All @@ -1309,6 +1310,7 @@ def serialize(self) -> SerializedTemplateEmailFile:
link_text=self.link_text,
retention_period=self.retention_period,
validate_users_email=self.validate_users_email,
pending=self.pending,
)

@declared_attr
Expand Down
1 change: 1 addition & 0 deletions app/models_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,3 +359,4 @@ class SerializedTemplateEmailFile(TypedDict):
link_text: str
retention_period: int
validate_users_email: bool
pending: bool
2 changes: 1 addition & 1 deletion migrations/.current-alembic-head
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0544_email_file_retention_fix
0545_add_pending_column
44 changes: 44 additions & 0 deletions migrations/versions/0545_add_pending_column.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"""

Create Date: 2025-02-10 17:07:41.828494
Revision ID: 0544_email_file_retention_fix
Revises: 0543_letter_rates_from_5_01_26

"""

revision = "0545_add_pending_column"
down_revision = "0544_email_file_retention_fix"


from alembic import op
from sqlalchemy import text


def upgrade():
conn = op.get_bind()
conn.execute(text("ALTER TABLE template_email_files ADD COLUMN pending boolean"))
conn.execute(text("ALTER TABLE template_email_files_history ADD COLUMN pending boolean"))
conn.execute(text("""
ALTER TABLE
template_email_files
ALTER COLUMN
pending
SET DEFAULT
false
"""))
conn.execute(text("""
ALTER TABLE
template_email_files_history
ALTER COLUMN
pending
SET DEFAULT
false
"""))
conn.execute(text("UPDATE template_email_files SET pending = false"))
conn.execute(text("UPDATE template_email_files_history SET pending = false"))


def downgrade():
conn = op.get_bind()
conn.execute(text("ALTER TABLE template_email_files DROP COLUMN pending"))
conn.execute(text("ALTER TABLE template_email_files_history DROP COLUMN pending"))
2 changes: 2 additions & 0 deletions tests/app/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ def create_template_email_file(
link_text="follow this link",
retention_period=90,
validate_users_email=True,
pending=False,
):
data = {
"filename": filename,
Expand All @@ -207,6 +208,7 @@ def create_template_email_file(
"validate_users_email": validate_users_email,
"template_id": template_id,
"created_by_id": created_by_id,
"pending": pending,
}
template_email_file = TemplateEmailFile(**data)
dao_create_template_email_file(template_email_file)
Expand Down