mirror of
https://github.com/won-ktds/smarketing-backend.git
synced 2025-12-06 07:06:24 +00:00
refactor: 홍보 포스터 생성 서비스 버전 추가
This commit is contained in:
parent
96add68b74
commit
b5a9cae32a
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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,8 +22,9 @@ 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):
|
||||||
"""업로드 파일 확장자 검증"""
|
"""업로드 파일 확장자 검증"""
|
||||||
return '.' in filename and \
|
return '.' in filename and \
|
||||||
filename.rsplit('.', 1)[1].lower() in Config.ALLOWED_EXTENSIONS
|
filename.rsplit('.', 1)[1].lower() in Config.ALLOWED_EXTENSIONS
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|
||||||
# 기존 모델들은 유지
|
# 기존 모델들은 유지
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user