# ================================================================ # services/data/app/models/weather.py # ================================================================ """Weather data models""" from sqlalchemy import Column, String, DateTime, Float, Integer, Text, Index from sqlalchemy.dialects.postgresql import UUID import uuid from datetime import datetime from app.core.database import Base class WeatherData(Base): __tablename__ = "weather_data" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) location_id = Column(String(100), nullable=False, index=True) date = Column(DateTime(timezone=True), nullable=False, index=True) temperature = Column(Float, nullable=True) # Celsius precipitation = Column(Float, nullable=True) # mm humidity = Column(Float, nullable=True) # percentage wind_speed = Column(Float, nullable=True) # km/h pressure = Column(Float, nullable=True) # hPa description = Column(String(200), nullable=True) source = Column(String(50), nullable=False, default="aemet") raw_data = Column(Text, nullable=True) created_at = Column(DateTime(timezone=True), default=datetime.utcnow) __table_args__ = ( Index('idx_weather_location_date', 'location_id', 'date'), ) class WeatherForecast(Base): __tablename__ = "weather_forecasts" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) location_id = Column(String(100), nullable=False, index=True) forecast_date = Column(DateTime(timezone=True), nullable=False) generated_at = Column(DateTime(timezone=True), nullable=False, default=datetime.utcnow) temperature = Column(Float, nullable=True) precipitation = Column(Float, nullable=True) humidity = Column(Float, nullable=True) wind_speed = Column(Float, nullable=True) description = Column(String(200), nullable=True) source = Column(String(50), nullable=False, default="aemet") raw_data = Column(Text, nullable=True) __table_args__ = ( Index('idx_forecast_location_date', 'location_id', 'forecast_date'), )