forge/backend/app/models/job.py
DJP 7a804e896d Initial commit - FORGE AI unified platform
Features:
- Image generation (OpenAI, Gemini, Leonardo, Bria, Stability, Flux)
- Nano Banana iterative editing
- Video generation and upscaling
- Audio TTS, STT, sound effects (ElevenLabs)
- Text prompt studio and alt text
- User authentication with JWT/cookies
- Admin panel with voice management
- Job queue with Celery
- PostgreSQL + Redis backend
- Next.js 15 + FastAPI architecture

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
2025-12-09 20:39:00 -05:00

51 lines
1.8 KiB
Python

"""Job Model"""
from sqlalchemy import Column, String, Boolean, DateTime, ForeignKey, Text, Integer
from sqlalchemy.dialects.postgresql import UUID, JSONB, ARRAY
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
import uuid
from app.database import Base
class Job(Base):
__tablename__ = "jobs"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id = Column(UUID(as_uuid=True), ForeignKey("users.id", ondelete="SET NULL"))
project_id = Column(UUID(as_uuid=True), ForeignKey("projects.id", ondelete="SET NULL"))
# Job details
module = Column(String(100), nullable=False)
action = Column(String(100), nullable=False)
priority = Column(Integer, default=5)
# Input/Output
input_data = Column(JSONB, nullable=False)
output_data = Column(JSONB)
input_asset_ids = Column(ARRAY(UUID(as_uuid=True)))
output_asset_ids = Column(ARRAY(UUID(as_uuid=True)))
# Status tracking
status = Column(String(50), default="pending")
progress = Column(Integer, default=0)
error_message = Column(Text)
retry_count = Column(Integer, default=0)
max_retries = Column(Integer, default=3)
# Timing
queued_at = Column(DateTime(timezone=True))
started_at = Column(DateTime(timezone=True))
completed_at = Column(DateTime(timezone=True))
estimated_duration_seconds = Column(Integer)
# API tracking
api_provider = Column(String(100))
api_model = Column(String(100))
api_request_id = Column(String(255))
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
# Relationships
user = relationship("User", back_populates="jobs")
project = relationship("Project", back_populates="jobs")