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.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
|
||||
|
||||
|
||||
@ -4,7 +4,10 @@ Flask 애플리케이션 설정
|
||||
"""
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
|
||||
class Config:
|
||||
"""애플리케이션 설정 클래스"""
|
||||
# Flask 기본 설정
|
||||
@ -19,8 +22,9 @@ class Config:
|
||||
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webp'}
|
||||
# 템플릿 설정
|
||||
POSTER_TEMPLATE_PATH = 'templates/poster_templates'
|
||||
|
||||
@staticmethod
|
||||
def allowed_file(filename):
|
||||
"""업로드 파일 확장자 검증"""
|
||||
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 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
|
||||
|
||||
|
||||
# 기존 모델들은 유지
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user