refactor: 홍보 포스터 생성 서비스 버전 추가

This commit is contained in:
OhSeongRak 2025-06-13 16:57:35 +09:00
parent 96add68b74
commit b5a9cae32a
3 changed files with 39 additions and 15 deletions

View File

@ -12,7 +12,7 @@ from config.config import Config
from services.poster_service import PosterService
from services.sns_content_service import SnsContentService
from models.request_models import ContentRequest, PosterRequest, SnsContentGetRequest, PosterContentGetRequest
from services.poster_service_v2 import PosterServiceV2
from services.poster_service_v3 import PosterServiceV3
def create_app():
@ -30,7 +30,7 @@ def create_app():
# 서비스 인스턴스 생성
poster_service = PosterService()
poster_service_v2 = PosterServiceV2()
poster_service_v3 = PosterServiceV3()
sns_content_service = SnsContentService()
@app.route('/health', methods=['GET'])
@ -97,8 +97,8 @@ def create_app():
@app.route('/api/ai/poster', methods=['GET'])
def generate_poster_content():
"""
홍보 포스터 생성 API (개선된 버전)
원본 이미지 보존 + 한글 텍스트 오버레이
홍보 포스터 생성 API
실제 제품 이미지를 포함한 분위기 배경 포스터 생성
"""
try:
# JSON 요청 데이터 검증
@ -115,6 +115,23 @@ def create_app():
if field not in data:
return jsonify({'error': f'필수 필드가 누락되었습니다: {field}'}), 400
# 날짜 변환 처리
start_date = None
end_date = None
if data.get('startDate'):
try:
from datetime import datetime
start_date = datetime.strptime(data['startDate'], '%Y-%m-%d').date()
except ValueError:
return jsonify({'error': 'startDate 형식이 올바르지 않습니다. YYYY-MM-DD 형식을 사용하세요.'}), 400
if data.get('endDate'):
try:
from datetime import datetime
end_date = datetime.strptime(data['endDate'], '%Y-%m-%d').date()
except ValueError:
return jsonify({'error': 'endDate 형식이 올바르지 않습니다. YYYY-MM-DD 형식을 사용하세요.'}), 400
# 요청 모델 생성
poster_request = PosterContentGetRequest(
title=data.get('title'),
@ -127,16 +144,18 @@ def create_app():
emotionIntensity=data.get('emotionIntensity'),
menuName=data.get('menuName'),
eventName=data.get('eventName'),
startDate=data.get('startDate'),
endDate=data.get('endDate')
startDate=start_date,
endDate=end_date
)
# 포스터 생성
# result = poster_service.generate_poster(poster_request)
result = poster_service_v2.generate_poster(poster_request)
# 포스터 생성 (V3 사용)
result = poster_service_v3.generate_poster(poster_request)
if result['success']:
return jsonify({'content': result['content']})
return jsonify({
'content': result['content'],
'analysis': result.get('analysis', {})
})
else:
return jsonify({'error': result['error']}), 500

View File

@ -4,7 +4,10 @@ Flask 애플리케이션 설정
"""
import os
from dotenv import load_dotenv
load_dotenv()
class Config:
"""애플리케이션 설정 클래스"""
# Flask 기본 설정
@ -19,6 +22,7 @@ class Config:
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webp'}
# 템플릿 설정
POSTER_TEMPLATE_PATH = 'templates/poster_templates'
@staticmethod
def allowed_file(filename):
"""업로드 파일 확장자 검증"""

View File

@ -4,6 +4,7 @@ API 요청 데이터 구조를 정의
"""
from dataclasses import dataclass
from typing import List, Optional
from datetime import date
@dataclass
@ -19,8 +20,8 @@ class SnsContentGetRequest:
emotionIntensity: Optional[str] = None
menuName: Optional[str] = None
eventName: Optional[str] = None
startDate: Optional[str] = None
endDate: Optional[str] = None
startDate: Optional[date] = None # LocalDate -> date
endDate: Optional[date] = None # LocalDate -> date
@dataclass
@ -36,8 +37,8 @@ class PosterContentGetRequest:
emotionIntensity: Optional[str] = None
menuName: Optional[str] = None
eventName: Optional[str] = None
startDate: Optional[str] = None
endDate: Optional[str] = None
startDate: Optional[date] = None # LocalDate -> date
endDate: Optional[date] = None # LocalDate -> date
# 기존 모델들은 유지