11import logging
22import os
3+ from datetime import UTC , datetime , timedelta
34from urllib .parse import urlparse
45
56import requests
7+ from core .models import Token
68from fastapi import APIRouter , HTTPException , Request
79from fastapi .responses import RedirectResponse
810
9- from api .data .models import Token
10-
1111STOCKX_CLIENT_ID = os .environ .get ("SOLESEARCH_STOCKX_CLIENT_ID" , None )
1212STOCKX_CLIENT_SECRET = os .environ .get ("SOLESEARCH_STOCKX_CLIENT_SECRET" , None )
1313STOCKX_API_KEY = os .environ .get ("SOLESEARCH_STOCKX_API_KEY" , None )
@@ -56,7 +56,7 @@ async def stockx_oauth_callback(state: str, code: str, request: Request):
5656 "client_id" : STOCKX_CLIENT_ID ,
5757 "client_secret" : STOCKX_CLIENT_SECRET ,
5858 "code" : code ,
59- "redirect_uri" : f"https://{ urlparse (request .url_for ('get_sneakers' )).netloc } " ,
59+ "redirect_uri" : f"https://{ urlparse (str ( request .url_for ('get_sneakers' ) )).netloc } " ,
6060 }
6161 tokens = (
6262 session .post (
@@ -67,11 +67,15 @@ async def stockx_oauth_callback(state: str, code: str, request: Request):
6767 ).json ()
6868 for token_type in ["id_token" , "access_token" , "refresh_token" ]:
6969 if token_type in tokens :
70- await Token .find_one (Token .type == token_type ).set (
71- {"$set" : {"token" : tokens [token_type ]}}
72- )
70+ token = await Token .find_one (Token .id == token_type )
71+ setattr (token , "value" , tokens [token_type ])
72+ if token_type == "access_token" :
73+ token .expires = datetime .now (UTC ) + timedelta (
74+ seconds = int (tokens ["expires_in" ]) - 30
75+ )
76+ await token .save ()
7377 logging .info (f"Updated { token_type } " )
7478 return tokens
7579 except Exception as e :
76- logging .error (e )
80+ logging .exception (e )
7781 raise HTTPException (status_code = 500 , detail = str (e ))
0 commit comments