Error al subir chat

Me tomó un tiempo investigar esto, pero creo que encontré la causa. Creo que tiene que ver con este código:

def fetch_uploads(params:, guardian:)
  return [] if !SiteSetting.chat_allow_uploads
  guardian.user.uploads.where(id: params.upload_ids) # Específicamente, aquí
end

Cuando se crea un nuevo mensaje de chat, se llama a esto para obtener las cargas adjuntas al mensaje. Posiblemente para garantizar la propiedad, el método recorre el usuario del Guardián para obtener las cargas, de modo que solo se permitan las cargas que pertenecen a ese usuario.

El problema es que las cargas se desduplican, como se ve aquí:

# ¿ya tenemos esa carga?
@upload = Upload.find_by(sha1: sha1)

# ...

# devuelve la carga anterior si la hay
if @upload
  add_metadata!
  UserUpload.find_or_create_by!(user_id: user_id, upload_id: @upload.id) if user_id
  return @upload
end

Creo que una posible solución sería recorrer los UserUpload en lugar de solo considerar las cargas que pertenecen al usuario. UserUpload vincula las cargas a varios usuarios, que parece ser lo que necesitamos. Aún no estoy 100% seguro de cómo hacerlo correctamente; ya es tarde, así que me iré a dormir, pero si nadie más lo soluciona, intentaré volver más tarde y trabajar en un PR. :slightly_smiling_face:

3 Me gusta