feat(prospecting): add complete prospecting module for lead discovery and scoring
Some checks failed
Some checks failed
Migrates scanning pipeline from marketing-.lu-domains app into Orion module. Supports digital (domain scan) and offline (manual capture) lead channels with enrichment, scoring, campaign management, and interaction tracking. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
51
app/modules/prospecting/models/tech_profile.py
Normal file
51
app/modules/prospecting/models/tech_profile.py
Normal file
@@ -0,0 +1,51 @@
|
||||
# app/modules/prospecting/models/tech_profile.py
|
||||
"""
|
||||
Technology profile for a prospect's website.
|
||||
|
||||
Stores CMS, server, framework, analytics, and other
|
||||
technology detection results from website scanning.
|
||||
"""
|
||||
|
||||
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String, Text
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from app.core.database import Base
|
||||
from models.database.base import TimestampMixin
|
||||
|
||||
|
||||
class ProspectTechProfile(Base, TimestampMixin):
|
||||
"""Technology profile detected from a prospect's website."""
|
||||
|
||||
__tablename__ = "prospect_tech_profiles"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
prospect_id = Column(Integer, ForeignKey("prospects.id", ondelete="CASCADE"), nullable=False, unique=True)
|
||||
|
||||
# CMS Detection
|
||||
cms = Column(String(100), nullable=True)
|
||||
cms_version = Column(String(50), nullable=True)
|
||||
|
||||
# Server
|
||||
server = Column(String(100), nullable=True)
|
||||
server_version = Column(String(50), nullable=True)
|
||||
hosting_provider = Column(String(100), nullable=True)
|
||||
cdn = Column(String(100), nullable=True)
|
||||
|
||||
# SSL
|
||||
has_valid_cert = Column(Boolean, nullable=True)
|
||||
cert_issuer = Column(String(200), nullable=True)
|
||||
cert_expires_at = Column(DateTime, nullable=True)
|
||||
|
||||
# Frontend
|
||||
js_framework = Column(String(100), nullable=True)
|
||||
analytics = Column(String(200), nullable=True)
|
||||
tag_manager = Column(String(100), nullable=True)
|
||||
ecommerce_platform = Column(String(100), nullable=True)
|
||||
|
||||
# Raw data
|
||||
tech_stack_json = Column(Text, nullable=True) # JSON string
|
||||
scan_source = Column(String(50), nullable=True)
|
||||
scan_error = Column(Text, nullable=True)
|
||||
|
||||
# Relationships
|
||||
prospect = relationship("Prospect", back_populates="tech_profile")
|
||||
Reference in New Issue
Block a user