from app import db from datetime import datetime import uuid class GoogleAd(db.Model): """Model for storing Google Ads data.""" id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4())) ad_type = db.Column(db.String(20), nullable=False) # 'search' or 'display' title = db.Column(db.String(255), nullable=True) description = db.Column(db.Text, nullable=True) display_url = db.Column(db.String(255), nullable=True) target_url = db.Column(db.String(512), nullable=True) image_url = db.Column(db.String(512), nullable=True) position = db.Column(db.Integer, nullable=True) search_query = db.Column(db.String(255), nullable=True) page_url = db.Column(db.String(512), nullable=True) raw_data = db.Column(db.JSON, nullable=True) sentiment = db.Column(db.JSON, nullable=True) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True) def __repr__(self): return f'' @classmethod def from_search_ad_data(cls, ad_data, search_query, user_id=None): """Create a GoogleAd instance from scraped search ad data.""" return cls( ad_type='search', title=ad_data.get('title'), description=ad_data.get('description'), display_url=ad_data.get('display_url'), target_url=ad_data.get('target_url'), position=ad_data.get('position'), search_query=search_query, raw_data=ad_data, user_id=user_id ) @classmethod def from_display_ad_data(cls, ad_data, user_id=None): """Create a GoogleAd instance from scraped display ad data.""" return cls( ad_type='display', image_url=ad_data.get('image_url'), target_url=ad_data.get('target_url'), page_url=ad_data.get('page_url'), raw_data=ad_data, user_id=user_id )