diff --git a/api/database/users.py b/api/database/users.py index 046d61a..b439961 100644 --- a/api/database/users.py +++ b/api/database/users.py @@ -4,7 +4,7 @@ from bson import ObjectId from fastapi import HTTPException from database.utils import user_helper, create_user_helper, system_user_helper -from .db import user_collection +from .db import user_collection, flight_collection from routes.utils import get_hashed_password from schemas.user import UserDisplaySchema, UserCreateSchema, UserSystemSchema, AuthLevel @@ -84,7 +84,7 @@ async def get_user_system_info(username: str) -> UserSystemSchema: async def delete_user(id: str) -> UserDisplaySchema: """ - Delete given user from the database + Delete given user and all associated flights from the database :param id: ID of user to delete :return: Information of deleted user @@ -95,6 +95,10 @@ async def delete_user(id: str) -> UserDisplaySchema: raise HTTPException(404, "User not found") await user_collection.delete_one({"_id": ObjectId(id)}) + + # Delete all flights associated with user + await flight_collection.delete_many({"user": ObjectId(id)}) + return UserDisplaySchema(**user_helper(user)) diff --git a/api/routes/flights.py b/api/routes/flights.py index 5c60c2c..8ac71f2 100644 --- a/api/routes/flights.py +++ b/api/routes/flights.py @@ -13,7 +13,8 @@ router = APIRouter() logger = logging.getLogger("flights") -@router.get('/', summary="Get flights logged by the currently logged-in user", status_code=200) +@router.get('/', summary="Get flights logged by the currently logged-in user", status_code=200, + response_model=list[FlightConciseSchema]) async def get_flights(user: UserDisplaySchema = Depends(get_current_user)) -> list[FlightConciseSchema]: """ Get a list of the flights logged by the currently logged-in user @@ -26,7 +27,7 @@ async def get_flights(user: UserDisplaySchema = Depends(get_current_user)) -> li @router.get('/all', summary="Get all flights logged by all users", status_code=200, - dependencies=[Depends(admin_required)]) + dependencies=[Depends(admin_required)], response_model=list[FlightConciseSchema]) async def get_all_flights() -> list[FlightConciseSchema]: """ Get a list of all flights logged by any user @@ -39,7 +40,7 @@ async def get_all_flights() -> list[FlightConciseSchema]: @router.get('/{flight_id}', summary="Get details of a given flight", response_model=FlightDisplaySchema, status_code=200) -async def get_flight(flight_id: str, user: UserDisplaySchema = Depends(get_current_user)): +async def get_flight(flight_id: str, user: UserDisplaySchema = Depends(get_current_user)) -> FlightDisplaySchema: """ Get all details of a given flight @@ -56,7 +57,7 @@ async def get_flight(flight_id: str, user: UserDisplaySchema = Depends(get_curre @router.post('/', summary="Add a flight logbook entry", status_code=200) -async def add_flight(flight_body: FlightCreateSchema, user: UserDisplaySchema = Depends(get_current_user)): +async def add_flight(flight_body: FlightCreateSchema, user: UserDisplaySchema = Depends(get_current_user)) -> dict: """ Add a flight logbook entry @@ -89,13 +90,13 @@ async def update_flight(flight_id: str, flight_body: FlightCreateSchema, logger.info("Attempted access to unauthorized flight by %s", user.username) raise HTTPException(403, "Unauthorized access") - updated_flight = await db.update_flight(flight_body, flight_id) + updated_flight_id = await db.update_flight(flight_body, flight_id) - return str(updated_flight) + return str(updated_flight_id) -@router.delete('/{flight_id}', summary="Delete the given flight", status_code=200) -async def delete_flight(flight_id: str, user: UserDisplaySchema = Depends(get_current_user)): +@router.delete('/{flight_id}', summary="Delete the given flight", status_code=200, response_model=FlightDisplaySchema) +async def delete_flight(flight_id: str, user: UserDisplaySchema = Depends(get_current_user)) -> FlightDisplaySchema: """ Delete the given flight diff --git a/api/routes/users.py b/api/routes/users.py index 1d944d5..51e722f 100644 --- a/api/routes/users.py +++ b/api/routes/users.py @@ -41,7 +41,7 @@ async def add_user(body: UserCreateSchema) -> dict: @router.delete('/{user_id}', summary="Delete given user and all associated flights", status_code=200, dependencies=[Depends(admin_required)]) -async def remove_user(user_id: str) -> None: +async def remove_user(user_id: str) -> UserDisplaySchema: """ Delete given user from database along with all flights associated with said user @@ -54,12 +54,8 @@ async def remove_user(user_id: str) -> None: if not deleted: logger.info("Attempt to delete nonexistent user %s", user_id) raise HTTPException(401, "User does not exist") - # except ValidationError: - # logger.debug("Invalid user delete request") - # raise HTTPException(400, "Invalid user") - # Delete all flights associated with the user TODO - # Flight.objects(user=user_id).delete() + return deleted @router.get('/', summary="Get a list of all users", status_code=200, response_model=list[UserDisplaySchema],