File size: 3,761 Bytes
4bfbe6a
 
 
 
 
 
2d577d6
4bfbe6a
 
 
 
 
 
2d577d6
 
 
 
 
 
 
 
 
 
4bfbe6a
 
 
2d577d6
4bfbe6a
 
 
 
 
 
 
 
 
 
 
 
 
 
b52b697
4bfbe6a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2d577d6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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"])