diff --git a/smarketing-ai/services/marketing_tip_service.py b/smarketing-ai/services/marketing_tip_service.py index db5526a..956eaf7 100644 --- a/smarketing-ai/services/marketing_tip_service.py +++ b/smarketing-ai/services/marketing_tip_service.py @@ -101,7 +101,8 @@ class MarketingTipService: 당신의 임무는 매장 정보를 바탕으로, 적은 비용으로 효과를 낼 수 있는 현실적이고 실행 가능한 마케팅 팁을 제안하는 것입니다. 지역성, 지역의 현재 날씨 확인하고, 현재 트렌드까지 고려해주세요. -소상공인을 위한 실용적인 마케팅 팁을 생성해주세요. +소상공인을 위한 현실적이고 바로 실행할 수 있는 실용적인 마케팅 팁을 생성해주세요. +협업보다는 할인, 포스팅 등 당장 실현 가능한 현실적인 방법을 추천해주세요. 매장 정보: - 매장명: {store_name} @@ -123,7 +124,7 @@ class MarketingTipService: prompt += """ 아래 조건을 모두 충족하는 마케팅 팁을 하나 생성해주세요: -1. **실행 가능성**: 소상공인이 실제로 적용할 수 있는 현실적인 방법 +1. **실행 가능성**: 소상공인이 실제로 바로 적용할 수 있는 현실적인 방법 2. **비용 효율성**: 적은 비용으로 높은 효과를 기대할 수 있는 전략 3. **구체성**: 실행 단계가 명확하고 구체적일 것 4. **시의성**: 현재 계절, 유행, 트렌드를 반영 @@ -131,9 +132,7 @@ class MarketingTipService: 응답 형식 (300자 내외, 간결하게): html 형식으로 출력 -핵심 마케팅 팁은 제목없이 한번 더 상단에 보여주세요 -부제목과 내용은 분리해서 출력 -아래의 부제목 앞에는 이모지 포함 + - 핵심 마케팅 팁 (1개) - 실행 방법 (1개) - 예상 비용과 기대 효과 @@ -141,6 +140,26 @@ html 형식으로 출력 - 참고했던 실제 성공한 마케팅 - 오늘의 응원의 문장 (간결하게 1개) +아래 형식대로 그대로 출력해주세요! + +
[여기에 새로운 핵심 마케팅 팁 작성]
+ +[여기에 새로운 실행 방법 내용 작성]
+ +[여기에 새로운 비용/효과 내용 작성]
+ +[여기에 새로운 주의사항 내용 작성]
+ +[여기에 새로운 참고 사례 내용 작성]
+ +[여기에 응원의 문장 작성]
+ 심호흡하고, 단계별로 차근차근 생각해서 정확하고 실현 가능한 아이디어를 제시해주세요. """ diff --git a/smarketing-java/ai-recommend/src/main/java/com/won/smarketing/recommend/application/service/MarketingTipService.java b/smarketing-java/ai-recommend/src/main/java/com/won/smarketing/recommend/application/service/MarketingTipService.java index 49b2801..a960a0a 100644 --- a/smarketing-java/ai-recommend/src/main/java/com/won/smarketing/recommend/application/service/MarketingTipService.java +++ b/smarketing-java/ai-recommend/src/main/java/com/won/smarketing/recommend/application/service/MarketingTipService.java @@ -103,9 +103,12 @@ public class MarketingTipService implements MarketingTipUseCase { String aiGeneratedTip = aiTipGenerator.generateTip(storeWithMenuData); log.debug("AI 팁 생성 완료: {}", aiGeneratedTip.substring(0, Math.min(50, aiGeneratedTip.length()))); + String tipSummary = generateTipSummary(aiGeneratedTip); + // 도메인 객체 생성 및 저장 MarketingTip marketingTip = MarketingTip.builder() .storeId(storeWithMenuData.getStoreData().getStoreId()) + .tipSummary(tipSummary) .tipContent(aiGeneratedTip) .storeWithMenuData(storeWithMenuData) .createdAt(LocalDateTime.now()) @@ -122,11 +125,10 @@ public class MarketingTipService implements MarketingTipUseCase { * 마케팅 팁을 응답 DTO로 변환 (전체 내용 포함) */ private MarketingTipResponse convertToResponse(MarketingTip marketingTip, StoreData storeData, boolean isRecentlyCreated) { - String tipSummary = generateTipSummary(marketingTip.getTipContent()); return MarketingTipResponse.builder() .tipId(marketingTip.getId().getValue()) - .tipSummary(tipSummary) + .tipSummary(marketingTip.getTipSummary()) .tipContent(marketingTip.getTipContent()) // 🆕 전체 내용 포함 .storeInfo(MarketingTipResponse.StoreInfo.builder() .storeName(storeData.getStoreName()) diff --git a/smarketing-java/common/src/main/java/com/won/smarketing/common/config/SecurityConfig.java b/smarketing-java/common/src/main/java/com/won/smarketing/common/config/SecurityConfig.java index 5c61143..7b8f4f2 100644 --- a/smarketing-java/common/src/main/java/com/won/smarketing/common/config/SecurityConfig.java +++ b/smarketing-java/common/src/main/java/com/won/smarketing/common/config/SecurityConfig.java @@ -44,8 +44,8 @@ public class SecurityConfig { .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(auth -> auth .requestMatchers("/api/auth/**", "/api/member/register", "/api/member/check-duplicate/**", - "/api/member/validate-password", "/swagger-ui/**", "/v3/api-docs/**", - "/swagger-resources/**", "/webjars/**").permitAll() + "/api/member/validate-password", "/swagger-ui/**", "/v3/api-docs/**", + "/swagger-resources/**", "/webjars/**", "/actuator/**", "/health/**", "/error").permitAll() .anyRequest().authenticated() ) .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);