create DB
This commit is contained in:
parent
991073ce1b
commit
817d3b9c39
38
database.py
38
database.py
@ -1,8 +1,10 @@
|
||||
from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime
|
||||
from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime, Boolean, Text, ForeignKey
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.orm import sessionmaker, relationship
|
||||
from sqlalchemy.sql import func
|
||||
from sqlalchemy.dialects.postgresql import UUID, JSONB
|
||||
import os
|
||||
import uuid
|
||||
|
||||
# Database URL from environment variable
|
||||
DATABASE_URL = os.getenv("DATABASE_URL")
|
||||
@ -24,7 +26,7 @@ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||
# Create Base class
|
||||
Base = declarative_base()
|
||||
|
||||
# Database model
|
||||
# Basic Item model (for backward compatibility)
|
||||
class Item(Base):
|
||||
__tablename__ = "items"
|
||||
|
||||
@ -35,6 +37,36 @@ class Item(Base):
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
# Instagram Account Model
|
||||
class InstagramAccount(Base):
|
||||
__tablename__ = "instagram_accounts"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
seller_id = Column(UUID(as_uuid=True), nullable=False)
|
||||
username = Column(String(100), nullable=False, unique=True)
|
||||
is_active = Column(Boolean, default=True)
|
||||
last_synced = Column(DateTime(timezone=True), nullable=True)
|
||||
|
||||
# Relationship
|
||||
posts = relationship("InstagramPost", back_populates="account", cascade="all, delete-orphan")
|
||||
|
||||
# Instagram Post Model
|
||||
class InstagramPost(Base):
|
||||
__tablename__ = "instagram_posts"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
account_id = Column(UUID(as_uuid=True), ForeignKey("instagram_accounts.id"), nullable=False)
|
||||
ig_post_id = Column(String(100), nullable=False, unique=True)
|
||||
media_type = Column(String(10), nullable=False) # 'image', 'video', 'carousel'
|
||||
caption = Column(Text, nullable=True)
|
||||
thumbnail_url = Column(Text, nullable=True)
|
||||
local_media = Column(JSONB, nullable=True) # List of media items with type and local path
|
||||
created_at = Column(DateTime(timezone=True), nullable=False) # Original post time on Instagram
|
||||
fetched_at = Column(DateTime(timezone=True), server_default=func.now()) # Time when scraped
|
||||
|
||||
# Relationship
|
||||
account = relationship("InstagramAccount", back_populates="posts")
|
||||
|
||||
# Dependency to get database session
|
||||
def get_db():
|
||||
db = SessionLocal()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user