# Error reportado por Jhonny ## [Evidencia](https://www.loom.com/share/61eaf2c95f904eb8ab32e201da7f3481) ## Logs - Error que aparece en la api de beta: ``` 2021-01-06T13:14:40.390Z error: /actionHandler error: TypeError: Cannot read property 'rejectionDate' of null at _loop2$ (/app/queries.js:2856:9) at tryCatch (/app/node_modules/regenerator-runtime/runtime.js:45:40) at Generator.invoke [as _invoke] (/app/node_modules/regenerator-runtime/runtime.js:271:22) at Generator.prototype.<computed> [as next] (/app/node_modules/regenerator-runtime/runtime.js:97:21) at tryCatch (/app/node_modules/regenerator-runtime/runtime.js:45:40) at maybeInvokeDelegate (/app/node_modules/regenerator-runtime/runtime.js:334:18) at Generator.invoke [as _invoke] (/app/node_modules/regenerator-runtime/runtime.js:245:32) at Generator.prototype.<computed> [as next] (/app/node_modules/regenerator-runtime/runtime.js:97:21) at asyncGeneratorStep (/app/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:24) at _next (/app/node_modules/@babel/runtime/helpers/asyncToGenerator.js:25:9) { [stack]: "TypeError: Cannot read property 'rejectionDate' of null\n" + ' at _loop2$ (/app/queries.js:2856:9)\n' + ' at tryCatch (/app/node_modules/regenerator-runtime/runtime.js:45:40)\n' + ' at Generator.invoke [as _invoke] (/app/node_modules/regenerator-runtime/runtime.js:271:22)\n' + ' at Generator.prototype.<computed> [as next] (/app/node_modules/regenerator-runtime/runtime.js:97:21)\n' + ' at tryCatch (/app/node_modules/regenerator-runtime/runtime.js:45:40)\n' + ' at maybeInvokeDelegate (/app/node_modules/regenerator-runtime/runtime.js:334:18)\n' + ' at Generator.invoke [as _invoke] (/app/node_modules/regenerator-runtime/runtime.js:245:32)\n' + ' at Generator.prototype.<computed> [as next] (/app/node_modules/regenerator-runtime/runtime.js:97:21)\n' + ' at asyncGeneratorStep (/app/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:24)\n' + ' at _next (/app/node_modules/@babel/runtime/helpers/asyncToGenerator.js:25:9)', [message]: "Cannot read property 'rejectionDate' of null" } ``` - Traducción: - El error se ejecuta con la acción **agenda/GET_CLARIFICATION_MEETING_DETAILS** - En la función getDocs, la acción GET_CLARIFICATION_MEETING_DETAILS ejecuta la query **queries.getUserMeetingProposals** - El error se genera en la query getUserMeetingProposals definida en queries.js en la **línea 2856** - El error se debe a que una query, dentro de la nombrada, llama a un pedido esperando que este le devuelva, entre otros datos, el rejectionDate, pero ese pedido solamente devuelve null - ¿Qué pedido está buscando? -> el pedido lo saca desde meeting.requestId, donde meeting es una reunión de un conjunto de reuniones (meetingsWithProposalsCreatedByUser, meetingsWithProposalsSentToUser) - El pedido que genera el error tiene como id `b9baadea-6074-4520-b376-466684d9ad1b` que efectivamente no existe en la BD. - El id del pedido se saca de el evento `b750aa6c-93d3-4a7f-a41e-1e80ed89b824` que en la BD tiene: ``` Evento: { "confirmedAt": null , "createdAt": 1599487394016 , "dateLimit": null , "dateLimitBeforeConfirmation": null , "duration": null , "end": null , "id": "b750aa6c-93d3-4a7f-a41e-1e80ed89b824" , "link": null , "originalDateLimit": null , "outboxAndInboxAtProposalTime": { "inboxNotSeen": true , "outboxNotSeen": false , "pendingDateLimitApproval": false } , "proposalCreatedBy": "7b6b2a92-5d36-46a5-8ca9-aba1adb96c65" , "proposals": [ { "end": "2020-09-08T04:00" , "id": "627e5128-c1fc-4275-aced-0650872a4443" , "start": "2020-09-08T03:30" } ] , "requestId": "b9baadea-6074-4520-b376-466684d9ad1b" , "selectedDuration": 30 , "start": null , "state": { "498259e5-9c18-4b6b-b156-e09d936a816e": "invited" , "7b6b2a92-5d36-46a5-8ca9-aba1adb96c65": "proposal" } , "title": "Cambio en el disenio de enviados " } ``` - El error da entonces debido a que existe un evento asociado a un pedido que no existe. - **Hipótesis: Jhonny creo una propuesta de reunión de un pedido con Santiago, luego se eliminó a santiago, pero no se eliminó esa propuesta. Después, cuando jhonny quiere abrir las propuestas de un nuevo pedido, el sistema llama a todas las reuniones para mostrarlas, pero como no encuentra su pedido genera error.** - **Realidad: ** - Corroborar la hipotesis: - Si elimino el evento problemático ya no aparece el bug. - - **Falta reproducir la hipótesis para corroborar el error** - El pedido fue realizado entre jhonny y santi - **Bug: La acción eliminar usuarios elimina los pedidos del usuario, pero sus eventos no. Por lo que si un usuario tenía eventos en un pedido, pero se elimina la contraparte, ese pedido se elimina pero no esa reunión ** ## Fix - Que pedidos se eliminan al eliminar un usuario - Todos los pedidos aprobados (docs key approvedRequests) ``` const approvedRequests = await queries.filterTable({ table: 'approvedRequests', toFilter: {} }) ``` - Los pedidos que ya fueron transformados en compromisos (docs key request) ``` const requests = await queries.getRequestsWithCommitmentStatus({ userId: userToDelete, pluck: [ 'clarifications', 'commitmentId', 'contextAudio', 'id', 'isDraft', 'oldId', 'requestedBy', 'requestedUser' ] }) // Excludes the requests that will not be deleted let oldIds = [] requests.forEach(r => { if (r.isDraft || r.commitmentStatus === 'approved') { r.oldId && oldIds.push(r.oldId) delete docs.request[r.id] } else { delete r.isDraft delete r.commitmentStatus } }) // Excludes old requests referenced by requests that will not be deleted while (oldIds.length) { const oldOldIds = [] oldIds.forEach(id => { const r = docs.request[id] if (r && r.oldId) { oldOldIds.push(r.oldId) delete docs.request[r.oldId] } }) oldIds = oldOldIds } ``` - Bug segun descripción de anibal: Los pedidos creados y enviados a borradores y los que ya están en borradores no están creando los eventos. - Bug: La query que se supone define como null el atributo requestedUser de los pedidos pedidos al usuario a eliminar no utiliza el campo correcto para buscar. usa requestedUser en vez de requestedUsersDraft, por lo que los pedidos siguen manteniendo al usuario eliminado como responsable del pedido. A pesar de lo anterior esto no genera errores, ya que por un lado, no se puede actualmente definir reuniones en pedidos de borradores y por otro, los pedidos de borradores no se eliminan al eliminar el usuario. ---- ``` curl -X POST -H "Content-Type: application/json" -H "Authorization:fe04ebef-f45d-4ec6-b615-02a6c70ba7c2" -d '{ "type": "collaborators/DELETE_USER", "payload":{ "id":"acc5611d-8774-4ab6-ac73-2ff3f7c9d91e" }, "lastUpdate":"9839388", "localActionId": "9d754g4c-81bd-4c10-a266-cbc1aeb1ad43", "appVersion":"0.18.163"}' "localhost:2708/api/handleAction" ```