chatbot_server / main.py
kltn21110's picture
Update main.py
da706b2 verified
from fastapi import FastAPI, HTTPException, Depends, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
import decode_token
import function.recommender
import function.recommender.recommend
from controller import CallbackController,ChatController,RedirectController,GroupOrderController,RefundController
from request import RequestChat
from typing import Dict
from fastapi.responses import RedirectResponse
app = FastAPI(
title="ChatBot HMDrinks",
description="""ChatBot HMDrinks for Customizing Chatbots by Nguyen Le Gia Han(21110432) & Nguyen Thuy Diem My(21110549)
### 🌐 Liên kết hệ thống
- 🔗 **Frontend Website**: [HMDrinks Website](https://hmdrinks-t8e3-giahans-projects.vercel.app/)
- 🔗 **API Java Docs**: [Swagger UI](https://hmdrinks-be.up.railway.app/swagger-ui/index.html)
- 🔗 **API Python Docs**: [Swagger UI](https://kltn21110-chatbot-server.hf.space/docs)
---
""",
version="1.0.0",
contact={
"name": "Nguyen Le Gia Han",
"url": "https://hmdrinks-t8e3-giahans-projects.vercel.app/",
"email": "21110432@student.hcmute.edu.vn",
},
license_info={
"name": "Apache 2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0.html",
},
swagger_ui_parameters={
"syntaxHighlight.theme": "monokai"
}
)
app.add_middleware(
CORSMiddleware,
allow_origins=["https://kltn21110-chatbot-server.hf.space"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
class JWTBearer(HTTPBearer):
def __init__(self, auto_error: bool = True):
super(JWTBearer, self).__init__(auto_error=auto_error)
async def __call__(self, request: Request):
credentials: HTTPAuthorizationCredentials = await super(JWTBearer, self).__call__(request)
if credentials:
if credentials.scheme != "Bearer":
raise HTTPException(status_code=401, detail="Invalid authentication scheme.")
return credentials.credentials
else:
raise HTTPException(status_code=401, detail="Invalid authorization code.")
jwt_bearer = JWTBearer()
from fastapi.responses import JSONResponse
@app.post("/api/v1/recommend", tags=["Recommend"])
async def get_chat_details(request: RequestChat.RecommendRequest,token: str = Depends(jwt_bearer)):
try:
user_id_token = decode_token.JwtService.extract_user_id(token)
data = await function.recommender.recommend.recommend(int(user_id_token),request.number)
return data
except Exception as e:
print("Lỗi khi gọi recommend:", e)
return JSONResponse(content={"error": "Internal server error"}, status_code=500)
@app.get("/grouporder/",tags=["GroupOrder"])
async def group_order_redirect(request: Request):
try:
params: Dict[str, str] = dict(request.query_params)
code = params.get("code")
print(code)
if not code:
return RedirectResponse(url="myapp://open/group-order?status=-1")
return RedirectResponse(url=f"myapp://open/group-order?status=1&code={code}")
except Exception as e:
print("Lỗi khi gọi group order:", e)
return JSONResponse(content={"error": "Internal server error"}, status_code=500)
app.include_router(CallbackController.router, prefix="/api/v1/callback",tags=["CallBack"])
app.include_router(ChatController.router, prefix="/api/v1/chat",tags=["ChatBot"])
app.include_router(RedirectController.router, prefix="/api/v1/redirect",tags=["Redirect"])
app.include_router(GroupOrderController.router, prefix="/api/v1/group-order",tags=["GroupOrder"])
app.include_router(RefundController.router, prefix="/api/v1/refund-payment",tags=["Refund"])