diff --git a/app/routes/friends.py b/app/routes/friends.py index a90adae..275a93f 100644 --- a/app/routes/friends.py +++ b/app/routes/friends.py @@ -1,4 +1,3 @@ - from bson import ObjectId import bson from fastapi import APIRouter, HTTPException, status @@ -20,6 +19,7 @@ db = client[config.MONGODB_DATABASE] friends_collection = db["friends"] users_collection = db["users"] +pin_permissions_collection = db["pin_permissions"] friends_router = APIRouter( prefix="/friend", @@ -78,13 +78,31 @@ async def add_friend(friend_to_add: FriendAddDTO, current_user: User = Depends(g ) async def delete_friend(id: str, current_user: User = Depends(get_current_user)): try: - result = friends_collection.delete_one({"_id": ObjectId(id)}) + # Récupérer l'ami avant de le supprimer pour avoir son ID + friend = friends_collection.find_one({"_id": ObjectId(id)}) + if friend is None: + friend_not_found() + + # Déterminer l'ID de l'autre utilisateur + other_user_id = friend["friend_user_id"] if friend["user_id"] == current_user.uid else friend["user_id"] + + # Supprimer l'ami + friends_collection.delete_one({"_id": ObjectId(id)}) + + # Supprimer toutes les permissions de partage de pins entre les deux utilisateurs + pin_permissions_collection.delete_many({ + "$or": [ + # Pins que l'utilisateur courant a partagés avec l'ami + {"user_id": other_user_id, "pin_id": {"$in": [pin["_id"] for pin in db["pins"].find({"user_id": current_user.uid})]}}, + # Pins que l'ami a partagés avec l'utilisateur courant + {"user_id": current_user.uid, "pin_id": {"$in": [pin["_id"] for pin in db["pins"].find({"user_id": other_user_id})]}} + ] + }) + + return {"message": "Friend and associated pin shares deleted"} + except bson.errors.InvalidId: objectid_misformatted() - - if result.deleted_count == 0: friend_not_found() - - return {"message": "Friend deleted"} @friends_router.patch( path="/{id}/accept",