From f00aaa77370a353f7fceda25d13c054ef828fa63 Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Tue, 13 May 2025 15:53:58 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Delete=20shared=20pins=20when=20?= =?UTF-8?q?deleting=20friend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/routes/friends.py | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) 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",