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.poster_service import PosterService
from services.sns_content_service import SnsContentService from services.sns_content_service import SnsContentService
from models.request_models import ContentRequest, PosterRequest, SnsContentGetRequest, PosterContentGetRequest 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(): def create_app():
@ -30,7 +30,7 @@ def create_app():
# 서비스 인스턴스 생성 # 서비스 인스턴스 생성
poster_service = PosterService() poster_service = PosterService()
poster_service_v2 = PosterServiceV2() poster_service_v3 = PosterServiceV3()
sns_content_service = SnsContentService() sns_content_service = SnsContentService()
@app.route('/health', methods=['GET']) @app.route('/health', methods=['GET'])
@ -97,8 +97,8 @@ def create_app():
@app.route('/api/ai/poster', methods=['GET']) @app.route('/api/ai/poster', methods=['GET'])
def generate_poster_content(): def generate_poster_content():
""" """
홍보 포스터 생성 API (개선된 버전) 홍보 포스터 생성 API
원본 이미지 보존 + 한글 텍스트 오버레이 실제 제품 이미지를 포함한 분위기 배경 포스터 생성
""" """
try: try:
# JSON 요청 데이터 검증 # JSON 요청 데이터 검증
@ -115,6 +115,23 @@ def create_app():
if field not in data: if field not in data:
return jsonify({'error': f'필수 필드가 누락되었습니다: {field}'}), 400 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( poster_request = PosterContentGetRequest(
title=data.get('title'), title=data.get('title'),
@ -127,16 +144,18 @@ def create_app():
emotionIntensity=data.get('emotionIntensity'), emotionIntensity=data.get('emotionIntensity'),
menuName=data.get('menuName'), menuName=data.get('menuName'),
eventName=data.get('eventName'), eventName=data.get('eventName'),
startDate=data.get('startDate'), startDate=start_date,
endDate=data.get('endDate') endDate=end_date
) )
# 포스터 생성 # 포스터 생성 (V3 사용)
# result = poster_service.generate_poster(poster_request) result = poster_service_v3.generate_poster(poster_request)
result = poster_service_v2.generate_poster(poster_request)
if result['success']: if result['success']:
return jsonify({'content': result['content']}) return jsonify({
'content': result['content'],
'analysis': result.get('analysis', {})
})
else: else:
return jsonify({'error': result['error']}), 500 return jsonify({'error': result['error']}), 500

View File

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

View File

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