Files

53 lines
2.0 KiB
Python

"""
Organization models: Port, Company, BuoyOwnership
Used for multi-client access control and per-port default views.
"""
from sqlalchemy import Column, String, Float, Boolean, DateTime, Text
from sqlalchemy.sql import func
from database import Base
class Port(Base):
"""Geographic port / region served by this deployment."""
__tablename__ = "ports"
id = Column(String, primary_key=True)
name = Column(String, nullable=False)
country = Column(String, default="Colombia")
center_lat = Column(Float, nullable=True)
center_lon = Column(Float, nullable=True)
default_zoom = Column(Float, default=12.0)
chart_name = Column(String, nullable=True) # folder under charts/, e.g. "BAHÍA_DE_CARTAGENA"
activo = Column(Boolean, default=True)
creado_en = Column(DateTime, server_default=func.now())
class Company(Base):
"""Buoy-owner company (client). Belongs to a home port."""
__tablename__ = "companies"
id = Column(String, primary_key=True)
name = Column(String, nullable=False)
port_id = Column(String, nullable=True) # FK → ports.id
contact_email = Column(String, nullable=True)
contact_phone = Column(String, nullable=True)
activa = Column(Boolean, default=True)
notas = Column(Text, nullable=True)
creado_en = Column(DateTime, server_default=func.now())
class BuoyOwnership(Base):
"""
Which company owns (and monitors) a given Aid/MMSI.
A company user can see AIS/ATON real-time data only for buoys
listed in this table under their company_id.
"""
__tablename__ = "buoy_ownership"
id = Column(String, primary_key=True)
company_id = Column(String, nullable=False) # FK → companies.id
aid_id = Column(String, nullable=True) # FK → aids.id (nullable if aid not yet in DB)
mmsi = Column(String, nullable=True) # direct MMSI reference
notas = Column(Text, nullable=True)
creado_en = Column(DateTime, server_default=func.now())