Skip to content

Commit d6239d4

Browse files
committed
fully switched to beanie
1 parent 47b105f commit d6239d4

File tree

7 files changed

+57
-122
lines changed

7 files changed

+57
-122
lines changed

src/api/__about__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "1.0.2"
1+
__version__ = "1.0.3"

src/api/data/models.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
from enum import Enum
22

3+
from beanie import Document
4+
5+
6+
class Token(Document):
7+
type: str
8+
token: str
9+
10+
class Settings:
11+
collection = "OAuth"
12+
313

414
class SortKey(str, Enum):
515
BRAND = "brand"

src/api/data/queries.py

Lines changed: 0 additions & 99 deletions
This file was deleted.

src/api/main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66
load_dotenv(os.path.join(os.getcwd(), ".env"))
77

88
from beanie import init_beanie
9+
from core.models.shoes import Sneaker
910
from fastapi import FastAPI
1011
from mangum import Mangum
1112
from starlette.middleware.sessions import SessionMiddleware
1213

1314
from api.data.instance import DATABASE_NAME, client
1415
from api.routes import auth, sneakers
15-
from core.models.shoes import Sneaker
1616

1717
app = FastAPI(
1818
redoc_url=None,
1919
responses={404: {"description": "Not found"}},
2020
)
2121

22-
app.add_middleware(SessionMiddleware, secret_key="some secret key here")
22+
app.add_middleware(SessionMiddleware, secret_key="vT!y!r5s#bwcDxDG")
2323

2424

2525
@app.on_event("startup")

src/api/routes/auth.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from fastapi import APIRouter, HTTPException, Request
77
from fastapi.responses import RedirectResponse
88

9-
from api.data.queries import update_tokens
9+
from api.data.models import Token
1010

1111
STOCKX_CLIENT_ID = os.environ.get("SOLESEARCH_STOCKX_CLIENT_ID", None)
1212
STOCKX_CLIENT_SECRET = os.environ.get("SOLESEARCH_STOCKX_CLIENT_SECRET", None)
@@ -62,7 +62,12 @@ async def stockx_oauth_callback(state: str, code: str, request: Request):
6262
headers=headers,
6363
)
6464
).json()
65-
await update_tokens(tokens)
65+
for token_type in ["id_token", "access_token", "refresh_token"]:
66+
if token_type in tokens:
67+
await Token.find_one(Token.type == token_type).set(
68+
{"$set": {"token": tokens[token_type]}}
69+
)
70+
logging.info(f"Updated {token_type}")
6671
return tokens
6772
except Exception as e:
6873
logging.error(e)

src/api/routes/pricing.py

Whitespace-only changes.

src/api/routes/sneakers.py

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1+
from datetime import UTC, datetime
12
from typing import Annotated
23

4+
from core.models.details import Audience
5+
from core.models.shoes import Sneaker
36
from fastapi import APIRouter, HTTPException, Query
47

58
from api.data.instance import DEFAULT_LIMIT, DEFAULT_OFFSET
69
from api.data.models import SortKey, SortOrder
7-
from api.data.queries import find_sneakers
8-
from core.models.details import Audience
9-
from core.models.shoes import Sneaker
1010

1111
router = APIRouter(
1212
prefix="/sneakers",
@@ -16,30 +16,49 @@
1616
@router.get("/")
1717
async def get_sneakers(
1818
brand: str | None = None,
19-
sku: str | None = None,
2019
name: str | None = None,
21-
colorway: str | None = None,
2220
audience: Audience | None = None,
2321
releaseDate: str | None = None,
2422
released: bool | None = None,
2523
sort: SortKey = SortKey.RELEASE_DATE,
26-
sortOrder: SortOrder = SortOrder.DESCENDING,
24+
order: SortOrder = SortOrder.DESCENDING,
2725
offset: Annotated[int, Query(gte=DEFAULT_OFFSET)] = DEFAULT_OFFSET,
2826
limit: Annotated[int, Query(gte=1, lte=100)] = DEFAULT_LIMIT,
2927
):
30-
return await find_sneakers(
31-
brand=brand,
32-
sku=sku,
33-
name=name,
34-
colorway=colorway,
35-
audience=audience,
36-
release_date=releaseDate,
37-
released=released,
38-
sort_by=sort,
39-
sort_order=sortOrder,
40-
offset=offset,
41-
limit=limit,
28+
query = Sneaker.find()
29+
if brand:
30+
query = query.find(Sneaker.brand == brand)
31+
if name:
32+
query = query.find(Sneaker.name == name)
33+
if audience:
34+
query = query.find(Sneaker.audience == audience)
35+
if released is not None:
36+
now = datetime.now(UTC)
37+
if released:
38+
query = query.find(Sneaker.releaseDate <= now)
39+
else:
40+
query = query.find(Sneaker.releaseDate > now)
41+
elif releaseDate:
42+
if ":" in releaseDate:
43+
inequality_operator, date_str = releaseDate.split(":")
44+
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
45+
if inequality_operator == "lt":
46+
query = query.find(Sneaker.releaseDate < date_obj)
47+
elif inequality_operator == "lte":
48+
query = query.find(Sneaker.releaseDate <= date_obj)
49+
elif inequality_operator == "gt":
50+
query = query.find(Sneaker.releaseDate > date_obj)
51+
elif inequality_operator == "gte":
52+
query = query.find(Sneaker.releaseDate >= date_obj)
53+
else:
54+
date_obj = datetime.strptime(releaseDate, "%Y-%m-%d")
55+
query = query.find(Sneaker.releaseDate == date_obj)
56+
57+
order = "+" if order == SortOrder.ASCENDING else "-"
58+
sneakers_list = (
59+
await query.sort(f"{order}{sort.value}").skip(offset).limit(limit).to_list()
4260
)
61+
return sneakers_list
4362

4463

4564
@router.get("/{product_id}")

0 commit comments

Comments
 (0)