chrysopedia/alembic/versions/029_add_email_digest.py
jlightner 34a45d1c8e chore: Added SMTP config, User notification_preferences JSONB, EmailDig…
- "backend/config.py"
- "backend/models.py"
- "backend/schemas.py"
- "backend/services/email.py"
- "alembic/versions/029_add_email_digest.py"

GSD-Task: S01/T01
2026-04-04 12:11:13 +00:00

48 lines
1.4 KiB
Python

"""Add notification_preferences to users and email_digest_log table.
Revision ID: 029_add_email_digest
Revises: 028_add_shorts_template
"""
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import JSONB, UUID
from alembic import op
revision = "029_add_email_digest"
down_revision = "028_add_shorts_template"
branch_labels = None
depends_on = None
def upgrade() -> None:
# notification_preferences JSONB on users
op.add_column(
"users",
sa.Column(
"notification_preferences",
JSONB,
nullable=False,
server_default='{"email_digests": true, "digest_frequency": "daily"}',
),
)
# email_digest_log table
op.create_table(
"email_digest_log",
sa.Column("id", UUID(as_uuid=True), primary_key=True, server_default=sa.func.gen_random_uuid()),
sa.Column("user_id", UUID(as_uuid=True), sa.ForeignKey("users.id", ondelete="CASCADE"), nullable=False),
sa.Column("digest_sent_at", sa.DateTime, server_default=sa.func.now(), nullable=False),
sa.Column("content_summary", JSONB, nullable=True),
)
op.create_index(
"ix_email_digest_log_user_sent",
"email_digest_log",
["user_id", "digest_sent_at"],
)
def downgrade() -> None:
op.drop_index("ix_email_digest_log_user_sent", table_name="email_digest_log")
op.drop_table("email_digest_log")
op.drop_column("users", "notification_preferences")