Files

49 lines
2.2 KiB
Python

"""
Contact catalog: people/offices that get notified when an alert is reported.
A Contact has a role (PORT_AUTHORITY or OWNER). When the user clicks REPORT
on an alert, the backend resolves recipients by matching:
- port_name == aid.puerto_responsable → port authorities
- company_name == aid.empresa_responsable → owners
"""
from sqlalchemy import Column, String, DateTime, Text
from sqlalchemy.sql import func
from database import Base
class Contact(Base):
__tablename__ = "contacts"
id = Column(String, primary_key=True)
name = Column(String, nullable=False)
role = Column(String, nullable=False) # PORT_AUTHORITY | OWNER
email = Column(String, nullable=True)
phone = Column(String, nullable=True)
whatsapp = Column(String, nullable=True) # E.164 e.g. +573001234567
port_name = Column(String, nullable=True) # for PORT_AUTHORITY
company_name = Column(String, nullable=True) # for OWNER
preferred_channel = Column(String, default="EMAIL") # EMAIL | SMS | WHATSAPP
notes = Column(Text, nullable=True)
creado_en = Column(DateTime, server_default=func.now())
modificado_en = Column(DateTime, onupdate=func.now())
class AlertReport(Base):
"""Audit log: each REPORT click creates one row per channel/recipient."""
__tablename__ = "alert_reports"
id = Column(String, primary_key=True)
alert_id = Column(String, nullable=True, index=True) # client-generated UUID
alert_tipo = Column(String, nullable=True)
alert_subtipo = Column(String, nullable=True)
aid_id = Column(String, nullable=True)
aid_nombre = Column(String, nullable=True)
mmsi = Column(String, nullable=True)
contact_id = Column(String, nullable=True)
contact_name = Column(String, nullable=True)
channel = Column(String, nullable=False) # EMAIL | SMS | WHATSAPP
recipient = Column(String, nullable=False) # the actual address used
message = Column(Text, nullable=True)
reported_by = Column(String, nullable=False) # username
reported_at = Column(DateTime, server_default=func.now())