.
This commit is contained in:
parent
7d8ca53495
commit
0f70a770ec
@ -501,3 +501,357 @@
|
|||||||
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T13:12:00.008Z"}
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T13:12:00.008Z"}
|
||||||
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T13:12:00.008Z"}
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T13:12:00.008Z"}
|
||||||
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T13:12:30.183Z"}
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T13:12:30.183Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 14:33 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T13:33:47.073Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 64 ms","metadata":{},"timestamp":"2025-02-03T13:33:47.077Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T13:33:47.078Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 40114","metadata":{},"timestamp":"2025-02-03T13:33:47.078Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T13:33:47.079Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T13:33:47.080Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 14:33 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T13:33:52.391Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 64 ms","metadata":{},"timestamp":"2025-02-03T13:33:52.396Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T13:33:52.396Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 40152","metadata":{},"timestamp":"2025-02-03T13:33:52.397Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T13:33:52.397Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T13:33:52.398Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 14:37 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T13:37:57.969Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 72 ms","metadata":{},"timestamp":"2025-02-03T13:37:57.974Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T13:37:57.974Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 40249","metadata":{},"timestamp":"2025-02-03T13:37:57.975Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T13:37:57.975Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T13:37:57.976Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 14:42 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T13:42:38.093Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 66 ms","metadata":{},"timestamp":"2025-02-03T13:42:38.098Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T13:42:38.098Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 40436","metadata":{},"timestamp":"2025-02-03T13:42:38.098Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T13:42:38.099Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T13:42:38.100Z"}
|
||||||
|
{"label":"index.ts","level":"warn","message":"⚡️ Shutting down server","metadata":{},"timestamp":"2025-02-03T13:43:15.112Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Shut down at: 3 de febrero de 2025, 14:43 CET","metadata":{},"timestamp":"2025-02-03T13:43:15.115Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Closed out remaining connections.","metadata":{},"timestamp":"2025-02-03T13:43:15.116Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Bye!","metadata":{},"timestamp":"2025-02-03T13:43:15.118Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 15:52 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T14:52:35.824Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 65 ms","metadata":{},"timestamp":"2025-02-03T14:52:35.828Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T14:52:35.829Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 41441","metadata":{},"timestamp":"2025-02-03T14:52:35.830Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T14:52:35.830Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T14:52:35.831Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:06 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:06:14.872Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 76 ms","metadata":{},"timestamp":"2025-02-03T15:06:14.877Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:06:14.878Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 41656","metadata":{},"timestamp":"2025-02-03T15:06:14.878Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:06:14.879Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:06:14.880Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:06 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:06:17.534Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 65 ms","metadata":{},"timestamp":"2025-02-03T15:06:17.538Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:06:17.538Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 41694","metadata":{},"timestamp":"2025-02-03T15:06:17.539Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:06:17.539Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:06:17.540Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:06 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:06:22.112Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 61 ms","metadata":{},"timestamp":"2025-02-03T15:06:22.117Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:06:22.117Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 41737","metadata":{},"timestamp":"2025-02-03T15:06:22.118Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:06:22.118Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:06:22.119Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:11 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:11:06.405Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 75 ms","metadata":{},"timestamp":"2025-02-03T15:11:06.410Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:11:06.411Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 41809","metadata":{},"timestamp":"2025-02-03T15:11:06.411Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:11:06.412Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:11:06.413Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:38 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:38:01.470Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 97 ms","metadata":{},"timestamp":"2025-02-03T15:38:01.477Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:38:01.477Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 42348","metadata":{},"timestamp":"2025-02-03T15:38:01.478Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:38:01.478Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:38:01.479Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:38 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:38:31.195Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 127 ms","metadata":{},"timestamp":"2025-02-03T15:38:31.200Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:38:31.200Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 42493","metadata":{},"timestamp":"2025-02-03T15:38:31.201Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:38:31.201Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:38:31.202Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T15:39:10.809Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:39 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:39:51.236Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 116 ms","metadata":{},"timestamp":"2025-02-03T15:39:51.240Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:39:51.240Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 42651","metadata":{},"timestamp":"2025-02-03T15:39:51.241Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:39:51.241Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:39:51.242Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:41 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:41:02.744Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 112 ms","metadata":{},"timestamp":"2025-02-03T15:41:02.748Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:41:02.749Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 42751","metadata":{},"timestamp":"2025-02-03T15:41:02.749Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:41:02.750Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:41:02.750Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:41 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:41:35.476Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 111 ms","metadata":{},"timestamp":"2025-02-03T15:41:35.480Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:41:35.481Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 42820","metadata":{},"timestamp":"2025-02-03T15:41:35.481Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:41:35.482Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:41:35.482Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:42 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:42:07.872Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 111 ms","metadata":{},"timestamp":"2025-02-03T15:42:07.878Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:42:07.879Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 42999","metadata":{},"timestamp":"2025-02-03T15:42:07.879Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:42:07.880Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:42:07.880Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:43 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:43:36.295Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 112 ms","metadata":{},"timestamp":"2025-02-03T15:43:36.299Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:43:36.300Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43061","metadata":{},"timestamp":"2025-02-03T15:43:36.300Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:43:36.301Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:43:36.301Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:43 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:43:57.574Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 111 ms","metadata":{},"timestamp":"2025-02-03T15:43:57.579Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:43:57.579Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43125","metadata":{},"timestamp":"2025-02-03T15:43:57.580Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:43:57.580Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:43:57.581Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:44 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:44:21.746Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 132 ms","metadata":{},"timestamp":"2025-02-03T15:44:21.751Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:44:21.752Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43193","metadata":{},"timestamp":"2025-02-03T15:44:21.752Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:44:21.753Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:44:21.753Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:45 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:45:08.119Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 106 ms","metadata":{},"timestamp":"2025-02-03T15:45:08.126Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:45:08.126Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43274","metadata":{},"timestamp":"2025-02-03T15:45:08.127Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:45:08.127Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:45:08.127Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:45 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:45:18.635Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 120 ms","metadata":{},"timestamp":"2025-02-03T15:45:18.640Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:45:18.641Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43338","metadata":{},"timestamp":"2025-02-03T15:45:18.641Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:45:18.642Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:45:18.642Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T15:45:20.949Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T15:45:21.063Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T15:45:39.770Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T15:45:39.878Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:54 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:54:26.279Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 105 ms","metadata":{},"timestamp":"2025-02-03T15:54:26.284Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:54:26.285Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43507","metadata":{},"timestamp":"2025-02-03T15:54:26.285Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:54:26.286Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:54:26.286Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:55 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:55:57.541Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 110 ms","metadata":{},"timestamp":"2025-02-03T15:55:57.546Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:55:57.546Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43616","metadata":{},"timestamp":"2025-02-03T15:55:57.547Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:55:57.547Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:55:57.548Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:56 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:56:23.772Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 93 ms","metadata":{},"timestamp":"2025-02-03T15:56:23.776Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:56:23.777Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43680","metadata":{},"timestamp":"2025-02-03T15:56:23.777Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:56:23.778Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:56:23.778Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:56 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:56:43.510Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 103 ms","metadata":{},"timestamp":"2025-02-03T15:56:43.515Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:56:43.515Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43744","metadata":{},"timestamp":"2025-02-03T15:56:43.516Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:56:43.516Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:56:43.516Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:57 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:57:15.506Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 116 ms","metadata":{},"timestamp":"2025-02-03T15:57:15.512Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:57:15.513Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43818","metadata":{},"timestamp":"2025-02-03T15:57:15.513Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:57:15.514Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:57:15.514Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 16:59 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T15:59:00.572Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 114 ms","metadata":{},"timestamp":"2025-02-03T15:59:00.577Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T15:59:00.578Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 43985","metadata":{},"timestamp":"2025-02-03T15:59:00.578Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T15:59:00.579Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T15:59:00.579Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T15:59:05.144Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T15:59:05.260Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T15:59:05.262Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T15:59:05.277Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T15:59:35.359Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T15:59:35.469Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T15:59:35.470Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T15:59:35.473Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T15:59:48.697Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T15:59:48.809Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T15:59:48.809Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T15:59:48.811Z"}
|
||||||
|
{"label":"index.ts","level":"warn","message":"⚡️ Shutting down server","metadata":{},"timestamp":"2025-02-03T16:00:10.397Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Shut down at: 3 de febrero de 2025, 17:00 CET","metadata":{},"timestamp":"2025-02-03T16:00:10.400Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Closed out remaining connections.","metadata":{},"timestamp":"2025-02-03T16:00:10.400Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Bye!","metadata":{},"timestamp":"2025-02-03T16:00:10.401Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:00 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:00:14.508Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 115 ms","metadata":{},"timestamp":"2025-02-03T16:00:14.513Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:00:14.513Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 44240","metadata":{},"timestamp":"2025-02-03T16:00:14.514Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:00:14.514Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:00:14.515Z"}
|
||||||
|
{"label":"index.ts","level":"warn","message":"⚡️ Shutting down server","metadata":{},"timestamp":"2025-02-03T16:00:42.123Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Shut down at: 3 de febrero de 2025, 17:00 CET","metadata":{},"timestamp":"2025-02-03T16:00:42.126Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Closed out remaining connections.","metadata":{},"timestamp":"2025-02-03T16:00:42.127Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Bye!","metadata":{},"timestamp":"2025-02-03T16:00:42.129Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:00 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:00:55.118Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 109 ms","metadata":{},"timestamp":"2025-02-03T16:00:55.123Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:00:55.124Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 44412","metadata":{},"timestamp":"2025-02-03T16:00:55.125Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:00:55.125Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:00:55.126Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:01:00.696Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:01:00.874Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T16:01:28.918Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T16:01:28.932Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:01:31.304Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:01:31.455Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T16:02:07.671Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T16:02:07.678Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:04 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:04:06.753Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 110 ms","metadata":{},"timestamp":"2025-02-03T16:04:06.757Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:04:06.758Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 44695","metadata":{},"timestamp":"2025-02-03T16:04:06.758Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:04:06.759Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:04:06.759Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:04:12.145Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:04:12.325Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:05:54.782Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:05 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:05:55.740Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 114 ms","metadata":{},"timestamp":"2025-02-03T16:05:55.744Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:05:55.745Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 44859","metadata":{},"timestamp":"2025-02-03T16:05:55.745Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:05:55.746Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:05:55.746Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:05:58.253Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:05:58.413Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:06:09.336Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:06:09.345Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:07:12.444Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:07:12.558Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:29:22.183Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:29:22.193Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:29 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:29:23.260Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 121 ms","metadata":{},"timestamp":"2025-02-03T16:29:23.264Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:29:23.265Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 45299","metadata":{},"timestamp":"2025-02-03T16:29:23.266Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:29:23.266Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:29:23.266Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:29:25.686Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:29:25.795Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:29:25.843Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T16:29:25.848Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:29 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:29:55.708Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 118 ms","metadata":{},"timestamp":"2025-02-03T16:29:55.713Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:29:55.714Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 45379","metadata":{},"timestamp":"2025-02-03T16:29:55.714Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:29:55.715Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:29:55.715Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:29:58.289Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:29:58.411Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:29:58.465Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:29:58.471Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:30:27.301Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:30:27.397Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:30:58.651Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:30:58.659Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:31:11.179Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:31:11.291Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:31:11.297Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:31:39.339Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:31:39.439Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:31:39.443Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:31:39.446Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:31:45.960Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:31:46.051Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:42:21.737Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:43 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:43:14.603Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 113 ms","metadata":{},"timestamp":"2025-02-03T16:43:14.608Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:43:14.609Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 45957","metadata":{},"timestamp":"2025-02-03T16:43:14.609Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:43:14.610Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:43:14.610Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:44 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:44:04.262Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 100 ms","metadata":{},"timestamp":"2025-02-03T16:44:04.267Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:44:04.267Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 46028","metadata":{},"timestamp":"2025-02-03T16:44:04.268Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:44:04.268Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:44:04.269Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:51 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:51:39.471Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 119 ms","metadata":{},"timestamp":"2025-02-03T16:51:39.477Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:51:39.477Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 46375","metadata":{},"timestamp":"2025-02-03T16:51:39.478Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:51:39.478Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:51:39.479Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:52 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:52:12.077Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 109 ms","metadata":{},"timestamp":"2025-02-03T16:52:12.082Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:52:12.082Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 46428","metadata":{},"timestamp":"2025-02-03T16:52:12.083Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:52:12.083Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:52:12.084Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:52 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:52:30.663Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 116 ms","metadata":{},"timestamp":"2025-02-03T16:52:30.668Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:52:30.669Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 46495","metadata":{},"timestamp":"2025-02-03T16:52:30.670Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:52:30.670Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:52:30.670Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:52 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:52:36.498Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 116 ms","metadata":{},"timestamp":"2025-02-03T16:52:36.502Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:52:36.503Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 46535","metadata":{},"timestamp":"2025-02-03T16:52:36.503Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:52:36.504Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:52:36.505Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:52 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:52:47.875Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 119 ms","metadata":{},"timestamp":"2025-02-03T16:52:47.879Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:52:47.880Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 46603","metadata":{},"timestamp":"2025-02-03T16:52:47.880Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:52:47.881Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:52:47.881Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:53:04.464Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:53:04.591Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:53:04.645Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:53:04.652Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:53:13.248Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:53:13.353Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:53:24.919Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 17:53 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T16:53:52.655Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 112 ms","metadata":{},"timestamp":"2025-02-03T16:53:52.660Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T16:53:52.660Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 46783","metadata":{},"timestamp":"2025-02-03T16:53:52.661Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T16:53:52.661Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T16:53:52.662Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:53:59.649Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:53:59.770Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:53:59.783Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/register","metadata":{},"timestamp":"2025-02-03T16:54:31.568Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"[Domain Event Created]: AuthenticatedUser ==> UserAuthenticatedEvent","metadata":{},"timestamp":"2025-02-03T16:54:31.742Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T17:53:46.420Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T17:53:46.434Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 18:54 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T17:54:23.734Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 125 ms","metadata":{},"timestamp":"2025-02-03T17:54:23.740Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T17:54:23.741Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 48097","metadata":{},"timestamp":"2025-02-03T17:54:23.741Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T17:54:23.742Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T17:54:23.743Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 18:54 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T17:54:26.837Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 111 ms","metadata":{},"timestamp":"2025-02-03T17:54:26.841Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T17:54:26.842Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 48139","metadata":{},"timestamp":"2025-02-03T17:54:26.842Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T17:54:26.843Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T17:54:26.843Z"}
|
||||||
|
{"label":"index.ts","level":"warn","message":"⚡️ Shutting down server","metadata":{},"timestamp":"2025-02-03T17:55:55.467Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Shut down at: 3 de febrero de 2025, 18:55 CET","metadata":{},"timestamp":"2025-02-03T17:55:55.473Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Closed out remaining connections.","metadata":{},"timestamp":"2025-02-03T17:55:55.474Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Bye!","metadata":{},"timestamp":"2025-02-03T17:55:55.475Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:02 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:02:48.032Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 138 ms","metadata":{},"timestamp":"2025-02-03T18:02:48.038Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:02:48.038Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 48517","metadata":{},"timestamp":"2025-02-03T18:02:48.039Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T18:02:48.040Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:02:48.040Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:02:59.655Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Time: 3 de febrero de 2025, 19:03 CET Europe/Madrid","metadata":{},"timestamp":"2025-02-03T18:03:04.157Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Launched in: 111 ms","metadata":{},"timestamp":"2025-02-03T18:03:04.161Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Environment: development","metadata":{},"timestamp":"2025-02-03T18:03:04.162Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Process PID: 48674","metadata":{},"timestamp":"2025-02-03T18:03:04.162Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"To shut down your server, press <CTRL> + C at any time","metadata":{},"timestamp":"2025-02-03T18:03:04.163Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"⚡️ Server: http://localhost:3002","metadata":{},"timestamp":"2025-02-03T18:03:04.163Z"}
|
||||||
|
{"label":"index.ts","level":"info","message":"Incoming request POST to /api/v1/auth/login","metadata":{},"timestamp":"2025-02-03T18:03:09.003Z"}
|
||||||
|
|||||||
@ -20,3 +20,34 @@
|
|||||||
{"label":"index.ts","level":"error","message":"Could not close connections in time, forcefully shutting down","metadata":{},"timestamp":"2025-02-03T11:30:14.987Z"}
|
{"label":"index.ts","level":"error","message":"Could not close connections in time, forcefully shutting down","metadata":{},"timestamp":"2025-02-03T11:30:14.987Z"}
|
||||||
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":","name":"SequelizeDatabaseError","original":{"code":"ER_NO_SUCH_TABLE","errno":1146,"fatal":false,"name":"SqlError","sql":"SELECT `id`, `username`, `email`, `password`, `roles`, `isActive`, `created_at`, `updated_at`, `deleted_at` FROM `users` AS `AuthUserModel` WHERE (`AuthUserModel`.`deleted_at` IS NULL AND `AuthUserModel`.`id` = 'email');","sqlMessage":"Table 'uecko_erp.users' doesn't exist","sqlState":"42S02"},"parameters":{},"parent":{"code":"ER_NO_SUCH_TABLE","errno":1146,"fatal":false,"name":"SqlError","sql":"SELECT `id`, `username`, `email`, `password`, `roles`, `isActive`, `created_at`, `updated_at`, `deleted_at` FROM `users` AS `AuthUserModel` WHERE (`AuthUserModel`.`deleted_at` IS NULL AND `AuthUserModel`.`id` = 'email');","sqlMessage":"Table 'uecko_erp.users' doesn't exist","sqlState":"42S02"},"sql":"SELECT `id`, `username`, `email`, `password`, `roles`, `isActive`, `created_at`, `updated_at`, `deleted_at` FROM `users` AS `AuthUserModel` WHERE (`AuthUserModel`.`deleted_at` IS NULL AND `AuthUserModel`.`id` = 'email');"},"timestamp":"2025-02-03T11:39:04.414Z"}
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":","name":"SequelizeDatabaseError","original":{"code":"ER_NO_SUCH_TABLE","errno":1146,"fatal":false,"name":"SqlError","sql":"SELECT `id`, `username`, `email`, `password`, `roles`, `isActive`, `created_at`, `updated_at`, `deleted_at` FROM `users` AS `AuthUserModel` WHERE (`AuthUserModel`.`deleted_at` IS NULL AND `AuthUserModel`.`id` = 'email');","sqlMessage":"Table 'uecko_erp.users' doesn't exist","sqlState":"42S02"},"parameters":{},"parent":{"code":"ER_NO_SUCH_TABLE","errno":1146,"fatal":false,"name":"SqlError","sql":"SELECT `id`, `username`, `email`, `password`, `roles`, `isActive`, `created_at`, `updated_at`, `deleted_at` FROM `users` AS `AuthUserModel` WHERE (`AuthUserModel`.`deleted_at` IS NULL AND `AuthUserModel`.`id` = 'email');","sqlMessage":"Table 'uecko_erp.users' doesn't exist","sqlState":"42S02"},"sql":"SELECT `id`, `username`, `email`, `password`, `roles`, `isActive`, `created_at`, `updated_at`, `deleted_at` FROM `users` AS `AuthUserModel` WHERE (`AuthUserModel`.`deleted_at` IS NULL AND `AuthUserModel`.`id` = 'email');"},"timestamp":"2025-02-03T11:39:04.414Z"}
|
||||||
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T13:05:42.332Z"}
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T13:05:42.332Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T15:59:05.262Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T15:59:05.277Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T15:59:35.470Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T15:59:35.473Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T15:59:48.809Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T15:59:48.811Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T16:01:28.918Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T16:01:28.932Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: value.join is not a function","metadata":{},"timestamp":"2025-02-03T16:02:07.671Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T16:02:07.678Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:05:54.782Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:06:09.336Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:06:09.345Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:29:22.183Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:29:22.193Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:29:25.843Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[500] Internal Server Error: Unexpected database error","metadata":{},"timestamp":"2025-02-03T16:29:25.848Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:29:58.465Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:29:58.471Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:30:58.651Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:30:58.659Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:31:11.297Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:31:39.443Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:31:39.446Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:42:21.737Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T16:53:04.645Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T16:53:04.652Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:53:24.919Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Unhandled Rejection at:","metadata":{"0":"r","1":"e","2":"a","3":"s","4":"o","5":"n","6":":"},"timestamp":"2025-02-03T16:53:59.783Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"Database error: Validation error","metadata":{},"timestamp":"2025-02-03T17:53:46.420Z"}
|
||||||
|
{"label":"index.ts","level":"error","message":"[409] Conflict: User with this email already exists","metadata":{},"timestamp":"2025-02-03T17:53:46.434Z"}
|
||||||
|
|||||||
@ -25,8 +25,9 @@
|
|||||||
"@types/jsonwebtoken": "^9.0.8",
|
"@types/jsonwebtoken": "^9.0.8",
|
||||||
"@types/luxon": "^3.4.2",
|
"@types/luxon": "^3.4.2",
|
||||||
"@types/node": "^22.10.7",
|
"@types/node": "^22.10.7",
|
||||||
"@types/passport": "^1.0.17",
|
"@types/passport": "^1.0.16",
|
||||||
"@types/passport-jwt": "^4.0.1",
|
"@types/passport-jwt": "^4.0.1",
|
||||||
|
"@types/passport-local": "^1.0.38",
|
||||||
"@types/response-time": "^2.3.8",
|
"@types/response-time": "^2.3.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.22.0",
|
"@typescript-eslint/eslint-plugin": "^8.22.0",
|
||||||
"@typescript-eslint/parser": "^8.22.0",
|
"@typescript-eslint/parser": "^8.22.0",
|
||||||
@ -62,6 +63,7 @@
|
|||||||
"mysql2": "^3.12.0",
|
"mysql2": "^3.12.0",
|
||||||
"passport": "^0.7.0",
|
"passport": "^0.7.0",
|
||||||
"passport-jwt": "^4.0.1",
|
"passport-jwt": "^4.0.1",
|
||||||
|
"passport-local": "^1.0.0",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
"response-time": "^2.3.3",
|
"response-time": "^2.3.3",
|
||||||
"sequelize": "^6.37.5",
|
"sequelize": "^6.37.5",
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { initLogger } from "@common/infrastructure/logger";
|
import { logger } from "@common/infrastructure/logger";
|
||||||
import { errorHandler } from "@common/presentation";
|
import { globalErrorHandler } from "@common/presentation";
|
||||||
import dotenv from "dotenv";
|
import dotenv from "dotenv";
|
||||||
import express, { Application } from "express";
|
import express, { Application } from "express";
|
||||||
import helmet from "helmet";
|
import helmet from "helmet";
|
||||||
@ -8,7 +8,6 @@ import responseTime from "response-time";
|
|||||||
import { v1Routes } from "./routes";
|
import { v1Routes } from "./routes";
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
const logger = initLogger();
|
|
||||||
|
|
||||||
export function createApp(): Application {
|
export function createApp(): Application {
|
||||||
const app = express();
|
const app = express();
|
||||||
@ -37,7 +36,7 @@ export function createApp(): Application {
|
|||||||
app.use("/api/v1", v1Routes());
|
app.use("/api/v1", v1Routes());
|
||||||
|
|
||||||
// Gestión global de errores
|
// Gestión global de errores
|
||||||
app.use(errorHandler);
|
app.use(globalErrorHandler);
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { logger } from "@common/infrastructure/logger";
|
||||||
import { DomainEntity } from "./domain-entity";
|
import { DomainEntity } from "./domain-entity";
|
||||||
import { IDomainEvent } from "./events";
|
import { IDomainEvent } from "./events";
|
||||||
|
|
||||||
@ -7,11 +8,8 @@ export abstract class AggregateRoot<T extends object> extends DomainEntity<T> {
|
|||||||
private logDomainEventAdded(event: IDomainEvent): void {
|
private logDomainEventAdded(event: IDomainEvent): void {
|
||||||
const thisClass = Reflect.getPrototypeOf(this);
|
const thisClass = Reflect.getPrototypeOf(this);
|
||||||
const domainEventClass = Reflect.getPrototypeOf(event);
|
const domainEventClass = Reflect.getPrototypeOf(event);
|
||||||
console.info(
|
logger.info(
|
||||||
`[Domain Event Created]:`,
|
`[Domain Event Created]: ${thisClass?.constructor.name} ==> ${domainEventClass?.constructor.name}`
|
||||||
thisClass?.constructor.name,
|
|
||||||
"==>",
|
|
||||||
domainEventClass?.constructor.name
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import DailyRotateFile from "winston-daily-rotate-file";
|
|||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
export const initLogger = () => {
|
const initLogger = () => {
|
||||||
const isProduction = process.env.NODE_ENV === "production";
|
const isProduction = process.env.NODE_ENV === "production";
|
||||||
|
|
||||||
const consoleFormat = format.combine(
|
const consoleFormat = format.combine(
|
||||||
@ -44,7 +44,7 @@ export const initLogger = () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const logger = createLogger({
|
const logger = createLogger({
|
||||||
level: isProduction ? "debug" : "debug",
|
level: isProduction ? "error" : "debug",
|
||||||
|
|
||||||
format: fileFormat,
|
format: fileFormat,
|
||||||
|
|
||||||
@ -86,6 +86,5 @@ export const initLogger = () => {
|
|||||||
return logger;
|
return logger;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const logger = () => {
|
const logger = initLogger();
|
||||||
return initLogger();
|
export { logger };
|
||||||
};
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { IAggregateRootRepository, Result, UniqueID } from "@common/domain";
|
import { IAggregateRootRepository, Result, UniqueID } from "@common/domain";
|
||||||
import { ModelDefined, Transaction } from "sequelize";
|
import { ModelDefined, Transaction } from "sequelize";
|
||||||
|
import { logger } from "../logger";
|
||||||
|
|
||||||
export abstract class SequelizeRepository<T> implements IAggregateRootRepository<T> {
|
export abstract class SequelizeRepository<T> implements IAggregateRootRepository<T> {
|
||||||
protected _findById(
|
protected _findById(
|
||||||
@ -81,22 +82,32 @@ export abstract class SequelizeRepository<T> implements IAggregateRootRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 🔹 Manejo de errores de la base de datos
|
* 🔹 Manejo de errores de la base de datos con personalización
|
||||||
|
* @param error Error lanzado por Sequelize
|
||||||
|
* @param errorMapper Función opcional para personalizar errores específicos
|
||||||
*/
|
*/
|
||||||
protected _handleDatabaseError(error: unknown): Result<never, Error> {
|
protected _handleDatabaseError(
|
||||||
|
error: unknown,
|
||||||
|
errorMapper?: (error: Error) => string | null
|
||||||
|
): Result<never, Error> {
|
||||||
const _error = error as Error;
|
const _error = error as Error;
|
||||||
if (_error.name === "SequelizeUniqueConstraintError") {
|
|
||||||
return Result.fail(new Error("User with this email already exists"));
|
logger.error(`Database error: ${_error.message}`);
|
||||||
|
|
||||||
|
// Si la clase hija proporciona un mapeo personalizado, lo usa
|
||||||
|
if (errorMapper) {
|
||||||
|
const mappedMessage = errorMapper(_error);
|
||||||
|
if (mappedMessage) {
|
||||||
|
return Result.fail(new Error(mappedMessage));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_error.name === "SequelizeConnectionError") {
|
// Mapa de errores genéricos para la base de datos
|
||||||
return Result.fail(new Error("Database connection lost"));
|
const ERROR_MAP = new Map<string, string>([
|
||||||
}
|
["SequelizeConnectionError", "Database connection lost"],
|
||||||
|
["SequelizeTimeoutError", "Database request timed out"],
|
||||||
|
]);
|
||||||
|
|
||||||
if (_error.name === "SequelizeTimeoutError") {
|
return Result.fail(new Error(ERROR_MAP.get(_error.name) || "Unexpected database error"));
|
||||||
return Result.fail(new Error("Database request timed out"));
|
|
||||||
}
|
|
||||||
|
|
||||||
return Result.fail(new Error("Unexpected database error"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { logger } from "@common/infrastructure/logger";
|
||||||
import { NextFunction, Request, Response } from "express";
|
import { NextFunction, Request, Response } from "express";
|
||||||
import httpStatus from "http-status";
|
import httpStatus from "http-status";
|
||||||
import { ApiError } from "./api-error";
|
import { ApiError } from "./api-error";
|
||||||
@ -24,6 +25,7 @@ export abstract class ExpressController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected errorResponse(apiError: ApiError) {
|
protected errorResponse(apiError: ApiError) {
|
||||||
|
logger.error(`[${apiError.status}] ${apiError.title}: ${apiError.detail}`);
|
||||||
return this.res.status(apiError.status).json(apiError);
|
return this.res.status(apiError.status).json(apiError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,8 +145,10 @@ export abstract class ExpressController {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
this.executeImpl();
|
this.executeImpl();
|
||||||
} catch (error) {
|
} catch (error: unknown) {
|
||||||
this.internalServerError((error as Error).message);
|
const _error = error as Error;
|
||||||
|
logger.error(`Unhandled error in controller: ${_error.message}`);
|
||||||
|
this.internalServerError(_error.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,31 +0,0 @@
|
|||||||
import { NextFunction, Request, Response } from "express";
|
|
||||||
import { ApiError } from "../api-error";
|
|
||||||
|
|
||||||
export const errorHandler = (err: any, req: Request, res: Response, next: NextFunction) => {
|
|
||||||
// Si ya se envió una respuesta, delegamos al siguiente error handler
|
|
||||||
if (res.headersSent) {
|
|
||||||
return next(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verifica si el error es una instancia de ApiError
|
|
||||||
if (err instanceof ApiError) {
|
|
||||||
// Respuesta con formato RFC 7807
|
|
||||||
return res.status(err.status).json({
|
|
||||||
type: err.type,
|
|
||||||
title: err.title,
|
|
||||||
status: err.status,
|
|
||||||
detail: err.detail,
|
|
||||||
instance: err.instance ?? req.originalUrl,
|
|
||||||
errors: err.errors ?? [], // Aquí puedes almacenar validaciones, etc.
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Si no es un ApiError, lo tratamos como un error interno (500)
|
|
||||||
return res.status(500).json({
|
|
||||||
type: "https://example.com/probs/internal-server-error",
|
|
||||||
title: "Internal Server Error",
|
|
||||||
status: 500,
|
|
||||||
detail: err.message || "Ha ocurrido un error inesperado.",
|
|
||||||
instance: req.originalUrl,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
import { logger } from "@common/infrastructure/logger";
|
||||||
|
import { NextFunction, Request, Response } from "express";
|
||||||
|
import { ApiError } from "../api-error";
|
||||||
|
|
||||||
|
export const globalErrorHandler = (error: any, req: Request, res: Response, next: NextFunction) => {
|
||||||
|
// Si ya se envió una respuesta, delegamos al siguiente error handler
|
||||||
|
if (res.headersSent) {
|
||||||
|
return next(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.error(`Unhandled API error: ${error.message}`);
|
||||||
|
|
||||||
|
// Verifica si el error es una instancia de ApiError
|
||||||
|
if (error instanceof ApiError) {
|
||||||
|
// Respuesta con formato RFC 7807
|
||||||
|
return res.status(error.status).json({
|
||||||
|
type: error.type,
|
||||||
|
title: error.title,
|
||||||
|
status: error.status,
|
||||||
|
detail: error.detail,
|
||||||
|
instance: error.instance ?? req.originalUrl,
|
||||||
|
errors: error.errors ?? [], // Aquí puedes almacenar validaciones, etc.
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si no es un ApiError, lo tratamos como un error interno (500)
|
||||||
|
return res.status(500).json({
|
||||||
|
type: "https://example.com/probs/internal-server-error",
|
||||||
|
title: "Internal Server Error",
|
||||||
|
status: 500,
|
||||||
|
detail: error.message || "Ha ocurrido un error inesperado.",
|
||||||
|
instance: req.originalUrl,
|
||||||
|
});
|
||||||
|
};
|
||||||
@ -1 +1 @@
|
|||||||
export * from "./error-handler";
|
export * from "./global-error-handler";
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import dotenv from "dotenv";
|
import dotenv from "dotenv";
|
||||||
import { Sequelize } from "sequelize";
|
import { Sequelize } from "sequelize";
|
||||||
|
import { registerModels } from "./register-models";
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
@ -23,6 +24,7 @@ export const sequelize = new Sequelize(
|
|||||||
|
|
||||||
export async function connectToDatabase(): Promise<void> {
|
export async function connectToDatabase(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
|
await registerModels();
|
||||||
await sequelize.authenticate();
|
await sequelize.authenticate();
|
||||||
console.log("✅ Database connection established successfully.");
|
console.log("✅ Database connection established successfully.");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
18
apps/server/src/config/register-models.ts
Normal file
18
apps/server/src/config/register-models.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { sequelize } from "./database";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 🔹 Registra todos los modelos en Sequelize
|
||||||
|
*/
|
||||||
|
export const registerModels = async () => {
|
||||||
|
try {
|
||||||
|
if (process.env.NODE_ENV !== "production") {
|
||||||
|
await sequelize.sync({ alter: true });
|
||||||
|
console.log("✅ Database synchronized successfully.");
|
||||||
|
} else {
|
||||||
|
console.log("⚠️ Running in production mode - Skipping database sync.");
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("❌ Error synchronizing database:", error);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -1,9 +1,11 @@
|
|||||||
|
import { AuthenticatedUser } from "../domain";
|
||||||
|
|
||||||
export interface IAuthProvider {
|
export interface IAuthProvider {
|
||||||
|
/* JWT Strategy */
|
||||||
generateAccessToken(payload: any): string;
|
generateAccessToken(payload: any): string;
|
||||||
generateRefreshToken(payload: any): string;
|
generateRefreshToken(payload: any): string;
|
||||||
|
|
||||||
/**
|
|
||||||
* 🔹 Verifica la validez de un token JWT y devuelve su payload
|
|
||||||
*/
|
|
||||||
verifyToken(token: string): any;
|
verifyToken(token: string): any;
|
||||||
|
|
||||||
|
/* LocalStrategy */
|
||||||
|
verifyUser(email: string, password: string): Promise<AuthenticatedUser | null>;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import { IAuthProvider } from "./auth-provider.interface";
|
|||||||
import { IAuthService } from "./auth-service.interface";
|
import { IAuthService } from "./auth-service.interface";
|
||||||
|
|
||||||
export class AuthService implements IAuthService {
|
export class AuthService implements IAuthService {
|
||||||
private _respository!: IAuthenticatedUserRepository;
|
private readonly _respository!: IAuthenticatedUserRepository;
|
||||||
private readonly _transactionManager!: ITransactionManager;
|
private readonly _transactionManager!: ITransactionManager;
|
||||||
private readonly _authProvider: IAuthProvider;
|
private readonly _authProvider: IAuthProvider;
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,10 @@ export * from "./auth-service.interface";
|
|||||||
export const createAuthService = (): IAuthService => {
|
export const createAuthService = (): IAuthService => {
|
||||||
const transactionManager = createSequelizeTransactionManager();
|
const transactionManager = createSequelizeTransactionManager();
|
||||||
const authenticatedUserRepository = createAuthenticatedUserRepository();
|
const authenticatedUserRepository = createAuthenticatedUserRepository();
|
||||||
const authProvider: IAuthProvider = createPassportAuthProvider();
|
|
||||||
|
const authProvider: IAuthProvider = createPassportAuthProvider(
|
||||||
|
authenticatedUserRepository,
|
||||||
|
transactionManager
|
||||||
|
);
|
||||||
return new AuthService(authenticatedUserRepository, transactionManager, authProvider);
|
return new AuthService(authenticatedUserRepository, transactionManager, authProvider);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -21,6 +21,10 @@ export class AuthenticatedUser extends AggregateRoot<IAuthenticatedUserProps> {
|
|||||||
return Result.ok(user);
|
return Result.ok(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
comparePassword(plainPassword: string): Promise<boolean> {
|
||||||
|
return this._props.passwordHash.compare(plainPassword);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 🔹 Devuelve una representación lista para persistencia
|
* 🔹 Devuelve una representación lista para persistencia
|
||||||
*/
|
*/
|
||||||
@ -30,7 +34,7 @@ export class AuthenticatedUser extends AggregateRoot<IAuthenticatedUserProps> {
|
|||||||
username: this._props.username.toString(),
|
username: this._props.username.toString(),
|
||||||
email: this._props.email.toString(),
|
email: this._props.email.toString(),
|
||||||
password: this._props.passwordHash.toString(),
|
password: this._props.passwordHash.toString(),
|
||||||
roles: JSON.stringify(this._props.roles),
|
roles: this._props.roles.map((role) => role.toString()),
|
||||||
token: this._props.token,
|
token: this._props.token,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +1,28 @@
|
|||||||
|
import { createSequelizeTransactionManager } from "@common/infrastructure";
|
||||||
|
import { ITransactionManager } from "@common/infrastructure/database";
|
||||||
import { IAuthProvider } from "@contexts/auth/application";
|
import { IAuthProvider } from "@contexts/auth/application";
|
||||||
|
import {
|
||||||
|
AuthenticatedUser,
|
||||||
|
EmailAddress,
|
||||||
|
IAuthenticatedUserRepository,
|
||||||
|
} from "@contexts/auth/domain";
|
||||||
import jwt from "jsonwebtoken";
|
import jwt from "jsonwebtoken";
|
||||||
import passport from "passport";
|
import passport from "passport";
|
||||||
import { ExtractJwt, Strategy as JwtStrategy } from "passport-jwt";
|
import { ExtractJwt, Strategy as JwtStrategy } from "passport-jwt";
|
||||||
|
import { Strategy as LocalStrategy } from "passport-local";
|
||||||
|
import { createAuthenticatedUserRepository } from "../sequelize";
|
||||||
|
|
||||||
const SECRET_KEY = process.env.JWT_SECRET || "supersecretkey";
|
const SECRET_KEY = process.env.JWT_SECRET || "supersecretkey";
|
||||||
const ACCESS_EXPIRATION = process.env.JWT_ACCESS_EXPIRATION || "1h";
|
const ACCESS_EXPIRATION = process.env.JWT_ACCESS_EXPIRATION || "1h";
|
||||||
const REFRESH_EXPIRATION = process.env.JWT_REFRESH_EXPIRATION || "7d";
|
const REFRESH_EXPIRATION = process.env.JWT_REFRESH_EXPIRATION || "7d";
|
||||||
|
|
||||||
export class PassportAuthProvider implements IAuthProvider {
|
export class PassportAuthProvider implements IAuthProvider {
|
||||||
constructor() {
|
private readonly _repository: IAuthenticatedUserRepository;
|
||||||
|
private readonly _transactionManager!: ITransactionManager;
|
||||||
|
|
||||||
|
constructor(repository: IAuthenticatedUserRepository, transactionManager: ITransactionManager) {
|
||||||
|
this._repository = repository;
|
||||||
|
this._transactionManager = transactionManager;
|
||||||
this.initializePassport();
|
this.initializePassport();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,6 +38,19 @@ export class PassportAuthProvider implements IAuthProvider {
|
|||||||
return jwt.verify(token, SECRET_KEY);
|
return jwt.verify(token, SECRET_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async verifyUser(email: string, password: string): Promise<AuthenticatedUser | null> {
|
||||||
|
const emailVO = EmailAddress.create(email);
|
||||||
|
if (emailVO.isFailure) return Promise.resolve(null);
|
||||||
|
|
||||||
|
const userResult = await this._repository.findUserByEmail(emailVO.data);
|
||||||
|
if (userResult.isFailure || !userResult.data) return Promise.resolve(null);
|
||||||
|
|
||||||
|
const user = userResult.data;
|
||||||
|
const isValidPassword = await user.comparePassword(password);
|
||||||
|
|
||||||
|
return !isValidPassword ? Promise.resolve(null) : Promise.resolve(user);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 🔹 Configura PassportJS con la estrategia JWT
|
* 🔹 Configura PassportJS con la estrategia JWT
|
||||||
*/
|
*/
|
||||||
@ -42,7 +69,30 @@ export class PassportAuthProvider implements IAuthProvider {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
passport.use(
|
||||||
|
new LocalStrategy(
|
||||||
|
{ usernameField: "email", passwordField: "password" },
|
||||||
|
async (email, password, done) => {
|
||||||
|
try {
|
||||||
|
const user = await this.verifyUser(email, password);
|
||||||
|
return user
|
||||||
|
? done(null, user)
|
||||||
|
: done(null, false, { message: "Invalid email or password" });
|
||||||
|
} catch (error) {
|
||||||
|
return done(error, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const createPassportAuthProvider = () => new PassportAuthProvider();
|
export const createPassportAuthProvider = (
|
||||||
|
repository?: IAuthenticatedUserRepository,
|
||||||
|
transactionManager?: ITransactionManager
|
||||||
|
) => {
|
||||||
|
const _transactionManager = transactionManager || createSequelizeTransactionManager();
|
||||||
|
const _repository = repository || createAuthenticatedUserRepository();
|
||||||
|
return new PassportAuthProvider(_repository, _transactionManager);
|
||||||
|
};
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
|
import { sequelize } from "@config/database";
|
||||||
import { DataTypes, InferAttributes, InferCreationAttributes, Model } from "sequelize";
|
import { DataTypes, InferAttributes, InferCreationAttributes, Model } from "sequelize";
|
||||||
import { sequelize } from "../../../../config/database";
|
|
||||||
|
|
||||||
export type AuthUserCreationAttributes = InferCreationAttributes<AuthUserModel>;
|
export type AuthUserCreationAttributes = InferCreationAttributes<AuthUserModel>;
|
||||||
|
|
||||||
@ -7,12 +7,12 @@ class AuthUserModel extends Model<
|
|||||||
InferAttributes<AuthUserModel>,
|
InferAttributes<AuthUserModel>,
|
||||||
InferCreationAttributes<AuthUserModel>
|
InferCreationAttributes<AuthUserModel>
|
||||||
> {
|
> {
|
||||||
public id!: string;
|
declare id: string;
|
||||||
public username!: string;
|
declare username: string;
|
||||||
public email!: string;
|
declare email: string;
|
||||||
public password!: string;
|
declare password: string;
|
||||||
public roles!: string[];
|
declare roles: string[];
|
||||||
public isActive!: boolean;
|
declare isActive: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
AuthUserModel.init(
|
AuthUserModel.init(
|
||||||
@ -36,9 +36,17 @@ AuthUserModel.init(
|
|||||||
allowNull: false,
|
allowNull: false,
|
||||||
},
|
},
|
||||||
roles: {
|
roles: {
|
||||||
type: DataTypes.ARRAY(DataTypes.STRING),
|
type: DataTypes.STRING,
|
||||||
allowNull: false,
|
allowNull: false,
|
||||||
defaultValue: [],
|
defaultValue: "USER",
|
||||||
|
get(this: AuthUserModel): string[] {
|
||||||
|
const rawValue = this.getDataValue("roles") as any;
|
||||||
|
return String(rawValue).split(";");
|
||||||
|
},
|
||||||
|
set(this: AuthUserModel, value: string[]) {
|
||||||
|
const rawValue = value.join(";") as any;
|
||||||
|
this.setDataValue("roles", rawValue);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
isActive: {
|
isActive: {
|
||||||
type: DataTypes.BOOLEAN,
|
type: DataTypes.BOOLEAN,
|
||||||
|
|||||||
@ -15,6 +15,17 @@ export class AuthenticatedUserRepository
|
|||||||
{
|
{
|
||||||
private readonly _mapper!: IAuthenticatedUserMapper;
|
private readonly _mapper!: IAuthenticatedUserMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 🔹 Función personalizada para mapear errores de unicidad en autenticación
|
||||||
|
*/
|
||||||
|
private _customErrorMapper(error: Error): string | null {
|
||||||
|
if (error.name === "SequelizeUniqueConstraintError") {
|
||||||
|
return "User with this email already exists";
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
constructor(mapper: IAuthenticatedUserMapper) {
|
constructor(mapper: IAuthenticatedUserMapper) {
|
||||||
super();
|
super();
|
||||||
this._mapper = mapper;
|
this._mapper = mapper;
|
||||||
@ -34,7 +45,7 @@ export class AuthenticatedUserRepository
|
|||||||
|
|
||||||
return Result.ok(Boolean(rawUser));
|
return Result.ok(Boolean(rawUser));
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
return this._handleDatabaseError(error);
|
return this._handleDatabaseError(error, this._customErrorMapper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +67,7 @@ export class AuthenticatedUserRepository
|
|||||||
|
|
||||||
return this._mapper.toDomain(rawUser);
|
return this._mapper.toDomain(rawUser);
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
return this._handleDatabaseError(error);
|
return this._handleDatabaseError(error, this._customErrorMapper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +80,7 @@ export class AuthenticatedUserRepository
|
|||||||
await AuthUserModel.create(persistenceData, { transaction });
|
await AuthUserModel.create(persistenceData, { transaction });
|
||||||
return Result.ok();
|
return Result.ok();
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
return this._handleDatabaseError(error);
|
return this._handleDatabaseError(error, this._customErrorMapper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,7 @@
|
|||||||
import { validateRequest } from "@common/presentation";
|
import { validateRequest } from "@common/presentation";
|
||||||
import { NextFunction, Request, Response, Router } from "express";
|
import { Router } from "express";
|
||||||
import { createRegisterController } from "./controllers";
|
import { createRegisterController } from "./controllers";
|
||||||
import { RegisterUserSchema } from "./dto";
|
import { LoginUserSchema, RegisterUserSchema } from "./dto";
|
||||||
|
|
||||||
const loggerMiddleware = () => (req: Request, res: Response, next: NextFunction) => {
|
|
||||||
console.log(`${req.method} ${req.path}`);
|
|
||||||
next();
|
|
||||||
};
|
|
||||||
|
|
||||||
export const authRouter = (appRouter: Router) => {
|
export const authRouter = (appRouter: Router) => {
|
||||||
const authRoutes: Router = Router({ mergeParams: true });
|
const authRoutes: Router = Router({ mergeParams: true });
|
||||||
@ -43,7 +38,7 @@ export const authRouter = (appRouter: Router) => {
|
|||||||
*
|
*
|
||||||
* @apiError (401) {String} message Invalid email or password.
|
* @apiError (401) {String} message Invalid email or password.
|
||||||
*/
|
*/
|
||||||
//authRoutes.post("/login", authController.login);
|
authRoutes.post("/login", validateRequest(LoginUserSchema));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @api {post} /api/auth/select-company Select an active company
|
* @api {post} /api/auth/select-company Select an active company
|
||||||
|
|||||||
@ -1,13 +1,16 @@
|
|||||||
import { ExpressController } from "@common/presentation";
|
import { ExpressController } from "@common/presentation";
|
||||||
import { createAuthService, IAuthService } from "@contexts/auth/application";
|
import { createAuthService, IAuthService } from "@contexts/auth/application";
|
||||||
import { EmailAddress, PasswordHash, Username } from "@contexts/auth/domain";
|
import { EmailAddress, PasswordHash, Username } from "@contexts/auth/domain";
|
||||||
|
import { IRegisterPresenter, RegisterPresenter } from "./register.presenter";
|
||||||
|
|
||||||
class RegisterController extends ExpressController {
|
class RegisterController extends ExpressController {
|
||||||
private readonly _authService!: IAuthService;
|
private readonly _authService!: IAuthService;
|
||||||
|
private readonly _presenter!: IRegisterPresenter;
|
||||||
|
|
||||||
public constructor(authService: IAuthService) {
|
public constructor(authService: IAuthService, presenter: IRegisterPresenter) {
|
||||||
super();
|
super();
|
||||||
this._authService = authService;
|
this._authService = authService;
|
||||||
|
this._presenter = presenter;
|
||||||
}
|
}
|
||||||
|
|
||||||
async executeImpl() {
|
async executeImpl() {
|
||||||
@ -19,15 +22,14 @@ class RegisterController extends ExpressController {
|
|||||||
return this.clientError("Invalid input data");
|
return this.clientError("Invalid input data");
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await this._authService.registerUser({
|
const userOrError = await this._authService.registerUser({
|
||||||
username: usernameVO.data,
|
username: usernameVO.data,
|
||||||
email: emailVO.data,
|
email: emailVO.data,
|
||||||
passwordHash: passwordHashVO.data,
|
passwordHash: passwordHashVO.data,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (result.isFailure) {
|
if (userOrError.isFailure) {
|
||||||
console.log(result.error);
|
const message = userOrError.error.message;
|
||||||
const message = result.error.message;
|
|
||||||
|
|
||||||
if (message.includes("User with this email already exists")) {
|
if (message.includes("User with this email already exists")) {
|
||||||
return this.conflictError(message);
|
return this.conflictError(message);
|
||||||
@ -45,15 +47,11 @@ class RegisterController extends ExpressController {
|
|||||||
return this.internalServerError(message);
|
return this.internalServerError(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.created({
|
return this.created(this._presenter.map(userOrError.data));
|
||||||
accessToken: result.data.accessToken,
|
|
||||||
refreshToken: result.data.refreshToken,
|
|
||||||
userId: result.data.user.getID(),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const createRegisterController = () => {
|
export const createRegisterController = () => {
|
||||||
const authService = createAuthService();
|
const authService = createAuthService();
|
||||||
return new RegisterController(authService);
|
return new RegisterController(authService, RegisterPresenter);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -0,0 +1,21 @@
|
|||||||
|
import { AuthenticatedUser } from "@contexts/auth/domain";
|
||||||
|
import { IRegisterUserResponseDTO } from "../dto";
|
||||||
|
|
||||||
|
export interface IRegisterPresenter {
|
||||||
|
map: (user: AuthenticatedUser) => IRegisterUserResponseDTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const RegisterPresenter: IRegisterPresenter = {
|
||||||
|
map: (user: AuthenticatedUser): IRegisterUserResponseDTO => {
|
||||||
|
//const { user, token, refreshToken } = loginUser;
|
||||||
|
//const roles = user.getRoles()?.map((rol) => rol.toString()) || [];
|
||||||
|
|
||||||
|
const userData = user.toPersistenceData();
|
||||||
|
|
||||||
|
return {
|
||||||
|
userId: userData,
|
||||||
|
email: userData.email,
|
||||||
|
username: userData.username,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -1,15 +1,15 @@
|
|||||||
export interface IRegisterUserDTO {
|
export interface IRegisterUserResponseDTO {
|
||||||
|
userId: string;
|
||||||
username: string;
|
username: string;
|
||||||
email: string;
|
email: string;
|
||||||
password: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ILoginUserDTO {
|
export interface ILoginUserResponseDTO {
|
||||||
email: string;
|
email: string;
|
||||||
password: string;
|
password: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ISelectCompanyDTO {
|
export interface ISelectCompanyResponseDTO {
|
||||||
companyId: string;
|
companyId: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,12 +1,10 @@
|
|||||||
import { initLogger } from "@common/infrastructure/logger";
|
import { logger } from "@common/infrastructure/logger";
|
||||||
import { connectToDatabase } from "@config/database";
|
import { connectToDatabase } from "@config/database";
|
||||||
import { createApp } from "app";
|
import { createApp } from "app";
|
||||||
import http from "http";
|
import http from "http";
|
||||||
import { DateTime } from "luxon";
|
import { DateTime } from "luxon";
|
||||||
import { ENV } from "./config";
|
import { ENV } from "./config";
|
||||||
|
|
||||||
const logger = initLogger();
|
|
||||||
|
|
||||||
// Guardamos información del estado del servidor
|
// Guardamos información del estado del servidor
|
||||||
export const currentState = {
|
export const currentState = {
|
||||||
launchedAt: DateTime.now(),
|
launchedAt: DateTime.now(),
|
||||||
|
|||||||
@ -68,6 +68,9 @@ importers:
|
|||||||
passport-jwt:
|
passport-jwt:
|
||||||
specifier: ^4.0.1
|
specifier: ^4.0.1
|
||||||
version: 4.0.1
|
version: 4.0.1
|
||||||
|
passport-local:
|
||||||
|
specifier: ^1.0.0
|
||||||
|
version: 1.0.0
|
||||||
reflect-metadata:
|
reflect-metadata:
|
||||||
specifier: ^0.2.2
|
specifier: ^0.2.2
|
||||||
version: 0.2.2
|
version: 0.2.2
|
||||||
@ -124,11 +127,14 @@ importers:
|
|||||||
specifier: ^22.10.7
|
specifier: ^22.10.7
|
||||||
version: 22.12.0
|
version: 22.12.0
|
||||||
'@types/passport':
|
'@types/passport':
|
||||||
specifier: ^1.0.17
|
specifier: ^1.0.16
|
||||||
version: 1.0.17
|
version: 1.0.17
|
||||||
'@types/passport-jwt':
|
'@types/passport-jwt':
|
||||||
specifier: ^4.0.1
|
specifier: ^4.0.1
|
||||||
version: 4.0.1
|
version: 4.0.1
|
||||||
|
'@types/passport-local':
|
||||||
|
specifier: ^1.0.38
|
||||||
|
version: 1.0.38
|
||||||
'@types/response-time':
|
'@types/response-time':
|
||||||
specifier: ^2.3.8
|
specifier: ^2.3.8
|
||||||
version: 2.3.8
|
version: 2.3.8
|
||||||
@ -1193,6 +1199,9 @@ packages:
|
|||||||
'@types/passport-jwt@4.0.1':
|
'@types/passport-jwt@4.0.1':
|
||||||
resolution: {integrity: sha512-Y0Ykz6nWP4jpxgEUYq8NoVZeCQPo1ZndJLfapI249g1jHChvRfZRO/LS3tqu26YgAS/laI1qx98sYGz0IalRXQ==}
|
resolution: {integrity: sha512-Y0Ykz6nWP4jpxgEUYq8NoVZeCQPo1ZndJLfapI249g1jHChvRfZRO/LS3tqu26YgAS/laI1qx98sYGz0IalRXQ==}
|
||||||
|
|
||||||
|
'@types/passport-local@1.0.38':
|
||||||
|
resolution: {integrity: sha512-nsrW4A963lYE7lNTv9cr5WmiUD1ibYJvWrpE13oxApFsRt77b0RdtZvKbCdNIY4v/QZ6TRQWaDDEwV1kCTmcXg==}
|
||||||
|
|
||||||
'@types/passport-strategy@0.2.38':
|
'@types/passport-strategy@0.2.38':
|
||||||
resolution: {integrity: sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==}
|
resolution: {integrity: sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==}
|
||||||
|
|
||||||
@ -3143,6 +3152,10 @@ packages:
|
|||||||
passport-jwt@4.0.1:
|
passport-jwt@4.0.1:
|
||||||
resolution: {integrity: sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==}
|
resolution: {integrity: sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==}
|
||||||
|
|
||||||
|
passport-local@1.0.0:
|
||||||
|
resolution: {integrity: sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==}
|
||||||
|
engines: {node: '>= 0.4.0'}
|
||||||
|
|
||||||
passport-strategy@1.0.0:
|
passport-strategy@1.0.0:
|
||||||
resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==}
|
resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==}
|
||||||
engines: {node: '>= 0.4.0'}
|
engines: {node: '>= 0.4.0'}
|
||||||
@ -4951,6 +4964,12 @@ snapshots:
|
|||||||
'@types/jsonwebtoken': 9.0.8
|
'@types/jsonwebtoken': 9.0.8
|
||||||
'@types/passport-strategy': 0.2.38
|
'@types/passport-strategy': 0.2.38
|
||||||
|
|
||||||
|
'@types/passport-local@1.0.38':
|
||||||
|
dependencies:
|
||||||
|
'@types/express': 4.17.21
|
||||||
|
'@types/passport': 1.0.17
|
||||||
|
'@types/passport-strategy': 0.2.38
|
||||||
|
|
||||||
'@types/passport-strategy@0.2.38':
|
'@types/passport-strategy@0.2.38':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/express': 4.17.21
|
'@types/express': 4.17.21
|
||||||
@ -7424,6 +7443,10 @@ snapshots:
|
|||||||
jsonwebtoken: 9.0.2
|
jsonwebtoken: 9.0.2
|
||||||
passport-strategy: 1.0.0
|
passport-strategy: 1.0.0
|
||||||
|
|
||||||
|
passport-local@1.0.0:
|
||||||
|
dependencies:
|
||||||
|
passport-strategy: 1.0.0
|
||||||
|
|
||||||
passport-strategy@1.0.0: {}
|
passport-strategy@1.0.0: {}
|
||||||
|
|
||||||
passport@0.7.0:
|
passport@0.7.0:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user