Skip to content

Commit 7f8e5cd

Browse files
committed
Access tokens moved to core, stockx oauth fixed
1 parent 91418d7 commit 7f8e5cd

3 files changed

Lines changed: 16 additions & 22 deletions

File tree

src/api/data/models.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,9 @@
11
from enum import Enum
22
from typing import List
33

4-
from beanie import Document
4+
from core.models.shoes import SneakerView
55
from pydantic import BaseModel
66

7-
from core.models.shoes import Sneaker, SneakerView
8-
9-
10-
class Token(Document):
11-
type: str
12-
token: str
13-
14-
class Settings:
15-
collection = "OAuth"
16-
177

188
class PaginatedSneakersResponse(BaseModel):
199
total: int

src/api/main.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
__version__ = "2.0.0"
1+
__version__ = "2.1.0"
22

33
import os
44

5+
from core.models import Token
56
from dotenv import load_dotenv
67

78
# Load environment variables from .env file if not running in AWS Lambda
@@ -10,16 +11,15 @@
1011
load_dotenv(os.path.join(os.getcwd(), ".env"))
1112

1213
from beanie import init_beanie
14+
from core.models.shoes import Sneaker
1315
from fastapi import FastAPI
1416
from fastapi.middleware.cors import CORSMiddleware
1517
from fastapi.openapi.docs import get_swagger_ui_html
16-
from fastapi.staticfiles import StaticFiles
1718
from mangum import Mangum
1819
from starlette.middleware.sessions import SessionMiddleware
1920

2021
from api.data.instance import DATABASE_NAME, client
2122
from api.routes import auth, sneakers
22-
from core.models.shoes import Sneaker
2323

2424
desc = """
2525
### The Bloomberg Terminal of Sneakers
@@ -56,7 +56,7 @@ async def startup_event():
5656
# Initialize Beanie ODM
5757
await init_beanie(
5858
database=client.get_database(DATABASE_NAME),
59-
document_models=[Sneaker],
59+
document_models=[Sneaker, Token],
6060
)
6161
# Include all routers
6262
app.include_router(sneakers.router)

src/api/routes/auth.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import logging
22
import os
3+
from datetime import UTC, datetime, timedelta
34
from urllib.parse import urlparse
45

56
import requests
7+
from core.models import Token
68
from fastapi import APIRouter, HTTPException, Request
79
from fastapi.responses import RedirectResponse
810

9-
from api.data.models import Token
10-
1111
STOCKX_CLIENT_ID = os.environ.get("SOLESEARCH_STOCKX_CLIENT_ID", None)
1212
STOCKX_CLIENT_SECRET = os.environ.get("SOLESEARCH_STOCKX_CLIENT_SECRET", None)
1313
STOCKX_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

Comments
 (0)