🐛 Delete shared pins when deleting friend
continuous-integration/drone/push Build is passing Details

nominatim_fix
Alix JEUDI--LEMOINE 4 weeks ago
parent 545a8da1f4
commit f00aaa7737

@ -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",

Loading…
Cancel
Save