Commit d21e9eec authored by Vũ Hoàng Anh's avatar Vũ Hoàng Anh

Update mock API routes and prefixes

parent 49f43a45
...@@ -2,14 +2,16 @@ ...@@ -2,14 +2,16 @@
Canifa API Service Canifa API Service
Xử lý các logic liên quan đến API của Canifa (Magento) Xử lý các logic liên quan đến API của Canifa (Magento)
""" """
import logging import logging
from typing import Any
import httpx import httpx
from typing import Optional, Dict, Any
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# URL API Canifa # URL API Canifa
CANIFA_CUSTOMER_API = "https://canifa.com/v1/magento/customer" CANIFA_CUSTOMER_API = "https://vsf2.canifa.com/v1/magento/customer"
# GraphQL Query Body giả lập (để lấy User Info) # GraphQL Query Body giả lập (để lấy User Info)
CANIFA_QUERY_BODY = [ CANIFA_QUERY_BODY = [
...@@ -17,12 +19,13 @@ CANIFA_QUERY_BODY = [ ...@@ -17,12 +19,13 @@ CANIFA_QUERY_BODY = [
"customer": "customer-custom-query", "customer": "customer-custom-query",
"metadata": { "metadata": {
"fields": "\n customer {\n gender\n customer_id\n phone_number\n date_of_birth\n default_billing\n default_shipping\n email\n firstname\n is_subscribed\n lastname\n middlename\n prefix\n suffix\n taxvat\n addresses {\n city\n country_code\n default_billing\n default_shipping\n extension_attributes {\n attribute_code\n value\n }\n custom_attributes {\n attribute_code\n value\n }\n firstname\n id\n lastname\n postcode\n prefix\n region {\n region_code\n region_id\n region\n }\n street\n suffix\n telephone\n vat_id\n }\n is_subscribed\n }\n " "fields": "\n customer {\n gender\n customer_id\n phone_number\n date_of_birth\n default_billing\n default_shipping\n email\n firstname\n is_subscribed\n lastname\n middlename\n prefix\n suffix\n taxvat\n addresses {\n city\n country_code\n default_billing\n default_shipping\n extension_attributes {\n attribute_code\n value\n }\n custom_attributes {\n attribute_code\n value\n }\n firstname\n id\n lastname\n postcode\n prefix\n region {\n region_code\n region_id\n region\n }\n street\n suffix\n telephone\n vat_id\n }\n is_subscribed\n }\n "
}
}, },
{} },
{},
] ]
async def verify_canifa_token(token: str) -> Optional[Dict[str, Any]]:
async def verify_canifa_token(token: str) -> dict[str, Any] | None:
""" """
Verify token với API Canifa (Magento). Verify token với API Canifa (Magento).
Dùng token làm cookie `vsf-customer` để gọi API lấy thông tin customer. Dùng token làm cookie `vsf-customer` để gọi API lấy thông tin customer.
...@@ -39,16 +42,12 @@ async def verify_canifa_token(token: str) -> Optional[Dict[str, Any]]: ...@@ -39,16 +42,12 @@ async def verify_canifa_token(token: str) -> Optional[Dict[str, Any]]:
headers = { headers = {
"accept": "application/json, text/plain, */*", "accept": "application/json, text/plain, */*",
"content-type": "application/json", "content-type": "application/json",
"Cookie": f"vsf-customer={token}" # Quan trọng: Gửi token dưới dạng Cookie "Cookie": f"vsf-customer={token}", # Quan trọng: Gửi token dưới dạng Cookie
} }
try: try:
async with httpx.AsyncClient(timeout=10.0) as client: async with httpx.AsyncClient(timeout=10.0) as client:
response = await client.post( response = await client.post(CANIFA_CUSTOMER_API, json=CANIFA_QUERY_BODY, headers=headers)
CANIFA_CUSTOMER_API,
json=CANIFA_QUERY_BODY,
headers=headers
)
if response.status_code == 200: if response.status_code == 200:
data = response.json() data = response.json()
...@@ -62,7 +61,6 @@ async def verify_canifa_token(token: str) -> Optional[Dict[str, Any]]: ...@@ -62,7 +61,6 @@ async def verify_canifa_token(token: str) -> Optional[Dict[str, Any]]:
# Nếu Canifa trả list (batch request) # Nếu Canifa trả list (batch request)
return data return data
else:
logger.warning(f"Canifa API Failed: {response.status_code} - {response.text}") logger.warning(f"Canifa API Failed: {response.status_code} - {response.text}")
return None return None
...@@ -70,7 +68,8 @@ async def verify_canifa_token(token: str) -> Optional[Dict[str, Any]]: ...@@ -70,7 +68,8 @@ async def verify_canifa_token(token: str) -> Optional[Dict[str, Any]]:
logger.error(f"Error calling Canifa API: {e}") logger.error(f"Error calling Canifa API: {e}")
return None return None
async def extract_user_id_from_canifa_response(data: Any) -> Optional[str]:
async def extract_user_id_from_canifa_response(data: Any) -> str | None:
""" """
Bóc customer_id từ response data của Canifa. Bóc customer_id từ response data của Canifa.
""" """
...@@ -83,16 +82,16 @@ async def extract_user_id_from_canifa_response(data: Any) -> Optional[str]: ...@@ -83,16 +82,16 @@ async def extract_user_id_from_canifa_response(data: Any) -> Optional[str]:
# Format 1: data['customer'] # Format 1: data['customer']
if isinstance(data, dict): if isinstance(data, dict):
customer = data.get('customer') or data.get('data', {}).get('customer') customer = data.get("customer") or data.get("data", {}).get("customer")
# Format 2: data là list (nếu query batch) # Format 2: data là list (nếu query batch)
elif isinstance(data, list) and len(data) > 0: elif isinstance(data, list) and len(data) > 0:
item = data[0] item = data[0]
if isinstance(item, dict): if isinstance(item, dict):
customer = item.get('result', {}).get('customer') or item.get('data', {}).get('customer') customer = item.get("result", {}).get("customer") or item.get("data", {}).get("customer")
if customer and isinstance(customer, dict): if customer and isinstance(customer, dict):
user_id = customer.get('customer_id') or customer.get('id') user_id = customer.get("customer_id") or customer.get("id")
if user_id: if user_id:
return str(user_id) return str(user_id)
......
...@@ -13,3 +13,5 @@ docker restart chatbot-backend && docker logs -f chatbot-backend ...@@ -13,3 +13,5 @@ docker restart chatbot-backend && docker logs -f chatbot-backend
docker logs -f chatbot-backend docker logs -f chatbot-backend
docker restart chatbot-backend docker restart chatbot-backend
sudo docker compose -f docker-compose.prod.yml up -d --build
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment