| from sqlalchemy import Column, Integer, String, DateTime, Boolean, JSON, Text, ForeignKey |
| from sqlalchemy.orm import relationship |
| from datetime import datetime |
| from app.database import Base |
|
|
| class User(Base): |
| __tablename__ = "users" |
| |
| id = Column(Integer, primary_key=True, index=True) |
| email = Column(String, unique=True, index=True) |
| name = Column(String) |
| created_at = Column(DateTime, default=datetime.utcnow) |
| |
| integrations = relationship("Integration", back_populates="user") |
| assets = relationship("Asset", back_populates="user") |
| posts = relationship("Post", back_populates="user") |
|
|
| class Integration(Base): |
| __tablename__ = "integrations" |
| |
| id = Column(Integer, primary_key=True, index=True) |
| user_id = Column(Integer, ForeignKey("users.id")) |
| provider = Column(String) |
| access_token = Column(Text) |
| refresh_token = Column(Text) |
| expires_at = Column(DateTime) |
| account_info = Column(JSON) |
| connected = Column(Boolean, default=False) |
| created_at = Column(DateTime, default=datetime.utcnow) |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) |
| |
| user = relationship("User", back_populates="integrations") |
|
|
| class Asset(Base): |
| __tablename__ = "assets" |
| |
| id = Column(Integer, primary_key=True, index=True) |
| user_id = Column(Integer, ForeignKey("users.id")) |
| name = Column(String) |
| file_path = Column(String) |
| file_type = Column(String) |
| product_category = Column(String) |
| sub_category = Column(String, nullable=True) |
| size = Column(Integer) |
| extra_metadata = Column(JSON, nullable=True) |
| extracted_content = Column(JSON, nullable=True) |
| analysis_status = Column(String, default="pending") |
| analyzed_at = Column(DateTime, nullable=True) |
| created_at = Column(DateTime, default=datetime.utcnow) |
| |
| user = relationship("User", back_populates="assets") |
|
|
| class Post(Base): |
| __tablename__ = "posts" |
| |
| id = Column(Integer, primary_key=True, index=True) |
| user_id = Column(Integer, ForeignKey("users.id")) |
| title = Column(String) |
| content = Column(Text) |
| post_type = Column(String) |
| product_category = Column(String) |
| scheduled_date = Column(DateTime) |
| status = Column(String) |
| linkedin_post_id = Column(String, nullable=True) |
| canva_design_id = Column(String, nullable=True) |
| assets = Column(JSON) |
| extra_metadata = Column(JSON, nullable=True) |
| created_at = Column(DateTime, default=datetime.utcnow) |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) |
| |
| user = relationship("User", back_populates="posts") |
|
|
| class Campaign(Base): |
| __tablename__ = "campaigns" |
| |
| id = Column(Integer, primary_key=True, index=True) |
| user_id = Column(Integer, ForeignKey("users.id")) |
| name = Column(String) |
| date_range_start = Column(DateTime) |
| date_range_end = Column(DateTime) |
| products = Column(JSON) |
| post_types = Column(JSON) |
| posts_per_week = Column(Integer) |
| status = Column(String) |
| created_at = Column(DateTime, default=datetime.utcnow) |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) |
|
|
|
|