From ef2ba6d114ad7aa4983e064bdbb766e7e9d71984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Rafael=20Siqueira?= Date: Fri, 11 Jul 2025 19:24:30 -0300 Subject: [PATCH] drop elastic --- http-api/app/routes/enrollments/__init__.py | 56 ++++++++++++++------- http-api/app/routes/lookup/__init__.py | 21 +++----- http-api/cli/seeds.py | 25 ++------- http-api/seeds/test-enrollments.jsonl | 3 +- http-api/seeds/test-users.jsonl | 8 +-- 5 files changed, 55 insertions(+), 58 deletions(-) diff --git a/http-api/app/routes/enrollments/__init__.py b/http-api/app/routes/enrollments/__init__.py index 26d6ac6..a9f7661 100644 --- a/http-api/app/routes/enrollments/__init__.py +++ b/http-api/app/routes/enrollments/__init__.py @@ -1,17 +1,17 @@ -import json +import urllib.parse as parse from aws_lambda_powertools.event_handler.api_gateway import Router -from elasticsearch import Elasticsearch from layercake.dynamodb import ( - DynamoDBCollection, DynamoDBPersistenceLayer, SortKey, TransactKey, ) +from meilisearch import Client as Meilisearch -import elastic +import meili from boto3clients import dynamodb_client -from config import ELASTIC_CONN, ENROLLMENT_TABLE, USER_TABLE +from config import ENROLLMENT_TABLE, MEILISEARCH_API_KEY, MEILISEARCH_HOST, USER_TABLE +from middlewares import Tenant, TenantMiddleware from .cancel import router as cancel from .enroll import router as enroll @@ -21,30 +21,52 @@ __all__ = ['slots', 'cancel', 'enroll'] router = Router() -elastic_client = Elasticsearch(**ELASTIC_CONN) enrollment_layer = DynamoDBPersistenceLayer(ENROLLMENT_TABLE, dynamodb_client) -enrollment_collect = DynamoDBCollection(enrollment_layer) user_layer = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) -user_collect = DynamoDBCollection(user_layer) +meili_client = Meilisearch(MEILISEARCH_HOST, MEILISEARCH_API_KEY) -@router.get('/', compress=True, tags=['Enrollment']) +@router.get( + '/', + compress=True, + tags=['Enrollment'], + middlewares=[ + TenantMiddleware(user_layer.collection), + ], +) def get_enrollments(): + tenant: Tenant = router.context['tenant'] event = router.current_event - query = event.get_query_string_value('query', '{}') - page_size = event.get_query_string_value('page_size', '25') + query = parse.unquote(event.get_query_string_value('q', '')) + sort = event.get_query_string_value('sort', 'create_date:desc') + page = int(event.get_query_string_value('page', '1')) + hits_per_page = int(event.get_query_string_value('hitsPerPage', '25')) + filter_ = meili.parse(event.get_query_string_value('filter', '')) - return elastic.search( # type: ignore - index=ENROLLMENT_TABLE, - page_size=int(page_size), - query=json.loads(query), - elastic_client=elastic_client, + if tenant.id != '*': + filter_ = [ + { + 'attr': 'tenant_id', + 'op': '=', + 'value': tenant.id, + }, + ] + filter_ + + return meili_client.index(ENROLLMENT_TABLE).search( + query, + { + 'sort': [sort], + 'locales': ['pt'], + 'page': page, + 'hitsPerPage': hits_per_page, + 'filter': meili.encode(filter_), + }, ) @router.get('/', compress=True, tags=['Enrollment']) def get_enrollment(id: str): - return enrollment_collect.get_items( + return enrollment_layer.collection.get_items( TransactKey(id) + SortKey('0') + SortKey('started_date') diff --git a/http-api/app/routes/lookup/__init__.py b/http-api/app/routes/lookup/__init__.py index 202ca8e..ddc1a7b 100644 --- a/http-api/app/routes/lookup/__init__.py +++ b/http-api/app/routes/lookup/__init__.py @@ -2,29 +2,22 @@ from http import HTTPStatus from aws_lambda_powertools.event_handler import Response, content_types from aws_lambda_powertools.event_handler.api_gateway import Router -from elasticsearch import Elasticsearch -from elasticsearch_dsl import Search +from glom import glom from layercake.funcs import pick +from meilisearch import Client as Meilisearch -from config import ELASTIC_CONN, USER_TABLE +from config import MEILISEARCH_API_KEY, MEILISEARCH_HOST, USER_TABLE router = Router() -elastic_client = Elasticsearch(**ELASTIC_CONN) +meili_client = Meilisearch(MEILISEARCH_HOST, MEILISEARCH_API_KEY) @router.get('/', include_in_schema=False) def lookup(username: str): - s = Search(using=elastic_client, index=USER_TABLE).query( - 'bool', - should=[ - {'term': {'email.keyword': username}}, - {'term': {'cpf.keyword': username}}, - ], - minimum_should_match=1, - ) + r = meili_client.index(USER_TABLE).search(f'"{username}"') - for hit in s.execute(): - return pick(('id', 'name', 'email', 'cognito:sub'), hit.to_dict()) + if user := glom(r, 'hits.0', default=None): + return pick(('id', 'name', 'email', 'cognito__sub'), user) return Response( content_type=content_types.APPLICATION_JSON, diff --git a/http-api/cli/seeds.py b/http-api/cli/seeds.py index 19b016a..c43ede9 100644 --- a/http-api/cli/seeds.py +++ b/http-api/cli/seeds.py @@ -109,22 +109,6 @@ if __name__ == '__main__': for line in tqdm(reader, desc=f'Processing lines in {file}'): put_item(line, table_name, dynamodb_client) # type: ignore - # Scan DynamoDB tables and index the data into Elasticsearch - # for file in tqdm(jsonl_files, desc='Scanning tables'): - # table_name = file.removesuffix('.jsonl') - # elastic.delete_index(table_name) - - # for doc in tqdm( - # scan_table( - # table_name, - # dynamodb_client, - # FilterExpression='sk = :sk', - # ExpressionAttributeValues={':sk': {'S': '0'}}, - # ), - # desc=f'Indexing {table_name}', - # ): - # elastic.index_item(id=doc['id'], index=table_name, doc=doc) - # Scan DynamoDB tables and index the data into Meilisearch for file in tqdm(jsonl_files, desc='Scanning tables'): table_name = file.removesuffix('.jsonl') @@ -139,15 +123,12 @@ if __name__ == '__main__': desc=f'Indexing {table_name}', ): meili_client.index(table_name).add_documents([doc], serializer=JSONEncoder) - - if table_name == 'test-enrollments': - print('a') - print(doc) + meili_client.index('pytest').add_documents([doc], serializer=JSONEncoder) index = meili_client.index(table_name) index.update_settings( { - 'sortableAttributes': ['create_date'], - 'filterableAttributes': ['metadata__tenant_id'], + 'sortableAttributes': ['create_date', 'createDate'], + 'filterableAttributes': ['tenant_id', 'status'], } ) diff --git a/http-api/seeds/test-enrollments.jsonl b/http-api/seeds/test-enrollments.jsonl index 4d81f0f..98d81d7 100644 --- a/http-api/seeds/test-enrollments.jsonl +++ b/http-api/seeds/test-enrollments.jsonl @@ -103,4 +103,5 @@ {"id": {"S": "N9VpcNSKGaXx3aGeGihqeE"}, "sk": {"S": "0"}, "status": {"S": "ARCHIVED"}, "progress": {"S": "100"}, "score": {"S": "87"}, "user": {"M": {"id": {"S": "af200eb9-8084-4275-a0c2-749f4d1d023f"}, "name": {"S": "Jonas Cabral"}, "email": {"S": "jonas.cabral@unigel.com.br"}, "cpf": {"S": "29181018851"}}}, "course": {"M": {"id": {"S": "83"}, "name": {"S": "NR-20 Inicia\u00e7\u00e3o"}, "cert": {"NULL": true}, "access_period": {"N": "360"}}}, "create_date": {"S": "2022-07-22T14:14:41"}, "update_date": {"S": "2024-03-31T21:02:50.678858-03:00"}} {"id": {"S": "YREgchZHhYLiYaSKBtT9Fm"}, "sk": {"S": "0"}, "status": {"S": "ARCHIVED"}, "progress": {"S": "100"}, "score": {"S": "87"}, "user": {"M": {"id": {"S": "ff19941a-9471-48de-8fe7-6858e9ce4549"}, "name": {"S": "Jose Alessandro De Souza"}, "email": {"S": "jose.souza@semeq.com"}, "cpf": {"S": "00878884165"}}}, "course": {"M": {"id": {"S": "54"}, "name": {"S": "NR-33 Trabalhadores Autorizados e Vigias em Espa\u00e7o Confinado"}, "cert": {"NULL": true}, "access_period": {"N": "360"}}}, "create_date": {"S": "2019-05-23T10:32:46"}, "update_date": {"S": "2021-05-27T10:09:06"}} {"id": {"S": "kMKA4jzGnT6GwwXfvqWxW9"}, "sk": {"S": "0"}, "status": {"S": "ARCHIVED"}, "progress": {"S": "100"}, "score": {"S": "88"}, "user": {"M": {"id": {"S": "68278489572"}, "name": {"S": "ALEXSANDRO SANTOS DE OLIVEIRA"}, "email": {"S": "68278489572@users.noreply.betaeducacao.com.br"}, "cpf": {"S": "68278489572"}}}, "course": {"M": {"id": {"S": "40"}, "name": {"S": "Reciclagem em NR-10 B\u00e1sico"}, "cert": {"NULL": true}, "access_period": {"N": "360"}}}, "create_date": {"S": "2022-05-19T08:37:15"}, "update_date": {"S": "2024-05-16T19:19:29.284660-03:00"}} -{"id": {"S": "c6AmTVrLo2fACM93MG866m"}, "sk": {"S": "0"}, "status": {"S": "ARCHIVED"}, "progress": {"S": "100"}, "score": {"S": "100"}, "user": {"M": {"id": {"S": "6093"}, "name": {"S": "Sergio Weinfuter"}, "email": {"S": "sweinfuter@hotmail.com"}, "cpf": {"S": "75326256991"}}}, "course": {"M": {"id": {"S": "62"}, "name": {"S": "NR-12 M\u00e1quinas e Equipamentos"}, "cert": {"NULL": true}, "access_period": {"N": "360"}}}, "create_date": {"S": "2015-05-11T00:00:00"}, "update_date": {"S": "2019-01-16T10:33:32"}} \ No newline at end of file +{"id": {"S": "c6AmTVrLo2fACM93MG866m"}, "sk": {"S": "0"}, "status": {"S": "ARCHIVED"}, "progress": {"S": "100"}, "score": {"S": "100"}, "user": {"M": {"id": {"S": "6093"}, "name": {"S": "Sergio Weinfuter"}, "email": {"S": "sweinfuter@hotmail.com"}, "cpf": {"S": "75326256991"}}}, "course": {"M": {"id": {"S": "62"}, "name": {"S": "NR-12 M\u00e1quinas e Equipamentos"}, "cert": {"NULL": true}, "access_period": {"N": "360"}}}, "create_date": {"S": "2015-05-11T00:00:00"}, "update_date": {"S": "2019-01-16T10:33:32"}} +{"id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"},"sk": {"S": "QV4sXY3DvSTUMGJ4QqsrwJ#280cdb77-f6b6-4bd3-bbbf-f770de69389c"},"course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"},"name": {"S": "NR-18 PEMT PTA"},"time_in_days": {"N": "365"}}},"create_date": {"S": "2025-04-28T12:04:09.389782-03:00"}} \ No newline at end of file diff --git a/http-api/seeds/test-users.jsonl b/http-api/seeds/test-users.jsonl index 2aa1472..16b0d7e 100644 --- a/http-api/seeds/test-users.jsonl +++ b/http-api/seeds/test-users.jsonl @@ -1,5 +1,5 @@ {"id": {"S": "apikey"}, "sk": {"S": "MzI1MDQ0NTctZjEzMy00YzAwLTkzNmItNmFhNzEyY2E5ZjQw"}, "tenant": {"M": {"id": {"S": "*"}, "name": {"S": "default"}}}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "name": {"S": "Sérgio R Siqueira"}, "email": {"S": "sergio@somosbeta.com.br"}}}} -{"updateDate": {"S": "2024-02-08T16:42:33.776409-03:00"}, "createDate": {"S": "2019-03-25T00:00:00-03:00"}, "email_verified": {"BOOL": true}, "cognito:sub": {"S": "58efed8d-d276-41a8-8502-4ab8b5a6415e"}, "cpf": {"S": "07879819908"}, "sk": {"S": "0"}, "email": {"S": "sergio@somosbeta.com.br"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}, "lastLogin": {"S": "2024-02-08T20:53:45.818126-03:00"}, "orgs": {"L": [{"S": "cJtK9SsnJhKPyxESe7g3DG"}, {"S": "edp8njvgQuzNkLx2ySNfAD"}, {"S": "8TVSi5oACLxTiT8ycKPmaQ"}]}} +{"updateDate": {"S": "2024-02-08T16:42:33.776409-03:00"}, "createDate": {"S": "2019-03-25T00:00:00-03:00"}, "email_verified": {"BOOL": true}, "cognito:sub": {"S": "58efed8d-d276-41a8-8502-4ab8b5a6415e"}, "cpf": {"S": "07879819908"}, "sk": {"S": "0"}, "email": {"S": "sergio@somosbeta.com.br"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}, "lastLogin": {"S": "2024-02-08T20:53:45.818126-03:00"}, "tenant_id": {"L": [{"S": "cJtK9SsnJhKPyxESe7g3DG"}, {"S": "edp8njvgQuzNkLx2ySNfAD"}, {"S": "8TVSi5oACLxTiT8ycKPmaQ"}]}} {"sk": {"S": "acl#admin"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "create_date": {"S": "2022-06-13T15:00:24.309410-03:00"}} {"email_verified": {"BOOL": true}, "update_date": {"S": "2024-02-08T16:42:33.776409-03:00"}, "create_date": {"S": "2024-01-19T22:53:43.135080-03:00"}, "deliverability": {"S": "DELIVERABLE"}, "sk": {"S": "emails#osergiosiqueira@gmail.com"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "primaryEmail": {"BOOL": false}, "mx_record_exists": {"BOOL": true}} {"email_verified": {"BOOL": true}, "update_date": {"S": "2024-02-08T16:42:33.776409-03:00"}, "create_date": {"S": "2019-03-25T00:00:00-03:00"}, "sk": {"S": "emails#sergio@somosbeta.com.br"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email_primary": {"BOOL": true}, "mx_record_exists": {"BOOL": true}, "update_date": {"S": "2023-11-09T12:13:04.308986-03:00"}} @@ -29,7 +29,7 @@ {"sk": {"S": "admin#hT2CD9lDeeqlOXLjR4mG"}, "create_date": {"S": "2023-09-22T18:27:30.344151-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "alessandraw@unc.br"}, "name": {"S": "Alessandra Wagner Jusviacky"}} {"emailVerified": {"BOOL": true}, "createDate": {"S": "2023-09-22T18:27:30.193484-03:00"}, "sk": {"S": "emails#org+15608435000190@users.noreply.betaeducacao.com.br"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "primaryEmail": {"BOOL": true}, "emailDeliverable": {"BOOL": true}} {"expiry_date": {"S": "2024-07-08T17:38:29.159112-03:00"}, "user": {"M": {"name": {"S": "S\u00e9rgio R Siqueira"}, "email": {"S": "sergio@somosbeta.com.br"}}}, "ttl": {"N": "1720471109"}, "sk": {"S": "schedules#follow_up#5OxmMjL-ujoR5IMGegQz"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-01-10T17:38:29.159148-03:00"}} -{"updateDate": {"S": "2022-08-09T09:44:39.386636-03:00"}, "createDate": {"S": "2022-06-13T10:20:00.528685-03:00"}, "status": {"S": "CONFIRMED"}, "cpf": {"S": "08679004901"}, "sk": {"S": "0"}, "email": {"S": "tiago@somosbeta.com.br"}, "id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "mobileNumber": {"S": ""}, "name": {"S": "Tiago Maciel"}, "lastLogin": {"S": "2024-02-07T11:14:34.516596-03:00"}, "orgs": {"L": [{"S": "cJtK9SsnJhKPyxESe7g3DG"}]}} +{"updateDate": {"S": "2022-08-09T09:44:39.386636-03:00"}, "createDate": {"S": "2022-06-13T10:20:00.528685-03:00"}, "status": {"S": "CONFIRMED"}, "cpf": {"S": "08679004901"}, "sk": {"S": "0"}, "email": {"S": "tiago@somosbeta.com.br"}, "id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "mobileNumber": {"S": ""}, "name": {"S": "Tiago Maciel"}, "lastLogin": {"S": "2024-02-07T11:14:34.516596-03:00"}, "tenant_id": {"L": [{"S": "cJtK9SsnJhKPyxESe7g3DG"}]}} {"emailVerified": {"BOOL": true}, "updateDate": {"S": "2022-08-09T09:44:39.400384-03:00"}, "createDate": {"S": "2022-06-13T10:20:00.528685-03:00"}, "sk": {"S": "emails#tiago@somosbeta.com.br"}, "id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "primaryEmail": {"BOOL": true}, "emailDeliverable": {"BOOL": true}} {"emailVerified": {"BOOL": true}, "updateDate": {"S": "2022-08-09T09:44:39.400384-03:00"}, "createDate": {"S": "2022-06-13T10:20:00.528685-03:00"}, "sk": {"S": "emails#tiago+1@somosbeta.com.br"}, "id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "primaryEmail": {"BOOL": false}, "emailDeliverable": {"BOOL": true}} {"emailVerified": {"BOOL": true}, "updateDate": {"S": "2022-08-09T09:44:39.400384-03:00"}, "createDate": {"S": "2022-06-13T10:20:00.528685-03:00"}, "sk": {"S": "emails#tiago+2@somosbeta.com.br"}, "id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "primaryEmail": {"BOOL": false}, "emailDeliverable": {"BOOL": true}} @@ -55,7 +55,7 @@ {"id": {"S": "5ad1d654-efe5-4bcf-8016-332677c4ba61"}, "sk": {"S": "0"}, "createDate": {"S": "2023-09-22T18:34:46.517274-03:00"}, "email": {"S": "vera@somosbeta.com.br"}, "name": {"S": "Vera L\u00facia Machado"}, "status": {"S": "CREATED"}, "updateDate": {"S": "2024-02-26T14:58:50.688790-03:00"}} {"id": {"S": "5ad1d654-efe5-4bcf-8016-332677c4ba61"}, "sk": {"S": "emails#vera@somosbeta.com.br"}, "createDate": {"S": "2024-02-26T14:45:04.980636-03:00"}, "deliverability": {"S": "DELIVERABLE"}, "emailVerified": {"BOOL": false}, "primaryEmail": {"BOOL": true}, "updateDate": {"S": "2024-02-26T14:51:30.188894-03:00"}} {"id": {"S": "email"}, "sk": {"S": "vera@somosbeta.com.br"}, "createDate": {"S": "2019-11-12T00:00:00-03:00"}, "userRefId": {"S": "5ad1d654-efe5-4bcf-8016-332677c4ba61"}} -{"updateDate": {"S": "2024-02-08T16:42:33.776409-03:00"}, "createDate": {"S": "2019-03-25T00:00:00-03:00"}, "status": {"S": "CONFIRMED"}, "sk": {"S": "0"}, "email": {"S": "maite@somosbeta.com.br"}, "id": {"S": "ZoV7w6mZsdAABjXzeAodSQ"}, "name": {"S": "Mait\u00ea Laurenti Siqueira"}, "lastLogin": {"S": "2024-02-08T20:53:45.818126-03:00"}, "orgs": {"L": [{"S": "cJtK9SsnJhKPyxESe7g3DG"}]}} +{"updateDate": {"S": "2024-02-08T16:42:33.776409-03:00"}, "createDate": {"S": "2019-03-25T00:00:00-03:00"}, "status": {"S": "CONFIRMED"}, "sk": {"S": "0"}, "email": {"S": "maite@somosbeta.com.br"}, "id": {"S": "ZoV7w6mZsdAABjXzeAodSQ"}, "name": {"S": "Mait\u00ea Laurenti Siqueira"}, "lastLogin": {"S": "2024-02-08T20:53:45.818126-03:00"}, "tenant_id": {"L": [{"S": "cJtK9SsnJhKPyxESe7g3DG"}]}} {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "orgs#cJtK9SsnJhKPyxESe7g3DG"}, "cnpj": {"S": "15608435000190"}, "create_date": {"S": "2023-12-24T20:50:27.656310-03:00"}, "name": {"S": "Beta Educa\u00e7\u00e3o"}} {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "orgs#edp8njvgQuzNkLx2ySNfAD"}, "cnpj": {"S": "13573332000107"}, "create_date": {"S": "2023-12-24T20:50:27.656310-03:00"}, "name": {"S": "KORD S.A"}} {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "acls#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2022-06-13T15:00:24.309410-03:00"}, "roles": {"L": [{"S": "ADMIN"}]}} @@ -70,6 +70,6 @@ {"id": {"S": "webhook_requests#*#0e7f4d2e62ec525fc94465a6dd7299d2"}, "sk": {"S": "2025-03-03T15:47:42.039256-03:00"}, "request": {"M": {"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "headers": {"M": {"Accept": {"S": "*/*"}, "Accept-Encoding": {"S": "gzip, deflate"}, "Connection": {"S": "keep-alive"}, "Content-Length": {"S": "108"}, "Content-Type": {"S": "application/json"}, "User-Agent": {"S": "eduseg/python-requests/2.32.3"}}}, "payload": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}}}, "response": {"M": {"body": {"S": "{\"message\":\"Workflow was started\"}"}, "elapsed_time": {"S": "0.14"}, "headers": {"M": {"alt-svc": {"S": "h3=\":443\"; ma=86400"}, "cf-cache-status": {"S": "DYNAMIC"}, "CF-RAY": {"S": "8fc528b57b62a3f0-GRU"}, "Connection": {"S": "keep-alive"}, "Content-Length": {"S": "34"}, "Content-Type": {"S": "application/json; charset=utf-8"}, "Date": {"S": "Fri, 03 Jan 2025 18:47:44 GMT"}, "etag": {"S": "W/\"22-6OS7cK0FzqnV2NeDHdOSGS1bVUs\""}, "NEL": {"S": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}"}, "Report-To": {"S": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=FMkgKCTOnFvNgtE30yiYnM4XtK8q99O62s7Ep57KDNc3YGiy3W1j%2BzfS0vqJNylSAn5viU3MMGJvTIwPsYQ6jQ298t1p0hYd1KPwURhxchME4hc%2BsO0NNAv%2FFEpXv1ZYWw%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}"}, "Server": {"S": "cloudflare"}, "server-timing": {"S": "cfL4;desc=\"?proto=TCP&rtt=1016&min_rtt=998&rtt_var=411&sent=4&recv=7&lost=0&retrans=0&sent_bytes=2836&recv_bytes=999&delivery_rate=2522648&cwnd=251&unsent_bytes=0&cid=1b26053952909423&ts=93&x=0\""}, "Strict-Transport-Security": {"S": "max-age=0; includeSubDomains"}, "vary": {"S": "Accept-Encoding"}}}, "status_code": {"S": "200"}}}, "update_date": {"S": "2025-01-03T15:47:44.537597-03:00"}, "url": {"S": "https://n8n.sergio.run/webhook/56bb43b8-533c-4e8b-bdaa-3f7c2b0e548f"}} {"id": {"S": "webhooks#*"}, "sk": {"S": "1e3759c9c4cfa7aaf86ac281bdb8fd6f"}, "author": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}, "create_date": {"S": "2025-01-06T15:00:39.363207-03:00"}, "event_type": {"S": "insert"}, "resource": {"S": "users"}, "url": {"S": "https://hook.us2.make.com/hgkc5oj5dbpfld5qvu1xmsu22ond93l9"}} {"id": {"S": "log:5OxmMjL-ujoR5IMGegQz"},"sk": {"S": "2024-02-26T11:48:17.605911-03:00"},"action": {"S": "OPEN_EMAIL"},"data": {"M": {"ip_address": {"S": "66.249.83.73"},"message_id": {"S": "0103018de5de75cf-670bf01f-7ccf-4ce0-88b4-7c85cd0d06d0-000000"},"recipients": {"L": [{"S": "sergio@somosbeta.com.br"}]},"subject": {"S": "Re: (sem assunto)"},"timestamp": {"S": "2024-02-26T14:48:16.976Z"},"user_agent": {"S": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)"}}},"ttl": {"N": "1772030897"}} -{"id": {"S": "7zf52CWrTS3csRBFWU5rkq"},"sk": {"S": "0"},"cognito:sub": {"S": "58efed8d-d276-41a8-8502-4ab8b5a6415e"},"cpf": {"S": "04330965275"},"createDate": {"S": "2025-04-08T10:24:46.493980-03:00"},"email": {"S": "barbara.gomes@sinobras.com.br"},"email_verified": {"BOOL": true},"konviva:id": {"N": "199205"},"lastLogin": {"S": "2025-04-10T12:01:48.380215-03:00"},"name": {"S": "Barbara Kamyla Vasconcelos Gomes"},"tenant__org_id": {"SS": ["EkvQwpmmL6vzWtJunM5dCJ"]},"update_date": {"S": "2025-04-10T08:50:22.530758-03:00"}} +{"id": {"S": "7zf52CWrTS3csRBFWU5rkq"},"sk": {"S": "0"},"cognito:sub": {"S": "58efed8d-d276-41a8-8502-4ab8b5a6415e"},"cpf": {"S": "04330965275"},"createDate": {"S": "2025-04-08T10:24:46.493980-03:00"},"email": {"S": "barbara.gomes@sinobras.com.br"},"email_verified": {"BOOL": true},"konviva:id": {"N": "199205"},"lastLogin": {"S": "2025-04-10T12:01:48.380215-03:00"},"name": {"S": "Barbara Kamyla Vasconcelos Gomes"},"tenant_id": {"SS": ["EkvQwpmmL6vzWtJunM5dCJ"]},"update_date": {"S": "2025-04-10T08:50:22.530758-03:00"}} {"id": {"S": "7zf52CWrTS3csRBFWU5rkq"},"sk": {"S": "acls#EkvQwpmmL6vzWtJunM5dCJ"},"create_date": {"S": "2025-04-10T09:36:41.133157-03:00"},"roles": {"L": [{"S": "ADMIN"}]}} {"id": {"S": "7zf52CWrTS3csRBFWU5rkq"},"sk": {"S": "orgs#EkvQwpmmL6vzWtJunM5dCJ"},"cnpj": {"S": "07933914000154"},"create_date": {"S": "2025-04-08T10:24:46.493980-03:00"},"name": {"S": "SIDERURGICA NORTE BRASIL S.A"}}