Initial commit - cleaned repository

This commit is contained in:
jungwoo choi
2025-09-28 20:41:57 +09:00
commit e3c28f796a
188 changed files with 28102 additions and 0 deletions

View File

@ -0,0 +1,49 @@
"""
Queue Models for AI Writer Service
Redis 큐에서 사용할 데이터 모델 정의
"""
from pydantic import BaseModel, Field
from typing import Optional, List, Dict, Any
from datetime import datetime
from enum import Enum
class JobStatus(str, Enum):
"""작업 상태"""
PENDING = "pending"
PROCESSING = "processing"
COMPLETED = "completed"
FAILED = "failed"
SKIPPED = "skipped"
class NewsJobData(BaseModel):
"""큐에 들어갈 뉴스 작업 데이터"""
job_id: str = Field(..., description="작업 고유 ID")
keyword: str = Field(..., description="원본 검색 키워드")
rss_title: str = Field(..., description="RSS 제목")
rss_link: Optional[str] = Field(None, description="RSS 링크")
rss_published: Optional[str] = Field(None, description="RSS 발행일")
google_results: List[Dict[str, Any]] = Field(default_factory=list, description="구글 검색 결과")
style: str = Field("professional", description="기사 스타일")
created_at: datetime = Field(default_factory=datetime.now, description="작업 생성 시간")
priority: int = Field(0, description="우선순위 (높을수록 우선)")
retry_count: int = Field(0, description="재시도 횟수")
max_retries: int = Field(3, description="최대 재시도 횟수")
class JobResult(BaseModel):
"""작업 결과"""
job_id: str = Field(..., description="작업 고유 ID")
status: JobStatus = Field(..., description="작업 상태")
article_id: Optional[str] = Field(None, description="생성된 기사 ID")
error_message: Optional[str] = Field(None, description="에러 메시지")
processing_time: Optional[float] = Field(None, description="처리 시간(초)")
completed_at: Optional[datetime] = Field(None, description="완료 시간")
class QueueStats(BaseModel):
"""큐 통계"""
pending_jobs: int = Field(..., description="대기 중인 작업 수")
processing_jobs: int = Field(..., description="처리 중인 작업 수")
completed_jobs: int = Field(..., description="완료된 작업 수")
failed_jobs: int = Field(..., description="실패한 작업 수")
total_jobs: int = Field(..., description="전체 작업 수")
workers_active: int = Field(..., description="활성 워커 수")
average_processing_time: Optional[float] = Field(None, description="평균 처리 시간(초)")