|
|
|
@ -81,11 +81,11 @@ async def get_current_user(token: str = Depends(oauth2_scheme)) -> User:
|
|
|
|
|
return user_serialize(user)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Routes - TODO: find workaround to display 401/409/... HTTP error codes in openapi.json
|
|
|
|
|
# Routes
|
|
|
|
|
@app.post(
|
|
|
|
|
path="/register",
|
|
|
|
|
response_model=Token,
|
|
|
|
|
responses={409: {"model": Message}}
|
|
|
|
|
responses={409: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def register(user: UserRegisterDTO):
|
|
|
|
|
user_exists = users_collection.find_one({"username": user.username})
|
|
|
|
@ -106,7 +106,7 @@ async def register(user: UserRegisterDTO):
|
|
|
|
|
@app.post(
|
|
|
|
|
path="/login",
|
|
|
|
|
response_model=Token,
|
|
|
|
|
responses={401: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
|
|
|
|
|
user = users_collection.find_one({"username": form_data.username})
|
|
|
|
@ -124,7 +124,7 @@ async def login(form_data: OAuth2PasswordRequestForm = Depends()):
|
|
|
|
|
|
|
|
|
|
@app.get(
|
|
|
|
|
path="/logout",
|
|
|
|
|
responses={401: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def logout(current_user: User = Depends(get_current_user)):
|
|
|
|
|
# TODO: find usecase / what to do ??
|
|
|
|
@ -132,18 +132,18 @@ async def logout(current_user: User = Depends(get_current_user)):
|
|
|
|
|
|
|
|
|
|
@app.get(
|
|
|
|
|
path="/pin/{id}",
|
|
|
|
|
responses={401: {"model": Message}, 404: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}, 404: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def get_pin(id: str, current_user: User = Depends(get_current_user)):
|
|
|
|
|
pin = pins_collection.find_one({"_id": ObjectId(id)})
|
|
|
|
|
if pin is None:
|
|
|
|
|
raise HTTPException(status_code=404, detail="Pin not found")
|
|
|
|
|
|
|
|
|
|
return pin
|
|
|
|
|
return pin_serialize(pin)
|
|
|
|
|
|
|
|
|
|
@app.patch(
|
|
|
|
|
path="/pin/{id}",
|
|
|
|
|
responses={401: {"model": Message}, 404: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}, 404: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def update_pin(id: str, pin: Pin, current_user: User = Depends(get_current_user)):
|
|
|
|
|
result = pins_collection.update_one({"_id": ObjectId(id)}, {"$set": pin.model_dump()})
|
|
|
|
@ -154,7 +154,7 @@ async def update_pin(id: str, pin: Pin, current_user: User = Depends(get_current
|
|
|
|
|
|
|
|
|
|
@app.post(
|
|
|
|
|
path="/pin/add",
|
|
|
|
|
responses={401: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def add_pin(pin: Pin, current_user: User = Depends(get_current_user)):
|
|
|
|
|
pin_id = pins_collection.insert_one(pin.model_dump()).inserted_id
|
|
|
|
@ -162,7 +162,7 @@ async def add_pin(pin: Pin, current_user: User = Depends(get_current_user)):
|
|
|
|
|
|
|
|
|
|
@app.get(
|
|
|
|
|
path="/pins",
|
|
|
|
|
responses={401: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def list_pins(current_user: User = Depends(get_current_user)):
|
|
|
|
|
pins = pins_serialize(pins_collection.find().to_list())
|
|
|
|
@ -170,7 +170,7 @@ async def list_pins(current_user: User = Depends(get_current_user)):
|
|
|
|
|
|
|
|
|
|
@app.get(
|
|
|
|
|
path="/friend/{id}",
|
|
|
|
|
responses={401: {"model": Message}, 404: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}, 404: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def get_friend(id: str, current_user: User = Depends(get_current_user)):
|
|
|
|
|
friend = friends_collection.find_one({"_id": ObjectId(id)})
|
|
|
|
@ -181,7 +181,7 @@ async def get_friend(id: str, current_user: User = Depends(get_current_user)):
|
|
|
|
|
|
|
|
|
|
@app.post(
|
|
|
|
|
path="/friend/add",
|
|
|
|
|
responses={401: {"model": Message}, 409: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}, 409: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def add_friend(friendAdd: FriendAddDTO, current_user: User = Depends(get_current_user)):
|
|
|
|
|
# TODO: test if exists
|
|
|
|
@ -201,7 +201,7 @@ async def add_friend(friendAdd: FriendAddDTO, current_user: User = Depends(get_c
|
|
|
|
|
|
|
|
|
|
@app.delete(
|
|
|
|
|
path="/friend/{id}/delete",
|
|
|
|
|
responses={401: {"model": Message}, 404: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}, 404: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def delete_friend(id: str, current_user: User = Depends(get_current_user)):
|
|
|
|
|
result = friends_collection.delete_one({"_id": ObjectId(id)})
|
|
|
|
@ -212,7 +212,7 @@ async def delete_friend(id: str, current_user: User = Depends(get_current_user))
|
|
|
|
|
|
|
|
|
|
@app.patch(
|
|
|
|
|
path="/friend/{id}/accept",
|
|
|
|
|
responses={401: {"model": Message}, 404: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}, 404: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def accept_friend(id: str, current_user: User = Depends(get_current_user)):
|
|
|
|
|
result = friends_collection.update_one({"_id": ObjectId(id)}, {"$set": {"status": "accepted"}})
|
|
|
|
@ -223,7 +223,7 @@ async def accept_friend(id: str, current_user: User = Depends(get_current_user))
|
|
|
|
|
|
|
|
|
|
@app.post(
|
|
|
|
|
path="/friend/{id}/deny",
|
|
|
|
|
responses={401: {"model": Message}, 404: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}, 404: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def deny_friend(id: str, current_user: User = Depends(get_current_user)):
|
|
|
|
|
result = friends_collection.update_one({"_id": ObjectId(id)}, {"$set": {"status": "denied"}})
|
|
|
|
@ -235,14 +235,14 @@ async def deny_friend(id: str, current_user: User = Depends(get_current_user)):
|
|
|
|
|
@app.get(
|
|
|
|
|
path="/friends",
|
|
|
|
|
response_model=FriendListDTO,
|
|
|
|
|
responses={401: {"model": Message}}
|
|
|
|
|
responses={401: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def list_friends(current_user: User = Depends(get_current_user)):
|
|
|
|
|
return FriendListDTO(**friends_serialize(friends_collection.find({"user_id": current_user.uid}).to_list(), friends_collection.find({"friend_user_id": current_user.uid})))
|
|
|
|
|
return FriendListDTO(**friends_serialize(friends_collection.find({"user_id": current_user.uid}).to_list(), friends_collection.find({"friend_user_id": current_user.uid}).to_list()))
|
|
|
|
|
|
|
|
|
|
@app.get(
|
|
|
|
|
path="/users",
|
|
|
|
|
responses={401: {"model": Message}, 422: {"model": Message}},
|
|
|
|
|
responses={401: {"model": HTTPError}, 422: {"model": HTTPError}},
|
|
|
|
|
response_model=list[UserDTO]
|
|
|
|
|
)
|
|
|
|
|
async def search_users(name: str, current_user: User = Depends(get_current_user)):
|
|
|
|
|