31 lines
1 KiB
Python
31 lines
1 KiB
Python
from typing import Annotated
|
|
from fastapi import Depends, FastAPI, HTTPException, status
|
|
from fastapi.security import OAuth2PasswordBearer
|
|
from models.user import User
|
|
from repositories.listing_repository import ListingRepository
|
|
from repositories.listing_repository import ListingRepository
|
|
from database import engine
|
|
from repositories.user_repository import UserRepository
|
|
|
|
|
|
app = FastAPI()
|
|
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
|
|
|
|
|
|
async def decode_token(token: Annotated[str, Depends(oauth2_scheme)]):
|
|
repository = UserRepository(engine)
|
|
user = await repository.get_user_from_token(token)
|
|
if not user:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
detail="Invalid authentication credentials",
|
|
headers={"WWW-Authenticate": "Bearer"},
|
|
)
|
|
return user
|
|
|
|
|
|
@app.get("/listing")
|
|
async def get_listing(user: Annotated[User | None, Depends(decode_token)]):
|
|
repository = ListingRepository(engine)
|
|
listings = await repository.get_listings()
|
|
return {"listings": listings}
|