Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 9 additions & 44 deletions apps/pre-processing-service/app/api/endpoints/blog.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
BloggerBlogPostAdapter,
) # μˆ˜μ •λœ import
from app.utils.response import Response
from app.service.blog.blog_create_service import BlogContentService
from app.service.blog.blog_publish_service import BlogPublishService

router = APIRouter()

Expand All @@ -21,7 +23,10 @@ async def rag_create(request: RequestBlogCreate):
"""
RAG 기반 λΈ”λ‘œκ·Έ μ½˜ν…μΈ  생성
"""
return {"message": "blog API"}
blog_service = BlogContentService()
response_data = blog_service.generate_blog_content(request)

return Response.ok(response_data)


@router.post(
Expand All @@ -35,47 +40,7 @@ async def publish(request: RequestBlogPublish):
넀이버 λΈ”λ‘œκ·Έμ™€ ν‹°μŠ€ν† λ¦¬ λΈ”λ‘œκ·Έλ₯Ό μ§€μ›ν•˜λ©°,
ν˜„μž¬λŠ” μƒμ„±λœ μ½˜ν…μΈ κ°€ μ•„λ‹Œ μž„μ˜μ˜ 제λͺ©, λ‚΄μš©, νƒœκ·Έλ₯Ό λ°°ν¬ν•©λ‹ˆλ‹€.
"""
if request.tag == "naver":
naver_service = NaverBlogPostService()
response_data = naver_service.post_content(
title=request.post_title,
content=request.post_content,
tags=request.post_tags,
)

if not response_data:
raise CustomException(
"넀이버 λΈ”λ‘œκ·Έ ν¬μŠ€νŒ…μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.", status_code=500
)

return Response.ok(response_data)

elif request.tag == "tistory":
tistory_service = TistoryBlogPostService()
response_data = tistory_service.post_content(
title=request.post_title,
content=request.post_content,
tags=request.post_tags,
)

if not response_data:
raise CustomException(
"ν‹°μŠ€ν† λ¦¬ λΈ”λ‘œκ·Έ ν¬μŠ€νŒ…μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.", status_code=500
)

return Response.ok(response_data)

elif request.tag == "blogger":
blogger_service = BloggerBlogPostAdapter() # μˆ˜μ •: Adapter μ‚¬μš©
response_data = blogger_service.post_content(
title=request.post_title,
content=request.post_content,
tags=request.post_tags,
)

if not response_data:
raise CustomException(
"λΈ”λ‘œκ±° λΈ”λ‘œκ·Έ ν¬μŠ€νŒ…μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.", status_code=500
)
publish_service = BlogPublishService()
response_data = publish_service.publish_content(request)

return Response.ok(response_data)
return Response.ok(response_data)
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from typing import Dict
from app.errors.CustomException import CustomException
from app.model.schemas import RequestBlogPublish
from app.service.blog.blog_service_factory import BlogServiceFactory


class BlogPublishService:
"""λΈ”λ‘œκ·Έ λ°œν–‰μ„ λ‹΄λ‹Ήν•˜λŠ” μ„œλΉ„μŠ€ 클래슀"""

def __init__(self):
self.factory = BlogServiceFactory()

def publish_content(self, request: RequestBlogPublish) -> Dict:
"""
μƒμ„±λœ λΈ”λ‘œκ·Έ μ½˜ν…μΈ λ₯Ό λ°°ν¬ν•©λ‹ˆλ‹€.
"""
try:
# νŒ©ν† λ¦¬λ₯Ό 톡해 μ μ ˆν•œ μ„œλΉ„μŠ€ 생성
blog_service = self.factory.create_service(request.tag)

# 곡톡 μΈν„°νŽ˜μ΄μŠ€λ‘œ ν¬μŠ€νŒ… μ‹€ν–‰
response_data = blog_service.post_content(
title=request.post_title,
content=request.post_content,
tags=request.post_tags,
)

if not response_data:
raise CustomException(
f"{request.tag} λΈ”λ‘œκ·Έ ν¬μŠ€νŒ…μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.", status_code=500
)

return response_data

except CustomException:
# 이미 처리된 μ˜ˆμ™ΈλŠ” κ·ΈλŒ€λ‘œ 전달
raise
except Exception as e:
# μ˜ˆμƒμΉ˜ λͺ»ν•œ μ˜ˆμ™Έ 처리
raise CustomException(
f"λΈ”λ‘œκ·Έ ν¬μŠ€νŒ… 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}", status_code=500
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from typing import Dict, Type
from app.service.blog.base_blog_post_service import BaseBlogPostService
from app.service.blog.naver_blog_post_service import NaverBlogPostService
from app.service.blog.tistory_blog_post_service import TistoryBlogPostService
from app.service.blog.blogger_blog_post_adapter import BloggerBlogPostAdapter
from app.errors.CustomException import CustomException


class BlogServiceFactory:
"""λΈ”λ‘œκ·Έ μ„œλΉ„μŠ€ 객체 생성을 λ‹΄λ‹Ήν•˜λŠ” νŒ©ν† λ¦¬"""

# μ„œλΉ„μŠ€ νƒ€μž…λ³„ 클래슀 λ§€ν•‘
_services: Dict[str, Type[BaseBlogPostService]] = {
"naver": NaverBlogPostService,
"tistory": TistoryBlogPostService,
"blogger": BloggerBlogPostAdapter,
}

@classmethod
def create_service(cls, platform: str) -> BaseBlogPostService:
"""
ν”Œλž«νΌμ— λ”°λ₯Έ λΈ”λ‘œκ·Έ μ„œλΉ„μŠ€ μΈμŠ€ν„΄μŠ€ 생성
"""
service_class = cls._services.get(platform.lower())

if not service_class:
raise CustomException(
f"μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν”Œλž«νΌμž…λ‹ˆλ‹€: {platform}. "
f"지원 ν”Œλž«νΌ: {list(cls._services.keys())}",
status_code=400,
)

return service_class()

@classmethod
def get_supported_platforms(cls) -> list:
"""μ§€μ›ν•˜λŠ” ν”Œλž«νΌ λͺ©λ‘ λ°˜ν™˜"""
return list(cls._services.keys())
Loading