|
|
|
@ -64,18 +64,23 @@ async def update_pin(id: str, pin: PinDTO, current_user: User = Depends(get_curr
|
|
|
|
|
existing_pin = pins_collection.find_one({"_id": ObjectId(id)})
|
|
|
|
|
check_pin_is_null(existing_pin)
|
|
|
|
|
|
|
|
|
|
# Vérifier si l'utilisateur a la permission de modifier le pin
|
|
|
|
|
if existing_pin["user_id"] != current_user.uid:
|
|
|
|
|
permission = pin_permissions_collection.find_one({
|
|
|
|
|
"pin_id": ObjectId(id),
|
|
|
|
|
"user_id": current_user.uid,
|
|
|
|
|
"can_edit": True
|
|
|
|
|
})
|
|
|
|
|
if not permission:
|
|
|
|
|
# Vérifier si le pin est un POI, si oui, il ne être modifié que si l'utilisateur est administrateur
|
|
|
|
|
if existing_pin["is_poi"]:
|
|
|
|
|
if not current_user.is_admin:
|
|
|
|
|
raise HTTPException(status_code=403, detail="You don't have permission to edit this pin")
|
|
|
|
|
|
|
|
|
|
# Ajouter l'ID de l'utilisateur au PinDTO
|
|
|
|
|
pin.user_id = current_user.uid
|
|
|
|
|
else:
|
|
|
|
|
# Vérifier si l'utilisateur a la permission de modifier le pin
|
|
|
|
|
if existing_pin["user_id"] != current_user.uid:
|
|
|
|
|
permission = pin_permissions_collection.find_one({
|
|
|
|
|
"pin_id": ObjectId(id),
|
|
|
|
|
"user_id": current_user.uid,
|
|
|
|
|
"can_edit": True
|
|
|
|
|
})
|
|
|
|
|
if not permission:
|
|
|
|
|
raise HTTPException(status_code=403, detail="You don't have permission to edit this pin")
|
|
|
|
|
|
|
|
|
|
# Ajouter l'ID de l'utilisateur au PinDTO
|
|
|
|
|
pin.user_id = current_user.uid
|
|
|
|
|
|
|
|
|
|
# Mettre à jour le pin
|
|
|
|
|
pins_collection.update_one({"_id": ObjectId(id)}, {"$set": pin.model_dump()})
|
|
|
|
@ -97,7 +102,9 @@ async def update_pin(id: str, pin: PinDTO, current_user: User = Depends(get_curr
|
|
|
|
|
responses={401: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def add_pin(pin: PinDTO, current_user: User = Depends(get_current_user)):
|
|
|
|
|
pin.user_id = current_user.uid
|
|
|
|
|
if not pin.is_poi:
|
|
|
|
|
pin.user_id = current_user.uid
|
|
|
|
|
|
|
|
|
|
pin_id = pins_collection.insert_one(pin.model_dump()).inserted_id
|
|
|
|
|
|
|
|
|
|
# Mettre à jour les images avec le pin_id
|
|
|
|
@ -113,18 +120,21 @@ async def add_pin(pin: PinDTO, current_user: User = Depends(get_current_user)):
|
|
|
|
|
path="s",
|
|
|
|
|
responses={401: {"model": HTTPError}}
|
|
|
|
|
)
|
|
|
|
|
async def list_pins(current_user: User = Depends(get_current_user)):
|
|
|
|
|
async def list_pins(current_user: User = Depends(get_current_user), poi: bool = False):
|
|
|
|
|
# Récupérer les IDs des pins partagés avec l'utilisateur
|
|
|
|
|
shared_pins = pin_permissions_collection.find({"user_id": current_user.uid})
|
|
|
|
|
shared_pin_ids = [permission["pin_id"] for permission in shared_pins]
|
|
|
|
|
|
|
|
|
|
# Récupérer tous les pins de l'utilisateur et les pins partagés avec lui
|
|
|
|
|
pins = pins_collection.find({
|
|
|
|
|
"$or": [
|
|
|
|
|
{"user_id": current_user.uid}, # Pins de l'utilisateur
|
|
|
|
|
{"_id": {"$in": shared_pin_ids}} # Pins partagés avec l'utilisateur
|
|
|
|
|
]
|
|
|
|
|
})
|
|
|
|
|
if poi:
|
|
|
|
|
pins = pins_collection.find({"is_poi": True})
|
|
|
|
|
else:
|
|
|
|
|
pins = pins_collection.find({
|
|
|
|
|
"$or": [
|
|
|
|
|
{"user_id": current_user.uid}, # Pins de l'utilisateur
|
|
|
|
|
{"_id": {"$in": shared_pin_ids}} # Pins partagés avec l'utilisateur
|
|
|
|
|
]
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return serializers.pins_serialize(pins.to_list())
|
|
|
|
|
|
|
|
|
@ -190,6 +200,14 @@ async def delete_pin(id: str, current_user: User = Depends(get_current_user)):
|
|
|
|
|
pin = pins_collection.find_one({"_id": ObjectId(id)})
|
|
|
|
|
check_pin_is_null(pin)
|
|
|
|
|
|
|
|
|
|
# Vérifier si le pin est un POI, si oui, il ne peut être supprimé que si l'utilisateur est administrateur
|
|
|
|
|
if pin["is_poi"]:
|
|
|
|
|
if not current_user.is_admin:
|
|
|
|
|
raise HTTPException(status_code=403, detail="You don't have permission to delete this pin")
|
|
|
|
|
else:
|
|
|
|
|
pins_collection.delete_one({"_id": ObjectId(id)})
|
|
|
|
|
return {"message": "POI deleted successfully"}
|
|
|
|
|
|
|
|
|
|
# Si l'utilisateur est le propriétaire, supprimer le pin et toutes ses permissions
|
|
|
|
|
if pin["user_id"] == current_user.uid:
|
|
|
|
|
pins_collection.delete_one({"_id": ObjectId(id)})
|
|
|
|
|