Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Template_Categories table #2193

Open
wants to merge 28 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
4bab291
Draft migration to add TemplateCategories table
whabanks Jun 11, 2024
da56d60
Fix prop logic for template_process_type
whabanks Jun 11, 2024
e7346fd
Add indexes, unique constraints
whabanks Jun 12, 2024
70334b0
Add CRUD methods for TemplateCategories
whabanks Jun 13, 2024
0430b4b
Insert low, med, high default categories during migration
whabanks Jun 13, 2024
28637f2
Fix prop logic for template_process_type again
whabanks Jun 13, 2024
b76744e
WIP: Add API endpoints for interacting with TemplateCategories
whabanks Jun 13, 2024
e34dc4a
Implement dao and api to update process_type
whabanks Jun 17, 2024
6a291fc
Address PR comments
whabanks Jun 17, 2024
fcb3550
Finish adding needed api endpoints
whabanks Jun 17, 2024
d8799ac
Chore: logic cleanup
whabanks Jun 17, 2024
6da3eaa
First batch of unit tests & bug fixes
whabanks Jun 18, 2024
a0fd757
Implement filtering when fetching all categories
whabanks Jun 19, 2024
e172bb7
Add lazy join on TemplateCategory
whabanks Jun 19, 2024
8a374c2
Clean up dao tests
whabanks Jun 19, 2024
46d0130
Add tests for deleting a template category
whabanks Jun 19, 2024
98c93bf
Add API tests, squash bugs
whabanks Jun 20, 2024
c7cab45
Fix pre-existing tests
whabanks Jun 24, 2024
6055586
Misc. fixes
whabanks Jun 24, 2024
231128f
We definitely didn't want that FK on templatehistory...
whabanks Jun 24, 2024
654d6b3
Merge branch 'main' into feat/add-template-categories-table
whabanks Jun 24, 2024
33006d7
Logic cleanups
whabanks Jun 24, 2024
8e0afa2
Rename migration
whabanks Jun 25, 2024
f927c99
Add tests for models
whabanks Jun 25, 2024
041a647
Add tests that were missed for template rest and dao
whabanks Jun 25, 2024
0be6d19
Rename /template/category to /template-category
whabanks Jun 25, 2024
44ad1f1
various fixes
whabanks Jun 25, 2024
d1c5c4e
Merge branch 'main' into feat/add-template-categories-table
jzbahrai Jun 27, 2024
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
27 changes: 27 additions & 0 deletions app/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
convert_local_timezone_to_utc,
convert_utc_to_local_timezone,
)
from pkg_resources import declare_namespace
Fixed Show fixed Hide fixed
from sqlalchemy import CheckConstraint, Index, UniqueConstraint
from sqlalchemy.dialects.postgresql import JSON, JSONB, UUID
from sqlalchemy.ext.associationproxy import association_proxy
Expand Down Expand Up @@ -1032,6 +1033,18 @@

PRECOMPILED_TEMPLATE_NAME = "Pre-compiled PDF"

class TemplateCategories(BaseModel):
__tablename__ = "template_categories"

id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
name_en = db.Column(db.String(255), unique=True, nullable=False)
name_fr = db.Column(db.String(255), unique=True, nullable=False)
description_en = db.Column(db.String(200), nullable=True)
description_fr = db.Column(db.String(200), nullable=True)
sms_process_type = db.Column(db.String(200), nullable=False)
email_process_type = db.Column(db.String(200), nullable=False)
hidden = db.Column(db.Boolean, nullable=False, default=False)


class TemplateBase(BaseModel):
__abstract__ = True
Expand Down Expand Up @@ -1078,6 +1091,10 @@
def created_by_id(cls):
return db.Column(UUID(as_uuid=True), db.ForeignKey("users.id"), index=True, nullable=False)

@declared_attr
def template_category_id(cls):
return db.Column(UUID(as_uuid=True), db.ForeignKey("template_categories.id"), index=True, nullable=True)

@declared_attr
def created_by(cls):
return db.relationship("User")
Expand Down Expand Up @@ -1179,6 +1196,8 @@

service = db.relationship("Service", backref="templates")
version = db.Column(db.Integer, default=0, nullable=False)
template_categories = db.relationship("TemplateCategories", backref="templates")


folder = db.relationship(
"TemplateFolder",
Expand All @@ -1198,6 +1217,14 @@
_external=True,
)

@property
def template_process_type(self):
if self.template_type == SMS_TYPE and self.template_categories.sms_process_type:
whabanks marked this conversation as resolved.
Show resolved Hide resolved
return self.template_categories.sms_process_type
elif self.template_type == EMAIL_TYPE and self.template_categories.email_process_type:
return self.template_categories.email_process_type
return self.process_type

@classmethod
def from_json(cls, data, folder=None):
"""
Expand Down
76 changes: 76 additions & 0 deletions migrations/versions/0454_add_template_category.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
"""

Revision ID: 0454_add_template_categories
Revises: 0453_add_callback_failure_email
Create Date: 2024-06-11 13:32:00
"""

from datetime import datetime

import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql

revision = "0454_add_template_categories"
down_revision = "0452_set_pgaudit_config"


def upgrade():
op.create_table(
"template_categories",
sa.Column("id", postgresql.UUID(as_uuid=True), primary_key=True, nullable=False),
sa.Column("name_en", sa.String(length=255), nullable=False),
sa.Column("name_fr", sa.String(length=255), nullable=False),
sa.Column("description_en", sa.String(length=255), nullable=True),
sa.Column("description_fr", sa.String(length=255), nullable=True),
sa.Column("sms_process_type", sa.String(length=255), nullable=False),
sa.Column("email_process_type", sa.String(length=255), nullable=False),
sa.Column("hidden", sa.Boolean(), nullable=False),
sa.UniqueConstraint("name_en"),
sa.UniqueConstraint("name_fr")
)

op.add_column(
"templates",
sa.Column("template_category_id", postgresql.UUID(as_uuid=True), nullable=True)
)
op.create_index(
op.f("ix_template_category_id"),
"templates",
["template_category_id"],
unique=False,
)
op.create_index(
op.f("ix_template_categories_name_en"),
"template_categories",
["name_en"],
unique=False,
)
op.create_index(
op.f("ix_template_categories_name_fr"),
"template_categories",
["name_fr"],
unique=False,
)
op.create_foreign_key(
"fk_template_template_categories",
"templates",
"template_categories",
["template_category_id"],
["id"]
)

# Insert the generic Low priority (bulk) category
whabanks marked this conversation as resolved.
Show resolved Hide resolved
# op.execute("""
# INSERT INTO template_category (id, name_en, name_fr, sms_process_type, email_process_type, hidden)
# VALUES ('00000000-0000-0000-0000-000000000000', 'Low Category (Bulk)', 'Catégorie Basse (En Vrac)', true
# """
# )

def downgrade():
op.drop_constraint("fk_template_template_categories", "templates", type_="foreignkey")
op.drop_index(op.f("ix_template_category_id"), table_name="templates")
op.drop_index(op.f("ix_template_categories_name_en"), table_name="template_categories")
op.drop_index(op.f("ix_template_categories_name_fr"), table_name="template_categories")
op.drop_column("templates", "template_category_id")
op.drop_table("template_categories")
Loading