From 30b260ce8028759224b7716f8cf9276568019fe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=A1ssyla=20Lissa=20Lima?= Date: Sat, 24 Aug 2024 22:45:46 -0300 Subject: [PATCH 1/2] feat: update with all fields optional --- docs/insomnia.json | 2 +- src/modules/users/dtos/IUpdateUserDTO.ts | 13 +++-- .../infra/http/controller/UsersController.ts | 12 +++-- .../users/infra/prisma/entities/users.prisma | 3 ++ .../users/services/UpdateUserService.ts | 53 ++++++++++++++----- .../migration.sql | 4 ++ src/shared/infra/prisma/schema.prisma | 3 ++ 7 files changed, 67 insertions(+), 23 deletions(-) create mode 100644 src/shared/infra/prisma/migrations/20240824231846_extra_user_fields/migration.sql diff --git a/docs/insomnia.json b/docs/insomnia.json index 6a0b3da..205f9ee 100644 --- a/docs/insomnia.json +++ b/docs/insomnia.json @@ -1 +1 @@ -{"_type":"export","__export_format":4,"__export_date":"2024-08-09T22:43:31.573Z","__export_source":"insomnia.desktop.app:v9.3.3","resources":[{"_id":"req_ac5efcbcc43446a7a2af8dfc026fe259","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1723242971012,"created":1720734439191,"url":"{{ _.url_base }}sessions/login","name":"Login","description":"\n# Login\n\n\n```response\n{\n\t\"user\": {\n\t\t\"id\": \"2fe68da1-6989-4020-b4ff-504ec9bc8a61\",\n\t\t\"name\": \"João da Silva\",\n\t\t\"email\": \"joao@gmail.com\",\n\t\t\"password\": \"###\",\n\t\t\"language\": \"Português - BR\",\n\t\t\"created_at\": \"2024-07-08T21:25:48.205Z\",\n\t\t\"updated_at\": \"2024-07-08T21:25:48.205Z\"\n\t},\n\t\"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MjA3MzQ4NjEsImV4cCI6MTcyMDgyMTI2MSwic3ViIjoiMDZlOWY2MTAtY2EzYy00OTg0LWE2NmMtNWJjM2E3Yjg3NmMwIn0.6ZP1oUEiOGHYm8AXMP7Z7HEhegizMyl3fsBi-6ytQ0o\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"email\": \"tas@gmail.com\",\n\t\"password\": \"teste123\",\n\t\"rememberMe\": false\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720734439191,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_cdbcab721a304ffdae1f21819ac74eeb","parentId":null,"modified":1720468632621,"created":1720468632621,"name":"Apogeo","description":"","scope":"collection","_type":"workspace"},{"_id":"req_3dfe86d8171243b4a4fc824ad31189d3","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1720734722388,"created":1720468661821,"url":"{{ _.url_base }}teste","name":"Teste","description":"\n# Teste\n\n\n```response\n{\n\t\"message\": \"Hello World\"\n}\n\n```","method":"GET","body":{},"parameters":[],"headers":[{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731119220,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_f1e4c8d47a734273988feede6a668d0f","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1723243291552,"created":1720468644814,"url":"{{ _.url_base }}user/register","name":"Create User","description":"\n# Create User\n\n\n```response\n{\n\t\"id\": \"bb1ffa48-9cd0-431f-b7fb-9b795d5ec162\",\n\t\"name\": \"Ms. Karla Pacocha\",\n\t\"email\": \"joao@gmail.com\",\n\t\"language\": \"Portugues-Br\",\n\t\"phone\": \"1234-5678\",\n\t\"created_at\": \"2024-08-09T22:21:52.623Z\",\n\t\"updated_at\": \"2024-08-09T22:21:52.623Z\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"{% faker 'randomFullName' %}\",\n\t\"email\": \"tas@gmail.com\",\n\t\"password\": \"teste123\",\n\t\"language\": \"{% faker 'randomCountry' %}\",\n\t\"phone\": \"1234-5678\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731133898,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"fld_bfb729790f5e427eb86d8c68b4a7365a","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1720731119120,"created":1720731119120,"name":"User","description":"","environment":{},"environmentPropertyOrder":null,"metaSortKey":-1720731119120,"_type":"request_group"},{"_id":"req_c5376807b9e44533b496fa43a9ae000b","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1723243299132,"created":1720733953102,"url":"{{ _.url_base }}user/update","name":"Update User","description":"\n# Update User\n\n\n```response\n{\n\t\"id\": \"bb1ffa48-9cd0-431f-b7fb-9b795d5ec162\",\n\t\"name\": \"Ms. Karla Pacocha\",\n\t\"email\": \"joao@gmail.com\",\n\t\"language\": \"Portugues-Br\",\n\t\"phone\": \"1234-5678\",\n\t\"created_at\": \"2024-08-09T22:21:52.623Z\",\n\t\"updated_at\": \"2024-08-09T22:21:52.623Z\"\n}\n\n```","method":"PATCH","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"{% faker 'randomFullName' %}\",\n\t\"email\": \"lala\",\n\t\"password\": \"{% faker 'randomPassword' %}\",\n\t\"language\": \"{% faker 'randomCountry' %}\",\n\t\"phone\": \"4321-5678\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{"type":"bearer","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MjMyNDI5NzIsImV4cCI6MTcyMzMyOTM3Miwic3ViIjoiYmIxZmZhNDgtOWNkMC00MzFmLWI3ZmItOWI3OTVkNWVjMTYyIn0.uqC2X-kcMMJI6wSmIAo0AMd4rOiQ_GDt6-EVHzQfhCM"},"metaSortKey":-1720731130228.5,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_a929a985d81645ab807be929a0d63b9e","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1723243325816,"created":1720733970356,"url":"{{ _.url_base }}user/readAll","name":"Read All Users","description":"\n# Read All Users\n\n\n```response\n[\n\t{\n\t\t\"id\": \"2dc4638e-b7a7-4585-96a1-cc9d15fb6c0e\",\n\t\t\"name\": \"Ellis King\",\n\t\t\"email\": \"phoebe4@yahoo.com\",\n\t\t\"language\": \"Trinidad and Tobago\",\n\t\t\"phone\": \"4321-5678\",\n\t\t\"created_at\": \"2024-07-11T22:17:57.591Z\",\n\t\t\"updated_at\": \"2024-07-11T22:17:57.591Z\"\n\t},\n\t{\n\t\t\"id\": \"1f23572d-9e4d-45d2-9e43-c10673830cec\",\n\t\t\"name\": \"Cindy Klocko\",\n\t\t\"email\": \"tatitassyla@gmail.com\",\n\t\t\"language\": \"Norway\",\n\t\t\"phone\": \"1234-5678\",\n\t\t\"created_at\": \"2024-07-24T23:23:33.868Z\",\n\t\t\"updated_at\": \"2024-07-24T23:23:33.866Z\"\n\t},\n\t{\n\t\t\"id\": \"fb5edc8e-93bd-4dff-a4a0-205e067d899e\",\n\t\t\"name\": \"David Kuhn\",\n\t\t\"email\": \"t@gmail.com\",\n\t\t\"language\": \"Guadeloupe\",\n\t\t\"phone\": \"1234-5678\",\n\t\t\"created_at\": \"2024-08-05T23:26:49.507Z\",\n\t\t\"updated_at\": \"2024-08-05T23:26:49.506Z\"\n\t}\n]\n\n\n```","method":"GET","body":{"mimeType":"application/json","text":""},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731121054.75,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_692babb9d2d74e5c949a5ca2df76aa9b","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1723243340954,"created":1720733989844,"url":"{{ _.url_base }}user/read","name":"Read User By Id","description":"\n# Read User By Id\n\n\n```response\n{\n\t\"id\": \"bb1ffa48-9cd0-431f-b7fb-9b795d5ec162\",\n\t\"name\": \"Ms. Karla Pacocha\",\n\t\"email\": \"joao@gmail.com\",\n\t\"language\": \"Portugues-Br\",\n\t\"phone\": \"1234-5678\",\n\t\"created_at\": \"2024-08-09T22:21:52.623Z\",\n\t\"updated_at\": \"2024-08-09T22:21:52.623Z\"\n}\n\n```","method":"GET","body":{"mimeType":"application/json","text":""},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{"type":"bearer","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MjMyNDI5NzIsImV4cCI6MTcyMzMyOTM3Miwic3ViIjoiYmIxZmZhNDgtOWNkMC00MzFmLWI3ZmItOWI3OTVkNWVjMTYyIn0.uqC2X-kcMMJI6wSmIAo0AMd4rOiQ_GDt6-EVHzQfhCM"},"metaSortKey":-1720731120137.375,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_85a45d93d3504544b16ae1eae33f12b8","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1723243348321,"created":1720733915287,"url":"{{ _.url_base }}user/delete","name":"Delete User","description":"\n# Delete User\n\n\n```response\n{\n\t\"id\": \"bb1ffa48-9cd0-431f-b7fb-9b795d5ec162\",\n\t\"name\": \"Ms. Karla Pacocha\",\n\t\"email\": \"joao@gmail.com\",\n\t\"language\": \"Portugues-Br\",\n\t\"phone\": \"1234-5678\",\n\t\"created_at\": \"2024-08-09T22:21:52.623Z\",\n\t\"updated_at\": \"2024-08-09T22:21:52.623Z\"\n}\n\n```","method":"DELETE","body":{"mimeType":"application/json","text":""},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{"type":"bearer","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MjMyNDI5NzIsImV4cCI6MTcyMzMyOTM3Miwic3ViIjoiYmIxZmZhNDgtOWNkMC00MzFmLWI3ZmItOWI3OTVkNWVjMTYyIn0.uqC2X-kcMMJI6wSmIAo0AMd4rOiQ_GDt6-EVHzQfhCM"},"metaSortKey":-1720731120037.375,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_299f10d1b8144d89aa4459a1338174e5","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1722036870308,"created":1721863249217,"url":"{{ _.url_base }}user/send-pin","name":"Send Pin To Email","description":"\n# Send Pin To Email\n\n\n```response\n{\n\t\"id\": \"1f23572d-9e4d-45d2-9e43-c10673830cec\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"email\": \"tatitassyla@gmail.com\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731119937.375,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_fd57174533f74ce89a1b4cab2d5d8436","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1722132352189,"created":1721948016798,"url":"{{ _.url_base }}user/verify-pin/7b529392-4a9f-4a25-99cc-ab248b2c4cb2","name":"Verify Pin","description":"\n# Verify Pin\n\n\n```response\n{\n\t\"id\": \"1f23572d-9e4d-45d2-9e43-c10673830cec\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"pin\": \"2829\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731119837.375,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_1e8cc8dfb8a543c691ad5025a2b54f15","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1722132376128,"created":1722036505289,"url":"{{ _.url_base }}user/reset-password/7b529392-4a9f-4a25-99cc-ab248b2c4cb2","name":"Reset Password","description":"\n# Reset Password\n\n\n```response\n{\n\t\"id\": \"1f23572d-9e4d-45d2-9e43-c10673830cec\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"pin\": \"2829\",\n\t\"password\": \"aloalo\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731119528.6875,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_f4cd0ea340206e90007e70fa1fd9a44c47a97451","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1722128083872,"created":1720468632625,"name":"Deploy","data":{"url_base":"https://apogeo.polijrinternal.com/"},"dataPropertyOrder":{"&":["url_base"]},"color":null,"isPrivate":false,"metaSortKey":1720468632625,"_type":"environment"},{"_id":"jar_f4cd0ea340206e90007e70fa1fd9a44c47a97451","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1720468632628,"created":1720468632628,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"env_763d4620ef084290bf0eb33aa764aa16","parentId":"env_f4cd0ea340206e90007e70fa1fd9a44c47a97451","modified":1722128078532,"created":1722128023628,"name":"Local","data":{"url_base":"http://localhost:3333/"},"dataPropertyOrder":{"&":["url_base"]},"color":null,"isPrivate":false,"metaSortKey":1722128023628,"_type":"environment"}]} \ No newline at end of file +{"_type":"export","__export_format":4,"__export_date":"2024-08-25T00:29:04.142Z","__export_source":"insomnia.desktop.app:v9.3.3","resources":[{"_id":"req_ac5efcbcc43446a7a2af8dfc026fe259","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1723243876433,"created":1720734439191,"url":"{{ _.url_base }}sessions/login","name":"Login","description":"\n# Login\n\n\n```response\n{\n\t\"user\": {\n\t\t\"id\": \"2fe68da1-6989-4020-b4ff-504ec9bc8a61\",\n\t\t\"name\": \"João da Silva\",\n\t\t\"email\": \"joao@gmail.com\",\n\t\t\"password\": \"###\",\n\t\t\"language\": \"Português - BR\",\n\t\t\"created_at\": \"2024-07-08T21:25:48.205Z\",\n\t\t\"updated_at\": \"2024-07-08T21:25:48.205Z\"\n\t},\n\t\"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MjA3MzQ4NjEsImV4cCI6MTcyMDgyMTI2MSwic3ViIjoiMDZlOWY2MTAtY2EzYy00OTg0LWE2NmMtNWJjM2E3Yjg3NmMwIn0.6ZP1oUEiOGHYm8AXMP7Z7HEhegizMyl3fsBi-6ytQ0o\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"email\": \"tas@gmail.com\",\n\t\"password\": \"teste123\",\n\t\"rememberMe\": false\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720734439191,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_cdbcab721a304ffdae1f21819ac74eeb","parentId":null,"modified":1720468632621,"created":1720468632621,"name":"Apogeo","description":"","scope":"collection","_type":"workspace"},{"_id":"req_3dfe86d8171243b4a4fc824ad31189d3","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1720734722388,"created":1720468661821,"url":"{{ _.url_base }}teste","name":"Teste","description":"\n# Teste\n\n\n```response\n{\n\t\"message\": \"Hello World\"\n}\n\n```","method":"GET","body":{},"parameters":[],"headers":[{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731119220,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_f1e4c8d47a734273988feede6a668d0f","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1724545432309,"created":1720468644814,"url":"{{ _.url_base }}user/register","name":"Create User","description":"\n# Create User\n\n\n```response\n{\n\t\"id\": \"bb1ffa48-9cd0-431f-b7fb-9b795d5ec162\",\n\t\"name\": \"Ms. Karla Pacocha\",\n\t\"email\": \"joao@gmail.com\",\n\t\"language\": \"Portugues-Br\",\n\t\"phone\": \"1234-5678\",\n\t\"created_at\": \"2024-08-09T22:21:52.623Z\",\n\t\"updated_at\": \"2024-08-09T22:21:52.623Z\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"{% faker 'randomFullName' %}\",\n\t\"email\": \"tassy@gmail.com\",\n\t\"password\": \"teste123\",\n\t\"language\": \"{% faker 'randomCountry' %}\",\n\t\"phone\": \"1234-5678\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731133898,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"fld_bfb729790f5e427eb86d8c68b4a7365a","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1720731119120,"created":1720731119120,"name":"User","description":"","environment":{},"environmentPropertyOrder":null,"metaSortKey":-1720731119120,"_type":"request_group"},{"_id":"req_c5376807b9e44533b496fa43a9ae000b","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1724545409604,"created":1720733953102,"url":"{{ _.url_base }}user/update","name":"Update User","description":"\n# Update User\n\n\n```response\n{\n\t\"id\": \"bb1ffa48-9cd0-431f-b7fb-9b795d5ec162\",\n\t\"name\": \"Ms. Karla Pacocha\",\n\t\"email\": \"joao@gmail.com\",\n\t\"language\": \"Portugues-Br\",\n\t\"phone\": \"1234-5678\",\n\t\"created_at\": \"2024-08-09T22:21:52.623Z\",\n\t\"updated_at\": \"2024-08-09T22:21:52.623Z\"\n}\n\n```","method":"PATCH","body":{"mimeType":"application/json","text":"{\n\t\"name\": \"{% faker 'randomFullName' %}\",\n\t\"email\": \"teste@gmail.com\",\n\t\"password\": \"teste123\",\n\t\"language\": \"{% faker 'randomCountry' %}\",\n\t\"phone\": \"1234-5678\",\n\t\"image\": \"image\",\n\t\"gender\": \"female\",\n\t\"birthdate\": \"2000-08-24T00:00:00Z\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{"type":"bearer","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MjQ1NDE3NTEsImV4cCI6MTcyNDYyODE1MSwic3ViIjoiZDhjMzc3OTMtYmNiZC00ODgyLWIyZmUtOWRlMjFjZjAyZGViIn0._BNr_vle63RyOYIKiyGDT4Z77NNEG5huY0Bec7NrVAc"},"metaSortKey":-1720731130228.5,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_a929a985d81645ab807be929a0d63b9e","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1723243325816,"created":1720733970356,"url":"{{ _.url_base }}user/readAll","name":"Read All Users","description":"\n# Read All Users\n\n\n```response\n[\n\t{\n\t\t\"id\": \"2dc4638e-b7a7-4585-96a1-cc9d15fb6c0e\",\n\t\t\"name\": \"Ellis King\",\n\t\t\"email\": \"phoebe4@yahoo.com\",\n\t\t\"language\": \"Trinidad and Tobago\",\n\t\t\"phone\": \"4321-5678\",\n\t\t\"created_at\": \"2024-07-11T22:17:57.591Z\",\n\t\t\"updated_at\": \"2024-07-11T22:17:57.591Z\"\n\t},\n\t{\n\t\t\"id\": \"1f23572d-9e4d-45d2-9e43-c10673830cec\",\n\t\t\"name\": \"Cindy Klocko\",\n\t\t\"email\": \"tatitassyla@gmail.com\",\n\t\t\"language\": \"Norway\",\n\t\t\"phone\": \"1234-5678\",\n\t\t\"created_at\": \"2024-07-24T23:23:33.868Z\",\n\t\t\"updated_at\": \"2024-07-24T23:23:33.866Z\"\n\t},\n\t{\n\t\t\"id\": \"fb5edc8e-93bd-4dff-a4a0-205e067d899e\",\n\t\t\"name\": \"David Kuhn\",\n\t\t\"email\": \"t@gmail.com\",\n\t\t\"language\": \"Guadeloupe\",\n\t\t\"phone\": \"1234-5678\",\n\t\t\"created_at\": \"2024-08-05T23:26:49.507Z\",\n\t\t\"updated_at\": \"2024-08-05T23:26:49.506Z\"\n\t}\n]\n\n\n```","method":"GET","body":{"mimeType":"application/json","text":""},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731121054.75,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_692babb9d2d74e5c949a5ca2df76aa9b","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1723243340954,"created":1720733989844,"url":"{{ _.url_base }}user/read","name":"Read User By Id","description":"\n# Read User By Id\n\n\n```response\n{\n\t\"id\": \"bb1ffa48-9cd0-431f-b7fb-9b795d5ec162\",\n\t\"name\": \"Ms. Karla Pacocha\",\n\t\"email\": \"joao@gmail.com\",\n\t\"language\": \"Portugues-Br\",\n\t\"phone\": \"1234-5678\",\n\t\"created_at\": \"2024-08-09T22:21:52.623Z\",\n\t\"updated_at\": \"2024-08-09T22:21:52.623Z\"\n}\n\n```","method":"GET","body":{"mimeType":"application/json","text":""},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{"type":"bearer","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MjMyNDI5NzIsImV4cCI6MTcyMzMyOTM3Miwic3ViIjoiYmIxZmZhNDgtOWNkMC00MzFmLWI3ZmItOWI3OTVkNWVjMTYyIn0.uqC2X-kcMMJI6wSmIAo0AMd4rOiQ_GDt6-EVHzQfhCM"},"metaSortKey":-1720731120137.375,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_85a45d93d3504544b16ae1eae33f12b8","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1723243348321,"created":1720733915287,"url":"{{ _.url_base }}user/delete","name":"Delete User","description":"\n# Delete User\n\n\n```response\n{\n\t\"id\": \"bb1ffa48-9cd0-431f-b7fb-9b795d5ec162\",\n\t\"name\": \"Ms. Karla Pacocha\",\n\t\"email\": \"joao@gmail.com\",\n\t\"language\": \"Portugues-Br\",\n\t\"phone\": \"1234-5678\",\n\t\"created_at\": \"2024-08-09T22:21:52.623Z\",\n\t\"updated_at\": \"2024-08-09T22:21:52.623Z\"\n}\n\n```","method":"DELETE","body":{"mimeType":"application/json","text":""},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{"type":"bearer","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MjMyNDI5NzIsImV4cCI6MTcyMzMyOTM3Miwic3ViIjoiYmIxZmZhNDgtOWNkMC00MzFmLWI3ZmItOWI3OTVkNWVjMTYyIn0.uqC2X-kcMMJI6wSmIAo0AMd4rOiQ_GDt6-EVHzQfhCM"},"metaSortKey":-1720731120037.375,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_299f10d1b8144d89aa4459a1338174e5","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1722036870308,"created":1721863249217,"url":"{{ _.url_base }}user/send-pin","name":"Send Pin To Email","description":"\n# Send Pin To Email\n\n\n```response\n{\n\t\"id\": \"1f23572d-9e4d-45d2-9e43-c10673830cec\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"email\": \"tatitassyla@gmail.com\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731119937.375,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_fd57174533f74ce89a1b4cab2d5d8436","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1722132352189,"created":1721948016798,"url":"{{ _.url_base }}user/verify-pin/7b529392-4a9f-4a25-99cc-ab248b2c4cb2","name":"Verify Pin","description":"\n# Verify Pin\n\n\n```response\n{\n\t\"id\": \"1f23572d-9e4d-45d2-9e43-c10673830cec\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"pin\": \"2829\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731119837.375,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_1e8cc8dfb8a543c691ad5025a2b54f15","parentId":"fld_bfb729790f5e427eb86d8c68b4a7365a","modified":1722132376128,"created":1722036505289,"url":"{{ _.url_base }}user/reset-password/7b529392-4a9f-4a25-99cc-ab248b2c4cb2","name":"Reset Password","description":"\n# Reset Password\n\n\n```response\n{\n\t\"id\": \"1f23572d-9e4d-45d2-9e43-c10673830cec\"\n}\n\n```","method":"POST","body":{"mimeType":"application/json","text":"{\n\t\"pin\": \"2829\",\n\t\"password\": \"aloalo\"\n}"},"parameters":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"User-Agent","value":"insomnia/9.3.2"}],"authentication":{},"metaSortKey":-1720731119528.6875,"isPrivate":false,"pathParameters":[],"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_f4cd0ea340206e90007e70fa1fd9a44c47a97451","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1722128083872,"created":1720468632625,"name":"Deploy","data":{"url_base":"https://apogeo.polijrinternal.com/"},"dataPropertyOrder":{"&":["url_base"]},"color":null,"isPrivate":false,"metaSortKey":1720468632625,"_type":"environment"},{"_id":"jar_f4cd0ea340206e90007e70fa1fd9a44c47a97451","parentId":"wrk_cdbcab721a304ffdae1f21819ac74eeb","modified":1720468632628,"created":1720468632628,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"env_763d4620ef084290bf0eb33aa764aa16","parentId":"env_f4cd0ea340206e90007e70fa1fd9a44c47a97451","modified":1722128078532,"created":1722128023628,"name":"Local","data":{"url_base":"http://localhost:3333/"},"dataPropertyOrder":{"&":["url_base"]},"color":null,"isPrivate":false,"metaSortKey":1722128023628,"_type":"environment"}]} \ No newline at end of file diff --git a/src/modules/users/dtos/IUpdateUserDTO.ts b/src/modules/users/dtos/IUpdateUserDTO.ts index cc777a9..b4d8a47 100644 --- a/src/modules/users/dtos/IUpdateUserDTO.ts +++ b/src/modules/users/dtos/IUpdateUserDTO.ts @@ -1,9 +1,12 @@ interface IUpdateUserDTO { - name: string; - email: string; - password: string; - language: string; - phone: string; + name?: string; + email?: string; + password?: string; + language?: string; + phone?: string; + image?: string; + gender?: string; + birthdate?: Date; } export default IUpdateUserDTO; diff --git a/src/modules/users/infra/http/controller/UsersController.ts b/src/modules/users/infra/http/controller/UsersController.ts index da59074..0dc5901 100644 --- a/src/modules/users/infra/http/controller/UsersController.ts +++ b/src/modules/users/infra/http/controller/UsersController.ts @@ -80,18 +80,24 @@ export default class UserController { password, language, phone, + image, + gender, + birthdate, } = req.body; const updateUser = container.resolve(UpdateUserService); - const user = await updateUser.execute({ + const user = await updateUser.execute( id, - name, + { name, email, password, language, phone, - }); + image, + gender, + birthdate, } + ); return res.status(201).json({ ...user, diff --git a/src/modules/users/infra/prisma/entities/users.prisma b/src/modules/users/infra/prisma/entities/users.prisma index 9c108d8..ec54c9c 100644 --- a/src/modules/users/infra/prisma/entities/users.prisma +++ b/src/modules/users/infra/prisma/entities/users.prisma @@ -7,6 +7,9 @@ model Users { phone String pin String? pinExpires DateTime? + image String? + gender String? + birthdate DateTime? created_at DateTime @default(now()) updated_at DateTime @default(now()) } diff --git a/src/modules/users/services/UpdateUserService.ts b/src/modules/users/services/UpdateUserService.ts index 61287d1..9036d07 100644 --- a/src/modules/users/services/UpdateUserService.ts +++ b/src/modules/users/services/UpdateUserService.ts @@ -8,12 +8,14 @@ import IHashProvider from '@shared/container/providers/HashProvider/models/IHash import IUsersRepository from '../repositories/IUsersRepository'; interface IRequest { - id: string; - name: string; - email: string; - password: string; - language: string; - phone: string; + name?: string; + email?: string; + password?: string; + language?: string; + phone?: string; + image?: string; + gender?: string; + birthdate?: Date; } @injectable() @@ -26,23 +28,46 @@ export default class UpdateUserService { private hashProvider: IHashProvider, ) { } -public async execute({ - id, name, email, password, language, phone, -}: IRequest): Promise { +public async execute(id: string, updateData: IRequest): Promise { const userAlreadyExists = await this.usersRepository.findById(id); if (!userAlreadyExists) throw new AppError('User with this id does not exist'); + if (updateData.email) { + const userWithUpdatedEmail = await this.usersRepository.findByEmailWithRelations(updateData.email); + if(userWithUpdatedEmail) { + if (userWithUpdatedEmail.id == id) { + throw new AppError('You cannot update your email to the same email'); + } + if (userWithUpdatedEmail.id !== id) { + throw new AppError('User with same email already exists'); + } + } + } + if(updateData.birthdate || updateData.birthdate == ''){ + const birthdate = new Date(updateData.birthdate); + if (isNaN(birthdate.getTime())) { + throw new AppError('Birthdate is not a valid date'); + } + + if (birthdate > new Date()) { + throw new AppError('Birthdate cannot be greater than current date'); + } + } - const hashedPassword = await this.hashProvider.generateHash(password); + const data = { ...userAlreadyExists, ...updateData }; + + let hashedPassword; + if(data.password){ + hashedPassword = await this.hashProvider.generateHash(data.password.toString()); + } else { + hashedPassword = data.password; + } const updatedUser = this.usersRepository.update( id, { - name, - email: email.toLowerCase(), + ...data, password: hashedPassword, - language, - phone, }); return updatedUser; diff --git a/src/shared/infra/prisma/migrations/20240824231846_extra_user_fields/migration.sql b/src/shared/infra/prisma/migrations/20240824231846_extra_user_fields/migration.sql new file mode 100644 index 0000000..d636263 --- /dev/null +++ b/src/shared/infra/prisma/migrations/20240824231846_extra_user_fields/migration.sql @@ -0,0 +1,4 @@ +-- AlterTable +ALTER TABLE "Users" ADD COLUMN "birthdate" TIMESTAMP(3), +ADD COLUMN "gender" TEXT, +ADD COLUMN "image" TEXT; diff --git a/src/shared/infra/prisma/schema.prisma b/src/shared/infra/prisma/schema.prisma index efe0193..203bea5 100644 --- a/src/shared/infra/prisma/schema.prisma +++ b/src/shared/infra/prisma/schema.prisma @@ -17,6 +17,9 @@ model Users { phone String pin String? pinExpires DateTime? + image String? + gender String? + birthdate DateTime? created_at DateTime @default(now()) updated_at DateTime @default(now()) } \ No newline at end of file From bbae4395340ce0967376a58403bd71e9c3d45397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=A1ssyla=20Lissa=20Lima?= Date: Sat, 24 Aug 2024 22:53:18 -0300 Subject: [PATCH 2/2] fix: email to lower case --- src/modules/users/services/UpdateUserService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/users/services/UpdateUserService.ts b/src/modules/users/services/UpdateUserService.ts index 9036d07..9dd4ecf 100644 --- a/src/modules/users/services/UpdateUserService.ts +++ b/src/modules/users/services/UpdateUserService.ts @@ -67,6 +67,7 @@ public async execute(id: string, updateData: IRequest): Promise { id, { ...data, + email: data.email?.toLowerCase(), password: hashedPassword, });