Skip to content

Commit

Permalink
feat: recommendations api 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
mjkweon17 committed Mar 23, 2024
1 parent f5cbd88 commit 35b471d
Show file tree
Hide file tree
Showing 23 changed files with 124 additions and 310 deletions.
2 changes: 1 addition & 1 deletion src/auth/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class ExampleResponse(ExampleBase):
created_at: datetime = Field(..., title="created_at", description="북마크 생성일", example="2024-10-16 00:00:00")
updated_at: datetime = Field(..., title="updated_at", description="북마크 수정일", example="2024-10-16 00:00:00")
title: Optional[str] = Field(default=None, title="title", description="북마크한 페이지의 title", example="마음의 소리")
summarization: Optional[str] = Field(default=None, title="summarization", description="북마크한 페이지의 summarization", example="마음의 소리")
summary: Optional[str] = Field(default=None, title="summary", description="북마크한 페이지의 summary", example="마음의 소리")


class ExampleList(BaseModel):
Expand Down
2 changes: 1 addition & 1 deletion src/bookmarks/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def create_bookmark(
page_id=db_bookmark.page_id,
created_at=db_bookmark.created_at,
title=page.title,
summarization=page.summary
summary=page.summary
)

return response
2 changes: 1 addition & 1 deletion src/bookmarks/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class BookmarkResponse(BookmarkBase):
page_id: int = Field(..., title="page_id", description="북마크한 페이지의 page_id", example=1, ge=1)
created_at: datetime = Field(..., title="created_at", description="북마크 생성일", example="2024-10-16 00:00:00")
title: Optional[str] = Field(default=None, title="title", description="북마크한 페이지의 title", example="마음의 소리")
summarization: Optional[str] = Field(default=None, title="summarization", description="북마크한 페이지의 summarization", example="마음의 소리")
summary: Optional[str] = Field(default=None, title="summary", description="북마크한 페이지의 summary", example="마음의 소리")

class BookmarkList(BaseModel):
bookmarks: List[BookmarkResponse]
44 changes: 0 additions & 44 deletions src/contents/router.py

This file was deleted.

37 changes: 0 additions & 37 deletions src/contents/schemas.py

This file was deleted.

18 changes: 0 additions & 18 deletions src/contents/service.py

This file was deleted.

Empty file removed src/keywords/__init__.py
Empty file.
44 changes: 0 additions & 44 deletions src/keywords/router.py

This file was deleted.

37 changes: 0 additions & 37 deletions src/keywords/schemas.py

This file was deleted.

18 changes: 0 additions & 18 deletions src/keywords/service.py

This file was deleted.

Empty file removed src/keywords/utils.py
Empty file.
11 changes: 2 additions & 9 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,9 @@
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

# from auth.router import router as auth_router
from auth.router import router as auth_router
from bookmarks.router import router as bookmarks_router
from contents.router import router as contents_router
from keywords.router import router as keywords_router
from search.router import router as search_router
from recommendations.router import router as recommendations_router
from users.router import router as users_router

from utils.web_crawler import get_title_and_content_selenium
Expand All @@ -30,12 +27,8 @@
)

# 라우터 등록
# app.include_router(auth_router)
app.include_router(bookmarks_router)
# app.include_router(contents_router)
# app.include_router(keywords_router)
# app.include_router(search_router)
# app.include_router(users_router)
app.include_router(recommendations_router)

# CORS 설정
origins = [
Expand Down
File renamed without changes.
41 changes: 41 additions & 0 deletions src/recommendations/router.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from typing import List, Optional
from datetime import datetime

from fastapi import APIRouter, Depends, Body, Path, HTTPException, status
from sqlalchemy.orm import Session

from database import get_db
from recommendations.schemas import RecommendationRequest, RecommendationResponse, BookmarkBase
from recommendations.service import get_recommendations_service

router = APIRouter(
prefix="/recommendations",
tags=["recommendations"],
responses={404: {"description": "Not found"}}
)


@router.post(
"/",
response_model=RecommendationResponse,
status_code=status.HTTP_200_OK,
description="글 관련 페이지 추천",
summary="글 관련 페이지 추천",
response_description={
status.HTTP_200_OK: {
"description": "글 관련 페이지 추천 성공"
}
}
)
async def recommend_pages(
request: RecommendationRequest,
db: Session = Depends(get_db)
):
# 사용자 정보를 가지고 구글 드라이브에 접속한다
# content_id를 가지고 온다
# 수정 사항을 embedding한다
# vector db에서 가장 가까운 n개의 문서를 가지고 온다
# n 개의 문서 중 유사도가 일정 수치 이하인 문서는 제외한다
# 가지고 온 문서들을 사용자에게 보여준다

return get_recommendations_service(request, db)
25 changes: 25 additions & 0 deletions src/recommendations/schemas.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from typing import List, Optional
from datetime import datetime

from pydantic import BaseModel, Field


class UserInfo(BaseModel):
pass


class RecommendationRequest(BaseModel):
content: str = Field(..., title="content", description="content", example="contentcontentcontentcontent")


class BookmarkBase(BaseModel):
user_id: Optional[int] = Field(default=None, title="user_id", description="북마크한 사용자의 user_id", example=1, ge=0)
url: str = Field(..., title="url", description="북마크한 페이지의 url", example="https://mindorizip.tistory.com")
title: Optional[str] = Field(default=None, title="title", description="북마크한 페이지의 title", example="마음의 소리")
page_id: int = Field(..., title="page_id", description="북마크한 페이지의 page_id", example=1, ge=1)
bookmark_id: int = Field(..., title="bookmark_id", description="북마크 id", example=1, ge=1)
summary: Optional[str] = Field(default=None, title="summary", description="북마크한 페이지의 summary", example="마음의 소리")


class RecommendationResponse(BaseModel):
recommended_pages: List[BookmarkBase]
52 changes: 52 additions & 0 deletions src/recommendations/service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
from datetime import datetime

from fastapi import HTTPException
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import null

from models import Bookmark, Content
from recommendations.schemas import RecommendationRequest


def get_recommendations_service(request: RecommendationRequest, db: Session):

content = request.content

response = {
"recommended_pages": [
{
"url": "https://mindorizip.tistory.com",
"user_id": 1,
"title": "Mindorizip",
"page_id": 1,
"bookmark_id": 1,
"summary": "마음의 소리"
},
{
"url": "https://www.google.com",
"user_id": 1,
"title": "Google",
"page_id": 2,
"bookmark_id": 2,
"summary": "구글"
},
{
"url": "https://www.naver.com",
"user_id": 1,
"title": "Naver",
"page_id": 3,
"bookmark_id": 3,
"summary": "네이버"
},
{
"url": "https://www.daum.net",
"user_id": 1,
"title": "Daum",
"page_id": 4,
"bookmark_id": 4,
"summary": "다음"
}
]
}

return response
File renamed without changes.
Empty file removed src/search/__init__.py
Empty file.
Loading

0 comments on commit 35b471d

Please sign in to comment.