From ada5dfeeb4121dbc62895a2166bd5da5124324fc Mon Sep 17 00:00:00 2001 From: jaehwang Date: Thu, 12 Feb 2026 05:10:08 +0000 Subject: [PATCH] =?UTF-8?q?=EA=B0=80=EC=82=AC=20marketing=20Intel=20?= =?UTF-8?q?=EC=82=BD=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/home/api/routers/v1/home.py | 2 ++ app/home/schemas/home_schema.py | 4 +++- app/lyric/api/routers/v1/lyric.py | 10 ++++++++-- app/lyric/schemas/lyric.py | 5 ++++- app/utils/prompts/templates/lyric_prompt.txt | 1 + 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/home/api/routers/v1/home.py b/app/home/api/routers/v1/home.py index c648332..c39f599 100644 --- a/app/home/api/routers/v1/home.py +++ b/app/home/api/routers/v1/home.py @@ -294,6 +294,7 @@ async def _crawling_logic( session.add(marketing_intelligence) await session.commit() await session.refresh(marketing_intelligence) + m_id = marketing_intelligence.id logger.debug(f"[MarketingPrompt] INSERT placeid {marketing_intelligence.place_id}") step3_3_elapsed = (time.perf_counter() - step3_3_start) * 1000 logger.info( @@ -374,6 +375,7 @@ async def _crawling_logic( "image_count": len(scraper.image_link_list) if scraper.image_link_list else 0, "processed_info": processed_info, "marketing_analysis": marketing_analysis, + "m_id" : m_id } diff --git a/app/home/schemas/home_schema.py b/app/home/schemas/home_schema.py index b254f1e..45b0126 100644 --- a/app/home/schemas/home_schema.py +++ b/app/home/schemas/home_schema.py @@ -329,7 +329,8 @@ class CrawlingResponse(BaseModel): "힐링스테이", "스테이머뭄" ] - } + }, + "m_id" : 1 } } ) @@ -346,6 +347,7 @@ class CrawlingResponse(BaseModel): marketing_analysis: Optional[MarketingPromptOutput] = Field( None, description="마케팅 분석 결과 . 실패 시 null" ) + m_id : int = Field(..., description="마케팅 분석 결과 ID") class ErrorResponse(BaseModel): diff --git a/app/lyric/api/routers/v1/lyric.py b/app/lyric/api/routers/v1/lyric.py index 860bdc7..c508723 100644 --- a/app/lyric/api/routers/v1/lyric.py +++ b/app/lyric/api/routers/v1/lyric.py @@ -30,7 +30,7 @@ from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.database.session import get_session -from app.home.models import Project +from app.home.models import Project, MarketingIntel from app.user.dependencies.auth import get_current_user from app.user.models import User from app.lyric.models import Lyric @@ -48,6 +48,7 @@ from app.utils.pagination import PaginatedResponse, get_paginated from app.utils.prompts.prompts import lyric_prompt import traceback as tb +import json # 로거 설정 logger = get_logger("lyric") @@ -278,11 +279,15 @@ async def generate_lyric( Full verse flow, immersive mood """ } + marketing_intel_result = await session.execute(select(MarketingIntel).where(MarketingIntel.id == request_body.m_id)) + marketing_intel = marketing_intel_result.scalar_one_or_none() + + lyric_input_data = { "customer_name" : request_body.customer_name, "region" : request_body.region, "detail_region_info" : request_body.detail_region_info or "", - "marketing_intelligence_summary" : None, # task_idx 변경 후 marketing intelligence summary DB에 저장하고 사용할 필요가 있음 + "marketing_intelligence_summary" : json.dumps(marketing_intel.intel_result, ensure_ascii = False), "language" : request_body.language, "promotional_expression_example" : promotional_expressions[request_body.language], "timing_rules" : timing_rules["60s"], # 아직은 선택지 하나 @@ -314,6 +319,7 @@ async def generate_lyric( detail_region_info=request_body.detail_region_info, language=request_body.language, user_uuid=current_user.user_uuid, + marketing_inteligence = request_body.m_id ) session.add(project) await session.commit() diff --git a/app/lyric/schemas/lyric.py b/app/lyric/schemas/lyric.py index 718f724..46d28c3 100644 --- a/app/lyric/schemas/lyric.py +++ b/app/lyric/schemas/lyric.py @@ -41,7 +41,8 @@ class GenerateLyricRequest(BaseModel): "customer_name": "스테이 머뭄", "region": "군산", "detail_region_info": "군산 신흥동 말랭이 마을", - "language": "Korean" + "language": "Korean", + "m_id" : 1 } """ @@ -53,6 +54,7 @@ class GenerateLyricRequest(BaseModel): "region": "군산", "detail_region_info": "군산 신흥동 말랭이 마을", "language": "Korean", + "m_id" : 1 } } ) @@ -67,6 +69,7 @@ class GenerateLyricRequest(BaseModel): default="Korean", description="가사 출력 언어 (Korean, English, Chinese, Japanese, Thai, Vietnamese)", ) + m_id : Optional[int] = Field(None, description="마케팅 인텔리전스 ID 값") class GenerateLyricResponse(BaseModel): diff --git a/app/utils/prompts/templates/lyric_prompt.txt b/app/utils/prompts/templates/lyric_prompt.txt index f434c6f..5b04be0 100644 --- a/app/utils/prompts/templates/lyric_prompt.txt +++ b/app/utils/prompts/templates/lyric_prompt.txt @@ -4,6 +4,7 @@ You are a content marketing expert, brand strategist, and creative songwriter specializing in Korean pension / accommodation businesses. You create lyrics strictly based on Brand & Marketing Intelligence analysis and optimized for viral short-form video content. +Marketing Intelligence Report is background reference. [INPUT] Business Name: {customer_name}