Add notification service

This commit is contained in:
Urtzi Alfaro
2025-07-21 22:44:11 +02:00
parent d029630c8e
commit d9affc950a
11 changed files with 3680 additions and 57 deletions

View File

@@ -0,0 +1,82 @@
# ================================================================
# services/notification/app/models/templates.py
# ================================================================
"""
Template-specific models for email and WhatsApp templates
"""
from sqlalchemy import Column, String, Text, Boolean, DateTime, JSON, Integer
from sqlalchemy.dialects.postgresql import UUID
from datetime import datetime
import uuid
from shared.database.base import Base
class EmailTemplate(Base):
"""Email-specific templates with HTML support"""
__tablename__ = "email_templates"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
tenant_id = Column(UUID(as_uuid=True), nullable=True, index=True)
# Template identification
template_key = Column(String(100), nullable=False, unique=True)
name = Column(String(255), nullable=False)
description = Column(Text, nullable=True)
# Email-specific content
subject = Column(String(255), nullable=False)
html_body = Column(Text, nullable=False)
text_body = Column(Text, nullable=True) # Plain text fallback
# Email settings
from_email = Column(String(255), nullable=True)
from_name = Column(String(255), nullable=True)
reply_to = Column(String(255), nullable=True)
# Template variables
variables = Column(JSON, nullable=True) # Expected variables and their types
sample_data = Column(JSON, nullable=True) # Sample data for preview
# Configuration
language = Column(String(2), default="es")
is_active = Column(Boolean, default=True)
is_system = Column(Boolean, default=False)
# Timestamps
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
class WhatsAppTemplate(Base):
"""WhatsApp-specific templates"""
__tablename__ = "whatsapp_templates"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
tenant_id = Column(UUID(as_uuid=True), nullable=True, index=True)
# Template identification
template_key = Column(String(100), nullable=False, unique=True)
name = Column(String(255), nullable=False)
# WhatsApp template details
whatsapp_template_name = Column(String(255), nullable=False) # Template name in WhatsApp Business API
whatsapp_template_id = Column(String(255), nullable=True)
language_code = Column(String(10), default="es")
# Template content
header_text = Column(String(60), nullable=True) # WhatsApp header limit
body_text = Column(Text, nullable=False)
footer_text = Column(String(60), nullable=True) # WhatsApp footer limit
# Template parameters
parameter_count = Column(Integer, default=0)
parameters = Column(JSON, nullable=True) # Parameter definitions
# Status
approval_status = Column(String(20), default="pending") # pending, approved, rejected
is_active = Column(Boolean, default=True)
# Timestamps
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)