from flask_sqlalchemy import SQLAlchemy from datetime import datetime db = SQLAlchemy() class Property(db.Model): __tablename__ = 'properties' id = db.Column(db.Integer, primary_key=True) source = db.Column(db.String(50)) address = db.Column(db.String(200)) city = db.Column(db.String(100)) county = db.Column(db.String(100)) state = db.Column(db.String(10), default='FL') zipcode = db.Column(db.String(10)) price = db.Column(db.Float) beds = db.Column(db.Integer) baths = db.Column(db.Float) sqft = db.Column(db.Integer) property_type = db.Column(db.String(50)) status = db.Column(db.String(50)) url = db.Column(db.Text) image_url = db.Column(db.Text) score = db.Column(db.Integer, default=0) ai_analysis = db.Column(db.Text) is_favorite = db.Column(db.Boolean, default=False) notes = db.Column(db.Text) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) class Lender(db.Model): __tablename__ = 'lenders' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100)) loan_type = db.Column(db.String(100)) specialties = db.Column(db.Text) min_down_pct = db.Column(db.Float) accepts_new_resident = db.Column(db.Boolean, default=True) accepts_self_employed = db.Column(db.Boolean, default=True) requires_2yr_history = db.Column(db.Boolean, default=False) phone = db.Column(db.String(30)) email = db.Column(db.String(100)) website = db.Column(db.String(200)) contact_script = db.Column(db.Text) match_score = db.Column(db.Integer, default=0) notes = db.Column(db.Text) class SearchCity(db.Model): __tablename__ = 'search_cities' id = db.Column(db.Integer, primary_key=True) city = db.Column(db.String(100), unique=True) search_type = db.Column(db.String(20), default='city') # city, county, zip active = db.Column(db.Boolean, default=True) added_at = db.Column(db.DateTime, default=datetime.utcnow) class SearchConfig(db.Model): __tablename__ = 'search_config' id = db.Column(db.Integer, primary_key=True) key = db.Column(db.String(50), unique=True) value = db.Column(db.String(200)) class ScrapeLog(db.Model): __tablename__ = 'scrape_logs' id = db.Column(db.Integer, primary_key=True) ran_at = db.Column(db.DateTime, default=datetime.utcnow) source = db.Column(db.String(50)) found = db.Column(db.Integer, default=0) new = db.Column(db.Integer, default=0) status = db.Column(db.String(20)) message = db.Column(db.Text)