diff --git a/http-api/.env b/http-api/.env.sample similarity index 57% rename from http-api/.env rename to http-api/.env.sample index 1150530..2c8fe64 100644 --- a/http-api/.env +++ b/http-api/.env.sample @@ -1,6 +1,9 @@ # If UV does not load this file, try running `export UV_ENV_FILE=.env` # See more details at https://docs.astral.sh/uv/configuration/files/#env -ELASTIC_HOSTS=http://localhost:9200 +KONVIVA_API_URL=https://saladeaula.digital +KONVIVA_SECRET_KEY= +ELASTIC_HOSTS=http://127.0.0.1:9200 +DYNAMODB_ENDPOINT_URL=http://127.0.0.1:8000 DYNAMODB_PARTITION_KEY=id DYNAMODB_SORT_KEY=sk diff --git a/http-api/.gitignore b/http-api/.gitignore new file mode 100644 index 0000000..cb7de10 --- /dev/null +++ b/http-api/.gitignore @@ -0,0 +1,2 @@ +.env +samlocal.env.json diff --git a/http-api/Makefile b/http-api/Makefile index 0a08262..b047a31 100644 --- a/http-api/Makefile +++ b/http-api/Makefile @@ -10,3 +10,9 @@ start-api: build openapi: uv run openapi.py && \ uv run python -m http.server 80 -d swagger + +pytest: + uv run pytest + +htmlcov: pytest + uv run python -m http.server 80 -d htmlcov diff --git a/http-api/app.py b/http-api/app.py index ed8d014..f4ac2dd 100644 --- a/http-api/app.py +++ b/http-api/app.py @@ -9,7 +9,7 @@ from aws_lambda_powertools.logging import correlation_paths from aws_lambda_powertools.utilities.typing import LambdaContext from middlewares import AuthorizerMiddleware -from routes import courses, enrollments, lookup, orders, settings, users, webhooks +from routes import courses, enrollments, lookup, orders, me, users, webhooks tracer = Tracer() logger = Logger(__name__) @@ -20,7 +20,7 @@ app.include_router(enrollments.router, prefix='/enrollments') app.include_router(orders.router, prefix='/orders') app.include_router(users.router, prefix='/users') app.include_router(webhooks.router, prefix='/webhooks') -app.include_router(settings.router, prefix='/settings') +app.include_router(me.router, prefix='/me') app.include_router(lookup.router, prefix='/lookup') diff --git a/http-api/boto3clients.py b/http-api/boto3clients.py new file mode 100644 index 0000000..2abb447 --- /dev/null +++ b/http-api/boto3clients.py @@ -0,0 +1,15 @@ +import os + +import boto3 + +DYNAMODB_ENDPOINT_URL: str | None = None + +if 'AWS_SAM_LOCAL' in os.environ: + DYNAMODB_ENDPOINT_URL = 'http://host.docker.internal:8000' + + +if 'DYNAMODB_ENDPOINT_URL' in os.environ: + DYNAMODB_ENDPOINT_URL = os.getenv('DYNAMODB_ENDPOINT_URL') + + +dynamodb_client = boto3.client('dynamodb', endpoint_url=DYNAMODB_ENDPOINT_URL) diff --git a/http-api/cli.py b/http-api/cli.py new file mode 100644 index 0000000..9bd1bb3 --- /dev/null +++ b/http-api/cli.py @@ -0,0 +1,110 @@ +from typing import Any, Generator + +import layercake.jsonl as jsonl +from elasticsearch import Elasticsearch +from layercake.dynamodb import deserialize +from tqdm import tqdm + +from boto3clients import dynamodb_client + +elastic_client = Elasticsearch('http://127.0.0.1:9200') +files = ( + 'test-orders.jsonl', + 'test-users.jsonl', + 'test-enrollments.jsonl', + 'test-courses.jsonl', +) + + +def put_item(item: dict, table_name: str, *, dynamodb_client) -> bool: + try: + dynamodb_client.put_item( + TableName=table_name, + Item=item, + ) + except Exception: + return False + else: + return True + + +def scan_table(table_name: str, *, dynamodb_client, **kwargs) -> Generator: + try: + r = dynamodb_client.scan(TableName=table_name, **kwargs) + except Exception: + yield from () + else: + for item in r['Items']: + yield deserialize(item) + + if 'LastEvaluatedKey' in r: + yield from scan_table( + table_name, + dynamodb_client=dynamodb_client, + ExclusiveStartKey=r['LastEvaluatedKey'], + ) + + +def _serialize_python_type(value: Any) -> Any: + if isinstance(value, dict): + return {k: _serialize_python_type(v) for k, v in value.items()} + + if isinstance(value, set): + return list(value) + + if isinstance(value, list): + return [_serialize_python_type(v) for v in value] + + return value + + +def index_item( + id: str, + index: str, + doc: dict, + *, + elastic_client: Elasticsearch, +): + return elastic_client.index( + index=index, + id=id, + document=_serialize_python_type(doc), + ) + + +def delete_index(index: str, *, elastic_client: Elasticsearch) -> bool: + try: + elastic_client.indices.delete(index=index) + except Exception: + return False + else: + return True + + +if __name__ == '__main__': + for file in tqdm(files, desc='Processing files'): + with jsonl.readlines(f'seeds/{file}') as lines: + table_name = file.removesuffix('.jsonl') + + for line in tqdm(lines, desc=f'Processing lines in {file}'): + put_item(line, table_name, dynamodb_client=dynamodb_client) + + for file in tqdm(files, desc='Scanning tables'): + table_name = file.removesuffix('.jsonl') + delete_index(table_name, elastic_client=elastic_client) + + for record in tqdm( + scan_table( + table_name, + dynamodb_client=dynamodb_client, + FilterExpression='sk = :sk', + ExpressionAttributeValues={':sk': {'S': '0'}}, + ), + desc=f'Indexing {table_name}', + ): + index_item( + id=record['id'], + index=table_name, + doc=record, + elastic_client=elastic_client, + ) diff --git a/http-api/konviva.py b/http-api/konviva.py new file mode 100644 index 0000000..d3dbeec --- /dev/null +++ b/http-api/konviva.py @@ -0,0 +1,49 @@ +from dataclasses import asdict, dataclass +from urllib.parse import quote as urlquote +from urllib.parse import urlencode, urlparse + +import requests +from aws_lambda_powertools.event_handler.exceptions import BadRequestError +from glom import glom + +from settings import KONVIVA_API_URL, KONVIVA_SECRET_KEY + + +class KonvivaError(BadRequestError): + pass + + +@dataclass +class KonvivaToken: + login: str + token: str + nonce: str + + +def token(username: str) -> KonvivaToken: + url = urlparse(KONVIVA_API_URL)._replace( + path='/action/api/usuarios/token', + query=f'login={urlquote(username)}', + ) + + headers = { + 'Authorization': f'KONVIVA {KONVIVA_SECRET_KEY}', + 'Content-Type': 'application/json', + } + + r = requests.get(url.geturl(), headers=headers) + r.raise_for_status() + + if err := glom(r.json(), 'errors.0', default=None): + raise KonvivaError(err) + + return KonvivaToken(**r.json()) + + +def redirect_uri(token: KonvivaToken) -> str: + url = urlparse(KONVIVA_API_URL)._replace( + path='/action/acessoExterno', + query=urlencode(asdict(token)), + ) + + return url.geturl() diff --git a/http-api/pyproject.toml b/http-api/pyproject.toml index d2a85af..9c86c73 100644 --- a/http-api/pyproject.toml +++ b/http-api/pyproject.toml @@ -7,7 +7,12 @@ requires-python = ">=3.12" dependencies = ["layercake"] [dependency-groups] -dev = ["pytest>=8.3.4", "pytest-cov>=6.0.0", "ruff>=0.9.1"] +dev = [ + "pytest>=8.3.4", + "pytest-cov>=6.0.0", + "ruff>=0.9.1", + "tqdm>=4.67.1", +] [tool.pytest.ini_options] addopts = "--cov --cov-report html -v" diff --git a/http-api/routes/me/__init__.py b/http-api/routes/me/__init__.py new file mode 100644 index 0000000..117f706 --- /dev/null +++ b/http-api/routes/me/__init__.py @@ -0,0 +1,40 @@ +from aws_lambda_powertools.event_handler.api_gateway import Router +from layercake.dynamodb import ( + DynamoDBCollection, + DynamoDBPersistenceLayer, + KeyPair, + PrefixKey, +) + +import konviva +from boto3clients import dynamodb_client +from middlewares import AuthenticatedUser +from settings import USER_TABLE + +router = Router() +user_layer = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) +collect = DynamoDBCollection(user_layer) + + +LIMIT = 25 + + +@router.get('/') +def me(): + user: AuthenticatedUser = router.context['user'] + + acls = collect.get_items(KeyPair(user.id, PrefixKey('acls')), limit=LIMIT) + workspaces = collect.get_items(KeyPair(user.id, PrefixKey('orgs')), limit=LIMIT) + + return { + 'acls': acls['items'], + 'workspaces': workspaces['items'], + } + + +@router.get('/konviva') +def konviva_(): + user: AuthenticatedUser = router.context['user'] + token = konviva.token(user.email) + + return {'redirect_uri': konviva.redirect_uri(token)} diff --git a/http-api/routes/settings/__init__.py b/http-api/routes/settings/__init__.py deleted file mode 100644 index b189515..0000000 --- a/http-api/routes/settings/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -from aws_lambda_powertools.event_handler.api_gateway import Router - -router = Router() - - -@router.get('/') -def settings(): - user = router.context['user'] - print(user.email_verified) - - return {} diff --git a/http-api/routes/users/__init__.py b/http-api/routes/users/__init__.py index 4ef0210..6188737 100644 --- a/http-api/routes/users/__init__.py +++ b/http-api/routes/users/__init__.py @@ -2,29 +2,36 @@ import json from http import HTTPStatus from typing import Annotated -import boto3 from aws_lambda_powertools.event_handler.api_gateway import ( Response, Router, ) +from aws_lambda_powertools.event_handler.exceptions import ( + BadRequestError as PowertoolsBadRequestError, +) from elasticsearch import Elasticsearch from layercake.dynamodb import ( ComposeKey, DynamoDBCollection, DynamoDBPersistenceLayer, KeyPair, + MissingError, PartitionKey, ) from pydantic import UUID4, BaseModel, StringConstraints import elastic +from boto3clients import dynamodb_client from models import User from settings import ELASTIC_CONN, USER_TABLE + +class BadRequestError(MissingError, PowertoolsBadRequestError): ... + + router = Router() -dynamodb_client = boto3.client('dynamodb') user_layer = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) -collect = DynamoDBCollection(user_layer) +collect = DynamoDBCollection(user_layer, exception_cls=BadRequestError) elastic_client = Elasticsearch(**ELASTIC_CONN) @@ -47,7 +54,7 @@ def get_users(): ) -@router.post('/', compress=True, tags=['User'], description='Create user') +@router.post('/', compress=True, tags=['User'], summary='Create user') def post_user(payload: User): return Response(status_code=HTTPStatus.CREATED) @@ -57,11 +64,21 @@ class NewPasswordPayload(BaseModel): new_password: Annotated[str, StringConstraints(min_length=6)] -@router.patch('/', compress=True, tags=['User']) +@router.patch('/', compress=True, tags=['User'], summary='') def patch_reset(id: str, payload: NewPasswordPayload): return Response(status_code=HTTPStatus.OK) +@router.get('/', compress=True, tags=['User'], summary='Get user') +def get_user(id: str): + return collect.get_item(KeyPair(id, '0')) + + +@router.get('//idp', compress=True, include_in_schema=False) +def get_idp(id: str): + return [] + + @router.get( '//emails', compress=True, diff --git a/http-api/samlocal.env.json b/http-api/samlocal.env.json.sample similarity index 83% rename from http-api/samlocal.env.json rename to http-api/samlocal.env.json.sample index 5f21839..76ab273 100644 --- a/http-api/samlocal.env.json +++ b/http-api/samlocal.env.json.sample @@ -1,5 +1,6 @@ { "Parameters": { + "KONVIVA_API_KEY": "", "USER_TABLE": "test-users", "ORDER_TABLE": "test-orders", "ENROLLMENT_TABLE": "test-enrollments" diff --git a/http-api/seeds/test-courses.jsonl b/http-api/seeds/test-courses.jsonl new file mode 100644 index 0000000..ebaab5d --- /dev/null +++ b/http-api/seeds/test-courses.jsonl @@ -0,0 +1 @@ +{"id": {"S": "gzcy9v85KGRT29fyhstuHV"},"sk": {"S": "0"},"access_period": {"N": "365"},"cert": {"M": {"id": {"S": "certs#ADu8ZacrZ5ZunbYWii6NFJ"},"exp_interval": {"N": "730"},"s3_uri": {"S": ""}}},"create_date": {"S": "2024-12-30T00:00:33.088916-03:00"},"konviva:class_id": {"N": "21"},"name": {"S": "NR-10 Básico"},"tenant:org_id": {"SS": ["5OxmMjL-ujoR5IMGegQz"]}} diff --git a/http-api/seeds/test-enrollments.jsonl b/http-api/seeds/test-enrollments.jsonl new file mode 100644 index 0000000..d439f1b --- /dev/null +++ b/http-api/seeds/test-enrollments.jsonl @@ -0,0 +1,94 @@ +{"course": {"M": {"name": {"S": "Reciclagem de NR-11 Seguran\u00e7a na Opera\u00e7\u00e3o de Rebocadores"}, "time_in_days": {"N": "360"}, "id": {"S": "f78d2241-13fd-45ab-81cc-0acb781b4107"}}}, "progress": {"N": "0"}, "status": {"S": "CREATED"}, "score": {"N": "0"}, "user": {"M": {"name": {"S": "S\u00e9rgio R Siqueira"}, "cpf": {"S": "07879819908"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email": {"S": "sergio@somosbeta.com.br"}}}, "sk": {"S": "0"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "create_date": {"S": "2023-08-18T07:48:34"}, "update_date": {"S": "2023-08-18T07:48:34"}} +{"sk": {"S": "konviva"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "create_date": {"S": "2023-08-18T07:48:34"}, "konviva_id": {"N": "227924"}} +{"sk": {"S": "manager"}, "user_id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "name": {"S": "Beta Educa\u00e7\u00e3o"}, "create_date": {"S": "2023-08-18T07:48:34"}} +{"ttl": {"S": "1720867714"}, "sk": {"S": "schedules#access_period_ends"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "expiry_date": {"S": "2024-07-13T07:48:34"}, "create_date": {"S": "2023-08-18T07:48:34"}} +{"ttl": {"N": "1723459714"}, "sk": {"S": "schedules#archive_it"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "expiry_date": {"S": "2024-08-12T07:48:34"}, "create_date": {"S": "2023-08-18T07:48:34"}} +{"sk": {"S": "227924"}, "enrollment_id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "id": {"S": "konviva"}, "create_date": {"S": "2023-08-18T07:48:34"}} +{"sk": {"S": "KpZTYvu4RzgMJW3A2DF6cC#N4i4nJQC5wSyVUMTPYUnEh"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-25T23:52:59.142046-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#N4i4nJQC5wSyVUMTPYUnEh"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.142046-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#WR3RmmMGbuHL9tL3QkJVdQ"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#T6xfkFj3vaJiafT3rMEAxA"}, "course": {"M": {"name": {"S": "CIPA Grau de risco 1"}, "time_in_days": {"N": "180"}, "id": {"S": "V6Db4R6FwUqiRt9cG2s3tX"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#GNo8r7EMr9mF73tPH3Tvnc"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#g2ALhXLTMAoYGL6bKLGfw4"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#dTPNAPqgHWJkp9fZNMV5z9"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#L9nj8icPe5AjjqTj3NPYQr"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#cEyUG6LpC9LRC3PxbnwKA4"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#CipadCpxm4BKNdV49Vvtkt"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#SFzHrLevDTFtsYdbacGcgo"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#MwB6yuDE9RETBBXX3vt6gk"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#edp8njvgQuzNkLx2ySNfAD"}, "org_name": {"S": "KORD S.A"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"ttl_date": {"S": "2025-09-03T00:00:00-03:06"}, "vacancy": {"M": {"id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#WR3RmmMGbuHL9tL3QkJVdQ"}}}, "author": {"M": {"name": {"S": "Tiago Maciel"}, "id": {"S": "123"}}}, "sk": {"S": "2025-09-03#0119847523107d306331118b72292eb0"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "scheduled_items#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-11-01T17:31:53.816688-03:00"}, "user": {"M": {"name": {"S": "S\u00e9rgio R Siqueira"}, "cpf": {"S": "07879819908"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email": {"S": "sergio@somosbeta.com.br"}}}, "ttl": {"N": "1756868760"}} +{"ttl_date": {"S": "2025-09-03T00:00:00-03:06"}, "vacancy": {"M": {"id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#WR3RnmMGbuHL9tL3QkJVdD"}}}, "author": {"M": {"name": {"S": "Tiago Maciel"}, "id": {"S": "123"}}}, "sk": {"S": "2025-09-03#0119847523107d306331118b72292eb2"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "scheduled_items#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-11-01T17:31:53.816688-03:00"}, "user": {"M": {"name": {"S": "S\u00e9rgio R Siqueira"}, "cpf": {"S": "07879819908"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email": {"S": "sergio@somosbeta.com.br"}}}, "ttl": {"N": "1756868760"}} +{"course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "360"}, "id": {"S": "f78d2241-13fd-45ab-81cc-0acb781b4107"}}}, "progress": {"N": "20"}, "status": {"S": "IN_PROGRESS"}, "score": {"N": "0"}, "user": {"M": {"name": {"S": "Mait\u00ea Laurenti Siqueira"}, "cpf": {"S": "02186829991"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email": {"S": "maite@somosbeta.com.br"}}}, "sk": {"S": "0"}, "id": {"S": "o5bakvHD4QywViB25y8nFj"}, "create_date": {"S": "2023-08-18T07:48:34"}, "update_date": {"S": "2023-08-18T07:48:34"}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "38"}, "name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "720"}}}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "CREATED"}, "update_date": {"S": "2024-11-07T11:44:14.527046-03:00"}, "user": {"M": {"id": {"S": "FzVwjH4kUdii9jRK927tCJ"}, "cpf": {"S": "40846858878"}, "email": {"S": "jefaoafonso2010@hotmail.com"}, "name": {"S": "JEFFERSON AFONSO DA SILVA"}}}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "assignees#2QuQNKmGabKwELcm8ZcZ6a"}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}, "name": {"S": "Formtap Industria e Comercio S/A"}, "scope": {"S": "ORG"}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "author"}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}, "name": {"S": "Vera L\u00facia Machado"}, "user_id": {"S": "5ad1d654-efe5-4bcf-8016-332677c4ba61"}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "tenant"}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}, "name": {"S": "PRESERVE AMBIENTAL EIRELLI"}, "user_id": {"S": "5ad1d654-efe5-4bcf-8016-332677c4ba61"}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "mentions#FhtdEKbR9aVshNdJJc4gCD"}, "context": {"S": "ORDER"}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}} +{"id": {"S": "PGneyGaaD7oqvKGpjQamx2"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "70"}, "name": {"S": "NR-20 B\u00e1sico"}, "time_in_days": {"N": "720"}}}, "create_date": {"S": "2024-10-28T12:04:43.785824-03:00"}, "progress": {"N": "100"}, "score": {"N": "62"}, "status": {"S": "FAILED"}, "update_date": {"S": "2024-10-30T23:02:15.716474-03:00"}, "user": {"M": {"id": {"S": "iNBQFu9wafBn7cFejhKhFk"}, "cpf": {"S": "05163302094"}, "email": {"S": "entregapapalegua8@gmail.com"}, "name": {"S": "Leonardo Boecchel Varela"}}}} +{"id": {"S": "PGneyGaaD7oqvKGpjQamx2"}, "sk": {"S": "started_date"}, "create_date": {"S": "2024-10-28T13:14:18.162722-03:00"}} +{"id": {"S": "PGneyGaaD7oqvKGpjQamx2"}, "sk": {"S": "assignees#RnqUZohLpeg3kngixJVQRQ"}, "create_date": {"S": "2024-10-28T12:04:43.785824-03:00"}, "name": {"S": "Mitspieler Servi\u00e7os e Represesnta\u00e7\u00f5es Ltda"}, "scope": {"S": "ORG"}} +{"id": {"S": "PGneyGaaD7oqvKGpjQamx2"}, "sk": {"S": "failed_date"}, "create_date": {"S": "2024-10-30T23:02:15.716474-03:00"}} +{"id": {"S": "hWnCaKBy545AQjquJytGKM"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-05T08:56:21.677175-03:00"}, "progress": {"N": "100"}, "score": {"N": "90"}, "status": {"S": "COMPLETED"}, "update_date": {"S": "2024-11-05T17:21:42.127888-03:00"}, "user": {"M": {"id": {"S": "FSjNrtpZSPEt9PLKfB7kSK"}, "cpf": {"S": "11224076451"}, "email": {"S": "gabrielwalkerbsilva@gmail.com"}, "name": {"S": "GABRIEL WALKER BELARMINO SILVA"}}}} +{"id": {"S": "hWnCaKBy545AQjquJytGKM"}, "sk": {"S": "finished_date"}, "create_date": {"S": "2024-11-05T17:21:42.127888-03:00"}} +{"id": {"S": "hWnCaKBy545AQjquJytGKM"}, "sk": {"S": "started_date"}, "create_date": {"S": "2024-11-05T13:46:07.430570-03:00"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "PENDING"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy1"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "IN_PROGRESS"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy2"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "FAILED"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy3"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "CANCELED"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy4"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "EXPIRED"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy5"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "ARCHIVED"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "cancel_policy"}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "lock"}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "hash": {"S": "f8f7996aa99d50eb85266be5a9fca1db"}, "ttl": {"N": "1759692457"}, "ttl_date": {"S": "2025-10-05T16:27:37.042051-03:00"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "assignees#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "name": {"S": "Beta Educa\u00e7\u00e3o"}, "scope": {"S": "ORG"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "mentions#QV4sXY3DvSTUMGJ4QqsrwJ"}, "scope": {"S": "ORDER"}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "parent_draft"}, "draft": {"M": {"id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "QV4sXY3DvSTUMGJ4QqsrwJ#YarwKYcw2sxjYWJTu2wnUy"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}} +{"id": {"S": "766k6jLry3x2vwvUZP24s4"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-13T09:32:37.858091-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "CANCELED"}, "update_date": {"S": "2024-11-13T09:34:25.057030-03:00"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "766k6jLry3x2vwvUZP24s4"}, "sk": {"S": "canceled_date"}, "author": {"M": {"id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "name": {"S": "Tiago Maciel"}}}, "create_date": {"S": "2024-11-13T09:34:25.057030-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#GNo8r7EMr9mF73tPH3Tvnc"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#8TVSi5oACLxTiT8ycKPmaQ"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"course": {"M": {"name": {"S": "Reciclagem de NR-11 Seguran\u00e7a na Opera\u00e7\u00e3o de Rebocadores"}, "time_in_days": {"N": "360"}, "id": {"S": "f78d2241-13fd-45ab-81cc-0acb781b4107"}}}, "progress": {"N": "0"}, "status": {"S": "CREATED"}, "score": {"N": "0"}, "user": {"M": {"name": {"S": "S\u00e9rgio R Siqueira"}, "cpf": {"S": "07879819908"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email": {"S": "sergio@somosbeta.com.br"}}}, "sk": {"S": "0"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "create_date": {"S": "2023-08-18T07:48:34"}, "update_date": {"S": "2023-08-18T07:48:34"}} +{"sk": {"S": "konviva"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "create_date": {"S": "2023-08-18T07:48:34"}, "konviva_id": {"N": "227924"}} +{"sk": {"S": "manager"}, "user_id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "name": {"S": "Beta Educa\u00e7\u00e3o"}, "create_date": {"S": "2023-08-18T07:48:34"}} +{"ttl": {"S": "1720867714"}, "sk": {"S": "schedules#access_period_ends"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "expiry_date": {"S": "2024-07-13T07:48:34"}, "create_date": {"S": "2023-08-18T07:48:34"}} +{"ttl": {"N": "1723459714"}, "sk": {"S": "schedules#archive_it"}, "id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "expiry_date": {"S": "2024-08-12T07:48:34"}, "create_date": {"S": "2023-08-18T07:48:34"}} +{"sk": {"S": "227924"}, "enrollment_id": {"S": "DeoJbnWFMCar2QUFcCexqh"}, "id": {"S": "konviva"}, "create_date": {"S": "2023-08-18T07:48:34"}} +{"sk": {"S": "KpZTYvu4RzgMJW3A2DF6cC#N4i4nJQC5wSyVUMTPYUnEh"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-25T23:52:59.142046-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#N4i4nJQC5wSyVUMTPYUnEh"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.142046-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#WR3RmmMGbuHL9tL3QkJVdQ"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#T6xfkFj3vaJiafT3rMEAxA"}, "course": {"M": {"name": {"S": "CIPA Grau de risco 1"}, "time_in_days": {"N": "180"}, "id": {"S": "V6Db4R6FwUqiRt9cG2s3tX"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#GNo8r7EMr9mF73tPH3Tvnc"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#g2ALhXLTMAoYGL6bKLGfw4"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#dTPNAPqgHWJkp9fZNMV5z9"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#L9nj8icPe5AjjqTj3NPYQr"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#cEyUG6LpC9LRC3PxbnwKA4"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#CipadCpxm4BKNdV49Vvtkt"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#SFzHrLevDTFtsYdbacGcgo"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#MwB6yuDE9RETBBXX3vt6gk"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#edp8njvgQuzNkLx2ySNfAD"}, "org_name": {"S": "KORD S.A"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} +{"ttl_date": {"S": "2025-09-03T00:00:00-03:06"}, "vacancy": {"M": {"id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#WR3RmmMGbuHL9tL3QkJVdQ"}}}, "author": {"M": {"name": {"S": "Tiago Maciel"}, "id": {"S": "123"}}}, "sk": {"S": "2025-09-03#0119847523107d306331118b72292eb0"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "scheduled_items#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-11-01T17:31:53.816688-03:00"}, "user": {"M": {"name": {"S": "S\u00e9rgio R Siqueira"}, "cpf": {"S": "07879819908"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email": {"S": "sergio@somosbeta.com.br"}}}, "ttl": {"N": "1756868760"}} +{"ttl_date": {"S": "2025-09-03T00:00:00-03:06"}, "vacancy": {"M": {"id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#WR3RnmMGbuHL9tL3QkJVdD"}}}, "author": {"M": {"name": {"S": "Tiago Maciel"}, "id": {"S": "123"}}}, "sk": {"S": "2025-09-03#0119847523107d306331118b72292eb2"}, "course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "180"}, "id": {"S": "723534ae-36ae-4253-bb73-966c8268779d"}}}, "id": {"S": "scheduled_items#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-11-01T17:31:53.816688-03:00"}, "user": {"M": {"name": {"S": "S\u00e9rgio R Siqueira"}, "cpf": {"S": "07879819908"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email": {"S": "sergio@somosbeta.com.br"}}}, "ttl": {"N": "1756868760"}} +{"course": {"M": {"name": {"S": "NR-17 Ergonomia"}, "time_in_days": {"N": "360"}, "id": {"S": "f78d2241-13fd-45ab-81cc-0acb781b4107"}}}, "progress": {"N": "20"}, "status": {"S": "IN_PROGRESS"}, "score": {"N": "0"}, "user": {"M": {"name": {"S": "Mait\u00ea Laurenti Siqueira"}, "cpf": {"S": "02186829991"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "email": {"S": "maite@somosbeta.com.br"}}}, "sk": {"S": "0"}, "id": {"S": "o5bakvHD4QywViB25y8nFj"}, "create_date": {"S": "2023-08-18T07:48:34"}, "update_date": {"S": "2023-08-18T07:48:34"}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "38"}, "name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "720"}}}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "CREATED"}, "update_date": {"S": "2024-11-07T11:44:14.527046-03:00"}, "user": {"M": {"id": {"S": "FzVwjH4kUdii9jRK927tCJ"}, "cpf": {"S": "40846858878"}, "email": {"S": "jefaoafonso2010@hotmail.com"}, "name": {"S": "JEFFERSON AFONSO DA SILVA"}}}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "assignees#2QuQNKmGabKwELcm8ZcZ6a"}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}, "name": {"S": "Formtap Industria e Comercio S/A"}, "scope": {"S": "ORG"}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "author"}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}, "name": {"S": "Vera L\u00facia Machado"}, "user_id": {"S": "5ad1d654-efe5-4bcf-8016-332677c4ba61"}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "tenant"}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}, "name": {"S": "PRESERVE AMBIENTAL EIRELLI"}, "user_id": {"S": "5ad1d654-efe5-4bcf-8016-332677c4ba61"}} +{"id": {"S": "ezcWf4ue4ooyGDFstXpv4e"}, "sk": {"S": "mentions#FhtdEKbR9aVshNdJJc4gCD"}, "context": {"S": "ORDER"}, "create_date": {"S": "2024-11-07T11:44:08.103468-03:00"}} +{"id": {"S": "PGneyGaaD7oqvKGpjQamx2"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "70"}, "name": {"S": "NR-20 B\u00e1sico"}, "time_in_days": {"N": "720"}}}, "create_date": {"S": "2024-10-28T12:04:43.785824-03:00"}, "progress": {"N": "100"}, "score": {"N": "62"}, "status": {"S": "FAILED"}, "update_date": {"S": "2024-10-30T23:02:15.716474-03:00"}, "user": {"M": {"id": {"S": "iNBQFu9wafBn7cFejhKhFk"}, "cpf": {"S": "05163302094"}, "email": {"S": "entregapapalegua8@gmail.com"}, "name": {"S": "Leonardo Boecchel Varela"}}}} +{"id": {"S": "PGneyGaaD7oqvKGpjQamx2"}, "sk": {"S": "started_date"}, "create_date": {"S": "2024-10-28T13:14:18.162722-03:00"}} +{"id": {"S": "PGneyGaaD7oqvKGpjQamx2"}, "sk": {"S": "assignees#RnqUZohLpeg3kngixJVQRQ"}, "create_date": {"S": "2024-10-28T12:04:43.785824-03:00"}, "name": {"S": "Mitspieler Servi\u00e7os e Represesnta\u00e7\u00f5es Ltda"}, "scope": {"S": "ORG"}} +{"id": {"S": "PGneyGaaD7oqvKGpjQamx2"}, "sk": {"S": "failed_date"}, "create_date": {"S": "2024-10-30T23:02:15.716474-03:00"}} +{"id": {"S": "hWnCaKBy545AQjquJytGKM"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-05T08:56:21.677175-03:00"}, "progress": {"N": "100"}, "score": {"N": "90"}, "status": {"S": "COMPLETED"}, "update_date": {"S": "2024-11-05T17:21:42.127888-03:00"}, "user": {"M": {"id": {"S": "FSjNrtpZSPEt9PLKfB7kSK"}, "cpf": {"S": "11224076451"}, "email": {"S": "gabrielwalkerbsilva@gmail.com"}, "name": {"S": "GABRIEL WALKER BELARMINO SILVA"}}}} +{"id": {"S": "hWnCaKBy545AQjquJytGKM"}, "sk": {"S": "finished_date"}, "create_date": {"S": "2024-11-05T17:21:42.127888-03:00"}} +{"id": {"S": "hWnCaKBy545AQjquJytGKM"}, "sk": {"S": "started_date"}, "create_date": {"S": "2024-11-05T13:46:07.430570-03:00"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "PENDING"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy1"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "IN_PROGRESS"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy2"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "FAILED"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy3"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "CANCELED"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy4"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "EXPIRED"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy5"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "ARCHIVED"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "cancel_policy"}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "lock"}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "hash": {"S": "f8f7996aa99d50eb85266be5a9fca1db"}, "ttl": {"N": "1759692457"}, "ttl_date": {"S": "2025-10-05T16:27:37.042051-03:00"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "assignees#cJtK9SsnJhKPyxESe7g3DG"}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}, "name": {"S": "Beta Educa\u00e7\u00e3o"}, "scope": {"S": "ORG"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "mentions#QV4sXY3DvSTUMGJ4QqsrwJ"}, "scope": {"S": "ORDER"}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}} +{"id": {"S": "YarwKYcw2sxjYWJTu2wnUy"}, "sk": {"S": "parent_draft"}, "draft": {"M": {"id": {"S": "vacancies#cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "QV4sXY3DvSTUMGJ4QqsrwJ#YarwKYcw2sxjYWJTu2wnUy"}}}, "create_date": {"S": "2024-11-04T16:27:37.042051-03:00"}} +{"id": {"S": "766k6jLry3x2vwvUZP24s4"}, "sk": {"S": "0"}, "course": {"M": {"id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "name": {"S": "NR-18 PEMT PTA"}, "time_in_days": {"N": "365"}}}, "create_date": {"S": "2024-11-13T09:32:37.858091-03:00"}, "progress": {"N": "0"}, "score": {"NULL": true}, "status": {"S": "CANCELED"}, "update_date": {"S": "2024-11-13T09:34:25.057030-03:00"}, "user": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "cpf": {"S": "07879819908"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael de Siqueira"}}}} +{"id": {"S": "766k6jLry3x2vwvUZP24s4"}, "sk": {"S": "canceled_date"}, "author": {"M": {"id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "name": {"S": "Tiago Maciel"}}}, "create_date": {"S": "2024-11-13T09:34:25.057030-03:00"}} +{"sk": {"S": "3CNrFB9dy2RLit2pdeUWy4#GNo8r7EMr9mF73tPH3Tvnc"}, "course": {"M": {"name": {"S": "NR-10 B\u00e1sico"}, "time_in_days": {"N": "180"}, "id": {"S": "YDkh4BtTSWFCJVTmDkhqb3"}}}, "id": {"S": "vacancies#8TVSi5oACLxTiT8ycKPmaQ"}, "create_date": {"S": "2024-08-28T23:52:59.141966-03:00"}} diff --git a/http-api/seeds/test-orders.jsonl b/http-api/seeds/test-orders.jsonl new file mode 100644 index 0000000..6510091 --- /dev/null +++ b/http-api/seeds/test-orders.jsonl @@ -0,0 +1,41 @@ +{"payment_method": {"S": "PIX"}, "status": {"S": "EXPIRED"}, "total": {"N": "149"}, "due_date": {"S": "2023-12-28T12:15:31.531429-03:00"}, "email": {"S": "leinor.silvamequita@gmail.com"}, "name": {"S": "Leinor Mesquita"}, "create_date": {"S": "2023-12-28T10:15:31.531593-03:00"}, "payment_date": {"NULL": true}, "phone_number": {"S": "+5555551998635367"}, "cpf": {"S": "89815033034"}, "sk": {"S": "0"}, "id": {"S": "XhAgiMsDG9rLhkN9urFru3"}, "update_date": {"S": "2024-01-01T11:52:28.415172-03:00"}} +{"city": {"S": "Paul\u00ednia"}, "postcode": {"S": "13145588"}, "neighborhood": {"S": "Saltinho"}, "complement": {"S": ""}, "sk": {"S": "address"}, "id": {"S": "XhAgiMsDG9rLhkN9urFru3"}, "street_number": {"S": "110"}, "street": {"S": "Rua Norides de Paula Sousa"}, "state": {"S": "SP"}} +{"sk": {"S": "invoice"}, "pdf": {"S": "https://faturas.iugu.com/d61cb3b6-da4d-48af-8497-4e2ed1f2f92f-27f9.pdf"}, "id": {"S": "XhAgiMsDG9rLhkN9urFru3"}, "create_date": {"S": "2023-12-28T10:19:49.867940-03:00"}, "invoice_id": {"S": "d61cb3b6-da4d-48af-8497-4e2ed1f2f92f-27f9"}} +{"sk": {"S": "items"}, "id": {"S": "XhAgiMsDG9rLhkN9urFru3"}, "items": {"L": [{"M": {"name": {"S": "NR-10 B\u00e1sico"}, "id": {"S": "38"}, "quantity": {"N": "1"}, "unit_price": {"N": "149"}}}]}} +{"qrcode": {"S": "https://faturas.iugu.com/qr_code/d61cb3b6-da4d-48af-8497-4e2ed1f2f92f-27f9"}, "sk": {"S": "pix"}, "id": {"S": "XhAgiMsDG9rLhkN9urFru3"}, "qrcode_text": {"S": "00020101021226840014br.gov.bcb.pix2562qr.iugu.com/public/payload/v2/D61CB3B6DA4D48AF84974E2ED1F2F92F5204000053039865406149.005802BR5922MACIEL DOS SANTOS CIA6013FLORIANOPOLIS62070503***6304068E"}, "create_date": {"S": "2023-12-28T10:19:49.867940-03:00"}} +{"sk": {"S": "user"}, "user_id": {"S": "c57MXV4BByFZLajcvBHdnN"}, "id": {"S": "XhAgiMsDG9rLhkN9urFru3"}, "create_date": {"S": "2023-12-28T10:20:54.229700-03:00"}} +{"payment_method": {"S": "CREDIT_CARD"}, "status": {"S": "PAID"}, "assignee": {"M": {"name": {"S": "Alessandra Larivia"}}}, "total": {"N": "149"}, "installments": {"N": "1"}, "due_date": {"S": "2024-02-08T08:46:59.771233-03:00"}, "email": {"S": "financeiro@aquanobile.com.br"}, "name": {"S": "AQUA NOBILE SERVI\u00c7OS LTDA"}, "create_date": {"S": "2024-02-08T08:41:59.773135-03:00"}, "payment_date": {"S": "2024-02-08T08:42:10.910170-03:00"}, "phone_number": {"S": "+553130705599"}, "sk": {"S": "0"}, "cnpj": {"S": "11278500000106"}, "id": {"S": "KpZTYvu4RzgMJW3A2DF6cC"}, "update_date": {"S": "2024-02-08T08:42:10.910170-03:00"}} +{"city": {"S": "Nova Lima"}, "postcode": {"S": "34006065"}, "neighborhood": {"S": "Vila da Serra"}, "complement": {"S": "sala 211"}, "sk": {"S": "address"}, "id": {"S": "KpZTYvu4RzgMJW3A2DF6cC"}, "street_number": {"S": "1021"}, "street": {"S": "Alameda Oscar Niemeyer"}, "state": {"S": "MG"}} +{"last4": {"S": "6188"}, "brand": {"S": "Mastercard"}, "sk": {"S": "credit_card"}, "id": {"S": "KpZTYvu4RzgMJW3A2DF6cC"}} +{"sk": {"S": "fees"}, "fees": {"N": "5"}, "id": {"S": "KpZTYvu4RzgMJW3A2DF6cC"}, "create_date": {"S": "2024-02-08T08:42:13.440374-03:00"}} +{"sk": {"S": "invoice"}, "pdf": {"S": "https://faturas.iugu.com/cdc228a0-bd1a-44aa-aa0d-1b47bad74aed-873a.pdf"}, "id": {"S": "KpZTYvu4RzgMJW3A2DF6cC"}, "create_date": {"S": "2024-02-08T08:42:03.041809-03:00"}, "invoice_id": {"S": "cdc228a0-bd1a-44aa-aa0d-1b47bad74aed-873a"}} +{"sk": {"S": "items"}, "id": {"S": "KpZTYvu4RzgMJW3A2DF6cC"}, "items": {"L": [{"M": {"name": {"S": "NR-33 Supervisor em Espa\u00e7o Confinado"}, "id": {"S": "57"}, "quantity": {"N": "1"}, "unit_price": {"N": "149"}}}]}} +{"sk": {"S": "lock"}, "id": {"S": "KpZTYvu4RzgMJW3A2DF6cC"}, "lock_type": {"S": "CNPJ"}, "create_date": {"S": "2024-02-08T08:42:13.058916-03:00"}} +{"sk": {"S": "nfse"}, "nfse": {"S": "10384"}, "id": {"S": "KpZTYvu4RzgMJW3A2DF6cC"}, "create_date": {"S": "2024-02-08T09:05:03.879692-03:00"}} +{"sk": {"S": "user"}, "user_id": {"S": "5AZXXXCWa2bU4spsxfLznx"}, "id": {"S": "KpZTYvu4RzgMJW3A2DF6cC"}, "create_date": {"S": "2024-02-08T08:42:05.190415-03:00"}} +{"payment_method": {"S": "BANK_SLIP"}, "status": {"S": "PAID"}, "total": {"N": "109"}, "due_date": {"S": "2024-02-12T11:04:32.387354-03:00"}, "email": {"S": "vieirawashington866@gmail.com"}, "name": {"S": "Washington Vir\u00edssimo Vieira"}, "create_date": {"S": "2024-02-07T11:04:32.389708-03:00"}, "payment_date": {"S": "2024-02-08T09:51:57.964594-03:00"}, "phone_number": {"S": "+5511977768940"}, "cpf": {"S": "45369176833"}, "sk": {"S": "0"}, "id": {"S": "QhknJuJpv6PUZsye7Ahofm"}, "update_date": {"S": "2024-02-08T09:51:57.964594-03:00"}} +{"city": {"S": "Jandira"}, "postcode": {"S": "06624480"}, "neighborhood": {"S": "Jardim Gabriela III"}, "complement": {"S": ""}, "sk": {"S": "address"}, "id": {"S": "QhknJuJpv6PUZsye7Ahofm"}, "street_number": {"S": "370"}, "street": {"S": "Rua Francisco Batista Oliveira"}, "state": {"S": "SP"}} +{"sk": {"S": "fees"}, "fees": {"N": "3"}, "id": {"S": "QhknJuJpv6PUZsye7Ahofm"}, "create_date": {"S": "2024-02-08T09:52:00.773825-03:00"}} +{"sk": {"S": "generated_items"}, "id": {"S": "QhknJuJpv6PUZsye7Ahofm"}, "items": {"L": [{"M": {"name": {"S": "CIPA Grau de Risco 3"}, "id": {"S": "aVVtXV3oGMptskKuxBsuTN"}, "status": {"S": "SUCCESS"}}}]}, "create_date": {"S": "2024-02-08T09:52:05.182617-03:00"}} +{"sk": {"S": "invoice"}, "pdf": {"S": "https://faturas.iugu.com/06661fdc-7c3f-4a76-bec2-ef1b37aa3bc0-6a70.pdf"}, "id": {"S": "QhknJuJpv6PUZsye7Ahofm"}, "create_date": {"S": "2024-02-07T11:04:36.154852-03:00"}, "invoice_id": {"S": "06661fdc-7c3f-4a76-bec2-ef1b37aa3bc0-6a70"}} +{"sk": {"S": "items"}, "id": {"S": "QhknJuJpv6PUZsye7Ahofm"}, "items": {"L": [{"M": {"name": {"S": "CIPA Grau de risco 3"}, "id": {"S": "b09ca8da-f342-4a70-aaaa-67ac81569533"}, "quantity": {"N": "1"}, "unit_price": {"N": "109"}}}]}} +{"sk": {"S": "lock"}, "id": {"S": "QhknJuJpv6PUZsye7Ahofm"}, "lock_type": {"S": "CPF"}, "create_date": {"S": "2024-02-08T09:52:00.731863-03:00"}} +{"sk": {"S": "user"}, "user_id": {"S": "Sqw6ZMYVH5djJFEuuLt8mH"}, "id": {"S": "QhknJuJpv6PUZsye7Ahofm"}, "create_date": {"S": "2024-02-07T11:05:36.826017-03:00"}} +{"payment_method": {"S": "MANUAL"}, "status": {"S": "PENDING"}, "assignee": {"M": {"name": {"S": "ERICA SANTOS"}}}, "total": {"N": "894"}, "due_date": {"S": "2024-03-08T06:44:17-03:00"}, "email": {"S": "erica.santos@sinobras.com.br"}, "name": {"S": "SIDERURGICA NORTE BRASIL S.A"}, "create_date": {"S": "2024-02-08T07:48:51.362015-03:00"}, "payment_date": {"NULL": true}, "sk": {"S": "0"}, "cnpj": {"S": "07933914000154"}, "id": {"S": "3Gkayh3FBuCSMW5eE5NfH5"}, "update_date": {"S": "2024-02-08T07:48:53.782246-03:00"}} +{"city": {"S": "Marab\u00e1"}, "postcode": {"S": "68501535"}, "neighborhood": {"S": "Cidade Nova"}, "complement": {"S": ""}, "sk": {"S": "address"}, "id": {"S": "3Gkayh3FBuCSMW5eE5NfH5"}, "street_number": {"S": "S/N"}, "street": {"S": "Rua Ivete Vargas"}, "state": {"S": "PA"}} +{"sk": {"S": "items"}, "id": {"S": "3Gkayh3FBuCSMW5eE5NfH5"}, "items": {"L": [{"M": {"name": {"S": "NR-10 Complementar (SEP)"}, "id": {"S": "55"}, "quantity": {"N": "6"}, "unit_price": {"N": "149"}}}]}} +{"sk": {"S": "lock"}, "id": {"S": "3Gkayh3FBuCSMW5eE5NfH5"}, "lock_type": {"S": "CNPJ"}, "create_date": {"S": "2024-02-08T07:52:14.397071-03:00"}} +{"sk": {"S": "nfse"}, "nfse": {"S": "10382"}, "id": {"S": "3Gkayh3FBuCSMW5eE5NfH5"}, "create_date": {"S": "2024-02-08T07:52:14.361212-03:00"}} +{"sk": {"S": "user"}, "user_id": {"S": "EkvQwpmmL6vzWtJunM5dCJ"}, "id": {"S": "3Gkayh3FBuCSMW5eE5NfH5"}, "create_date": {"S": "2024-02-08T07:48:56.154952-03:00"}} +{"payment_method": {"S": "CREDIT_CARD"}, "status": {"S": "DECLINED"}, "assignee": {"M": {"name": {"S": "ALEXANDRE ROZIN"}}}, "total": {"N": "605"}, "installments": {"N": "2"}, "due_date": {"S": "2024-02-05T09:30:16.163998-03:00"}, "email": {"S": "alexandre@hartinst.com.br"}, "name": {"S": "HARTINST MANUTEN\u00c7\u00c3O INDUSTRIAL"}, "create_date": {"S": "2024-02-05T09:25:16.166315-03:00"}, "payment_date": {"NULL": true}, "phone_number": {"S": "+551936010400"}, "sk": {"S": "0"}, "cnpj": {"S": "31958303000145"}, "id": {"S": "mFERanksjRywrAniUdVmoV"}, "update_date": {"S": "2024-02-05T09:25:28.662366-03:00"}} +{"city": {"S": "Americana"}, "postcode": {"S": "13467600"}, "neighborhood": {"S": "Parque Novo Mundo"}, "complement": {"S": ""}, "sk": {"S": "address"}, "id": {"S": "mFERanksjRywrAniUdVmoV"}, "street_number": {"S": "3929"}, "street": {"S": "Avenida de Cillo"}, "state": {"S": "SP"}} +{"last4": {"S": "8634"}, "brand": {"S": "Visa"}, "sk": {"S": "credit_card"}, "id": {"S": "mFERanksjRywrAniUdVmoV"}} +{"sk": {"S": "invoice"}, "pdf": {"S": "https://faturas.iugu.com/bc1a8a7f-50bd-4ff7-ad87-1f063653fef7-d9a3.pdf"}, "id": {"S": "mFERanksjRywrAniUdVmoV"}, "create_date": {"S": "2024-02-05T09:25:20.418529-03:00"}, "invoice_id": {"S": "bc1a8a7f-50bd-4ff7-ad87-1f063653fef7-d9a3"}} +{"sk": {"S": "items"}, "id": {"S": "mFERanksjRywrAniUdVmoV"}, "items": {"L": [{"M": {"name": {"S": "NR-18 Plataforma de Trabalho A\u00e9reo (PTA PEMT)"}, "id": {"S": "a6775b71-d68a-4263-8ab4-acb3a4f8a8b9"}, "quantity": {"N": "5"}, "unit_price": {"N": "119"}}}, {"M": {"name": {"S": "Juros"}, "id": {"S": "interest"}, "quantity": {"N": "1"}, "unit_price": {"N": "10"}}}]}} +{"sk": {"S": "user"}, "user_id": {"S": "dHANDLNp3XMuhVa6ZTBZpi"}, "id": {"S": "mFERanksjRywrAniUdVmoV"}, "create_date": {"S": "2024-02-05T09:25:22.853324-03:00"}} +{"payment_method": {"S": "MANUAL"}, "status": {"S": "PAID"}, "assignee": {"M": {"name": {"S": "MARCOS ROBERTO RODRIGUES DE MORAIS"}}}, "total": {"N": "9825"}, "due_date": {"S": "2024-02-06T09:43:24.493000-03:00"}, "email": {"S": "marcos.morais@una.br"}, "name": {"S": "ANIMA HOLDING S/A"}, "create_date": {"S": "2024-02-06T10:28:02.358571-03:00"}, "payment_date": {"S": "2024-02-06T10:28:15"}, "sk": {"S": "0"}, "cnpj": {"S": "09288252000213"}, "id": {"S": "bTRW6w69aYYKjKy3FZeVjt"}, "update_date": {"S": "2024-02-06T10:28:27.228538-03:00"}} +{"city": {"S": "Belo Horizonte"}, "postcode": {"S": "30455610"}, "neighborhood": {"S": "Estoril"}, "complement": {"S": "Pr\u00e9dio B-1"}, "sk": {"S": "address"}, "id": {"S": "bTRW6w69aYYKjKy3FZeVjt"}, "street_number": {"S": "1685"}, "street": {"S": "Avenida Professor M\u00e1rio Werneck"}, "state": {"S": "MG"}} +{"sk": {"S": "items"}, "id": {"S": "bTRW6w69aYYKjKy3FZeVjt"}, "items": {"L": [{"M": {"name": {"S": "Cr\u00e9ditos em matr\u00edcula"}, "id": {"S": "52368"}, "quantity": {"N": "150"}, "unit_price": {"N": "65"}}}]}} +{"sk": {"S": "lock"}, "id": {"S": "bTRW6w69aYYKjKy3FZeVjt"}, "lock_type": {"S": "CNPJ"}, "create_date": {"S": "2024-02-06T10:28:30.194688-03:00"}} +{"sk": {"S": "nfse"}, "nfse": {"S": "10184"}, "id": {"S": "bTRW6w69aYYKjKy3FZeVjt"}, "create_date": {"S": "2024-02-06T10:29:43.839357-03:00"}} +{"sk": {"S": "user"}, "user_id": {"S": "mESNbpk4pMTASxtnstd37B"}, "id": {"S": "bTRW6w69aYYKjKy3FZeVjt"}, "create_date": {"S": "2024-02-06T10:28:06.906367-03:00"}} diff --git a/http-api/seeds/test-users.jsonl b/http-api/seeds/test-users.jsonl new file mode 100644 index 0000000..eb8d187 --- /dev/null +++ b/http-api/seeds/test-users.jsonl @@ -0,0 +1,70 @@ +{"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"}]}} +{"sk": {"S": "acl#admin"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "create_date": {"S": "2022-06-13T15:00:24.309410-03:00"}} +{"emailVerified": {"BOOL": true}, "updateDate": {"S": "2024-02-08T16:42:33.776409-03:00"}, "createDate": {"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}, "emailDeliverable": {"BOOL": true}} +{"emailVerified": {"BOOL": true}, "parent_email": {"S": "sergio@users.noreply.betaeducacao.com.br"}, "createDate": {"S": "2024-02-07T20:26:57.374082-03:00"}, "deliverability": {"S": "DELIVERABLE"}, "ttl": {"N": "1707607617"}, "sk": {"S": "emails#re+962834@users.noreply.betaeducacao.com.br"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "primaryEmail": {"BOOL": false}} +{"emailVerified": {"BOOL": true}, "updateDate": {"S": "2024-02-08T16:42:33.776409-03:00"}, "createDate": {"S": "2019-03-25T00:00:00-03:00"}, "sk": {"S": "emails#sergio@somosbeta.com.br"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "primaryEmail": {"BOOL": true}, "emailDeliverable": {"BOOL": true}, "update_date": {"S": "2023-11-09T12:13:04.308986-03:00"}} +{"emailVerified": {"BOOL": false}, "updateDate": {"S": "2023-12-29T02:18:27.225158-03:00"}, "createDate": {"S": "2022-09-01T12:23:15.431473-03:00"}, "sk": {"S": "emails#sergio@users.noreply.betaeducacao.com.br"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "primaryEmail": {"BOOL": false}, "emailDeliverable": {"BOOL": true}} +{"sk": {"S": "konviva"}, "createDate": {"S": "2023-07-22T21:46:02.527763-03:00"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "konvivaId": {"N": "26943"}} +{"sk": {"S": "org#cJtK9SsnJhKPyxESe7g3DG"}, "createDate": {"S": "2023-12-24T20:50:27.656310-03:00"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "name": {"S": "Beta Educa\u00e7\u00e3o"}} +{"sk": {"S": "sergio@somosbeta.com.br"}, "createDate": {"S": "2019-03-25T00:00:00-03:00"}, "userRefId": {"S": "5OxmMjL-ujoR5IMGegQz"}, "id": {"S": "email"}} +{"sk": {"S": "07879819908"}, "createDate": {"S": "2024-02-06T15:16:18.992509-03:00"}, "userRefId": {"S": "5OxmMjL-ujoR5IMGegQz"}, "id": {"S": "cpf"}} +{"updateDate": {"S": "2023-12-22T13:03:20.478342-03:00"}, "createDate": {"S": "2023-09-22T18:27:30.193484-03:00"}, "status": {"S": "CREATED"}, "sk": {"S": "0"}, "cnpj": {"S": "15608435000190"}, "email": {"S": "org+15608435000190@users.noreply.betaeducacao.com.br"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "name": {"S": "Beta Educa\u00e7\u00e3o"}} +{"updateDate": {"S": "2023-12-22T13:03:20.478342-03:00"}, "createDate": {"S": "2023-09-22T18:27:30.193484-03:00"}, "status": {"S": "CREATED"}, "sk": {"S": "0"}, "cnpj": {"S": "13573332000107"}, "email": {"S": "org+13573332000107@users.noreply.betaeducacao.com.br"}, "id": {"S": "edp8njvgQuzNkLx2ySNfAD"}, "name": {"S": "KORD S.A"}} +{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "tags#MqiRQWy9cSBEci93aKBvTd"}, "tag": {"S": "Test"}, "create_date": {"S": "2023-09-22T18:31:11.475449-03:00"}} +{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "tags#NQ3YmmTesfoSyHCkPKGKEF"}, "tag": {"S": "F\u00e1brica"}, "create_date": {"S": "2023-09-22T18:31:11.475449-03:00"}} +{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "tags#bg45io8igarjsA4BzPQyrz"}, "tag": {"S": "Escrit\u00f3rio"}, "create_date": {"S": "2023-09-22T18:31:11.475449-03:00"}} +{"sk": {"S": "admin#18606"}, "create_date": {"S": "2023-09-22T18:31:11.475449-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "mateushickmann@petrobras.com.br"}, "name": {"S": "MATEUS LATTIK HICKMANN"}} +{"sk": {"S": "admin#21425"}, "create_date": {"S": "2023-09-22T18:34:06.480230-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "sergio@inbep.com.br"}, "name": {"S": "S\u00e9rgio Siqueira"}} +{"sk": {"S": "admin#2338"}, "create_date": {"S": "2023-09-22T18:28:10.121068-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "empresa@inbep.com.br"}, "name": {"S": "Empresa Teste"}} +{"sk": {"S": "admin#26931"}, "create_date": {"S": "2023-09-22T18:39:04.522084-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "cida@qgog.com.br"}, "name": {"S": "Maria Aparecida do Nascimento"}} +{"sk": {"S": "admin#346628ce-a6c8-4fff-a6ee-5378675e220a"}, "create_date": {"S": "2023-10-01T14:25:16.662110-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "leandrodorea@kofre.com.br"}, "name": {"S": "Leandro Barbosa Dorea"}} +{"sk": {"S": "admin#5OxmMjL-ujoR5IMGegQz"}, "create_date": {"S": "2023-12-24T20:50:27.656310-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "sergio@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio R Siqueira"}} +{"sk": {"S": "admin#9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "create_date": {"S": "2023-09-22T18:31:28.540271-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "tiago@somosbeta.com.br"}, "name": {"S": "Tiago"}} +{"sk": {"S": "admin#DbMaGtQX4wXPDZyBjdZMzh"}, "create_date": {"S": "2023-09-22T18:34:46.696606-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "sergio+postman@somosbeta.com.br"}, "name": {"S": "S\u00e9rgio Rafael Siqueira"}} +{"sk": {"S": "admin#JMnHo46tR4aWVzH2dfus52"}, "create_date": {"S": "2023-09-22T18:39:58.373125-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "bruno@inbep.com.br"}, "name": {"S": "Bruno Lins de Albuquerque"}} +{"sk": {"S": "admin#TSxk7P89kRcNuLGy8A88ao"}, "create_date": {"S": "2023-09-22T18:28:02.875368-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "tiago@inbep.com.br"}, "name": {"S": "Tiago Maciel"}} +{"sk": {"S": "admin#YJkbDL7C2htnJVK8DXDiV2"}, "create_date": {"S": "2023-09-22T18:30:18.492717-03:00"}, "id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "email": {"S": "acorianabuffet@gmail.com"}, "name": {"S": "Nadyjanara Leal Albino"}} +{"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"}]}} +{"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}} +{"sk": {"S": "konviva"}, "createDate": {"S": "2023-07-22T21:46:04.494710-03:00"}, "id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "konvivaId": {"N": "26946"}} +{"sk": {"S": "org#VmkwfVGq5r7vEckEM8uiRf"}, "createDate": {"S": "2023-09-22T18:31:14.779525-03:00"}, "id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "name": {"S": "MCEND INSPE\u00c7\u00d5ES, CONSULTORIA E CONTROLE DE QUALIDADE"}} +{"sk": {"S": "org#cJtK9SsnJhKPyxESe7g3DG"}, "createDate": {"S": "2023-09-22T18:31:28.540230-03:00"}, "id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "name": {"S": "Funda\u00e7\u00e3o Universidade do Contestado - FUnC Campus Mafra"}} +{"action": {"S": "EMAIL_ADD"}, "data": {"M": {"email": {"S": "re+962834@users.noreply.betaeducacao.com.br"}}}, "ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770420417"}, "sk": {"S": "2024-02-07T20:26:57.434320-03:00"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "actor": {"M": {"name": {"S": "S\u00e9rgio Rafael Siqueira"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}}}} +{"action": {"S": "EMAIL_ADD"}, "data": {"M": {"email": {"S": "test@xptoa.com"}}}, "ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770420434"}, "sk": {"S": "2024-02-07T20:27:14.874383-03:00"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "actor": {"M": {"name": {"S": "S\u00e9rgio Rafael Siqueira"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}}}} +{"action": {"S": "EMAIL_DEL"}, "data": {"M": {"email": {"S": "test@xptoa.com"}}}, "ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770420444"}, "sk": {"S": "2024-02-07T20:27:24.615391-03:00"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "actor": {"M": {"name": {"S": "S\u00e9rgio Rafael Siqueira"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}}}} +{"action": {"S": "user.enable_reverse_email"}, "data": {"M": {"email": {"S": "re+9628@users.noreply.betaeducacao.com.br"}}}, "ip": {"S": "189.73.20.218"}, "ttl": {"N": "3477771072"}, "sk": {"S": "2024-02-07T20:45:36.807607-03:00"}, "actorLocation": {"NULL": true}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "actor": {"M": {"name": {"S": "S\u00e9rgio Rafael Siqueira"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}}}} +{"action": {"S": "EMAIL_ADD"}, "data": {"M": {"email": {"S": "sergio+12121@somosbeta.com.br"}}}, "ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770492028"}, "sk": {"S": "2024-02-08T16:20:28.159065-03:00"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "actor": {"M": {"name": {"S": "S\u00e9rgio Rafael Siqueira"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}}}} +{"action": {"S": "PRIMARY_EMAIL_CHANGED"}, "data": {"M": {"old_email": {"S": "sergio@somosbeta.com.br"}, "new_email": {"S": "osergiosiqueira@gmail.com"}}}, "ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770493307"}, "sk": {"S": "2024-02-08T16:41:47.678483-03:00"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "actor": {"M": {"name": {"S": "S\u00e9rgio Rafael Siqueira"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}}}} +{"ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770493330"}, "sk": {"S": "2024-02-08T16:42:10.010857-03:00"}, "action": {"S": "LOGIN"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}} +{"action": {"S": "PRIMARY_EMAIL_CHANGED"}, "data": {"M": {"old_email": {"S": "osergiosiqueira@gmail.com"}, "new_email": {"S": "sergio@somosbeta.com.br"}}}, "ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770493353"}, "sk": {"S": "2024-02-08T16:42:33.812060-03:00"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "actor": {"M": {"name": {"S": "S\u00e9rgio Rafael Siqueira"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}}}} +{"ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770493367"}, "sk": {"S": "2024-02-08T16:42:47.095878-03:00"}, "action": {"S": "LOGIN"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}} +{"action": {"S": "EMAIL_DEL"}, "data": {"M": {"email": {"S": "sergio+12121@somosbeta.com.br"}}}, "ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770493382"}, "sk": {"S": "2024-02-08T16:43:02.024191-03:00"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "actor": {"M": {"name": {"S": "S\u00e9rgio Rafael Siqueira"}, "id": {"S": "5OxmMjL-ujoR5IMGegQz"}}}} +{"ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770507839"}, "sk": {"S": "2024-02-08T20:43:59.040766-03:00"}, "action": {"S": "LOGIN"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}} +{"ip": {"S": "189.73.20.218"}, "ttl": {"N": "1770508260"}, "sk": {"S": "2024-02-08T20:51:00.933637-03:00"}, "action": {"S": "LOGIN"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}} +{"ttl": {"N": "1770508425"}, "sk": {"S": "2024-02-08T20:53:45.329416-03:00"}, "action": {"S": "LOGIN"}, "id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}} +{"id": {"S": "DbMaGtQX4wXPDZyBjdZMzh"}, "sk": {"S": "0"}, "createDate": {"S": "2023-09-22T18:34:46.517274-03:00"}, "email": {"S": "sergio@users.noreply.betaeducacao.com.br"}, "name": {"S": "S\u00e9rgio Rafael Siqueira"}, "status": {"S": "CREATED"}, "updateDate": {"S": "2024-02-26T14:58:50.688790-03:00"}} +{"id": {"S": "DbMaGtQX4wXPDZyBjdZMzh"}, "sk": {"S": "emails#sergio@users.noreply.betaeducacao.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": "sergio@users.noreply.betaeducacao.com.br"}, "createDate": {"S": "2019-11-12T00:00:00-03:00"}, "userRefId": {"S": "DbMaGtQX4wXPDZyBjdZMzh"}} +{"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"}]}} +{"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"}]}} +{"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "acls#8TVSi5oACLxTiT8ycKPmaQ"}, "create_date": {"S": "2022-06-13T15:00:24.309410-03:00"}, "roles": {"L": [{"S": "USER"}]}} +{"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "acls#*"}, "create_date": {"S": "2022-06-13T15:00:24.309410-03:00"}, "roles": {"L": [{"S": "ADMIN"}]}} +{"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "orgs#8TVSi5oACLxTiT8ycKPmaQ"}, "cnpj": {"S": "07556927000666"}, "create_date": {"S": "2023-12-24T20:50:27.656310-03:00"}, "name": {"S": "Ponsse Latin America Ind\u00fastria de M\u00e1quinas Florestais LTDA"}} +{"id": {"S": "9a41e867-55e1-4573-bd27-7b5d1d1bcfde"}, "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": "ZoV7w6mZsdAABjXzeAodSQ"}, "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": "ZoV7w6mZsdAABjXzeAodSQ"}, "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": "webhooks#*"}, "sk": {"S": "0e7f4d2e62ec525fc94465a6dd7299d2"}, "event_type": {"S": "insert"}, "resource": {"S": "users"}, "url": {"S": "https://n8n.sergio.run/webhook/56bb43b8-533c-4e8b-bdaa-3f7c2b0e548f"}, "author": {"M": {"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "name": {"S": "S\u00e9rgio R Siqueira"}}}, "create_date": {"S": "2025-01-03T15:52:47.378885+00:00"}} +{"id": {"S": "webhook_requests#*#0e7f4d2e62ec525fc94465a6dd7299d2"}, "sk": {"S": "2025-01-03T15:47:42.039256-03:00"}, "request": {"M": {"id": {"S": "i8vZVsyir5LVVN9RDZ4eCN"}, "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": "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"}} diff --git a/http-api/settings.py b/http-api/settings.py index 58c0d0f..b07a6ba 100644 --- a/http-api/settings.py +++ b/http-api/settings.py @@ -5,6 +5,9 @@ ORDER_TABLE: str = os.getenv('ORDER_TABLE') # type: ignore ENROLLMENT_TABLE: str = os.getenv('ENROLLMENT_TABLE') # type: ignore COURSE_TABLE: str = os.getenv('COURSE_TABLE') # type: ignore +KONVIVA_API_URL: str = os.getenv('KONVIVA_API_URL') # type: ignore +KONVIVA_SECRET_KEY: str = os.getenv('KONVIVA_SECRET_KEY') # type: ignore + match (os.getenv('AWS_SAM_LOCAL'), os.getenv('ELASTIC_HOSTS')): case (str() as AWS_SAM_LOCAL, _) if AWS_SAM_LOCAL: @@ -18,7 +21,6 @@ match (os.getenv('AWS_SAM_LOCAL'), os.getenv('ELASTIC_HOSTS')): case _: ELASTIC_CLOUD_ID = os.getenv('ELASTIC_CLOUD_ID') ELASTIC_AUTH_PASS = os.getenv('ELASTIC_AUTH_PASS') - ELASTIC_CONN = { 'cloud_id': ELASTIC_CLOUD_ID, 'basic_auth': ('elastic', ELASTIC_AUTH_PASS), diff --git a/http-api/template.yaml b/http-api/template.yaml index 431f477..adfd934 100644 --- a/http-api/template.yaml +++ b/http-api/template.yaml @@ -23,7 +23,7 @@ Globals: Architectures: - x86_64 Layers: - - !Sub arn:aws:lambda:sa-east-1:336641857101:layer:layercake:15 + - !Sub arn:aws:lambda:sa-east-1:336641857101:layer:layercake:17 Environment: Variables: TZ: America/Sao_Paulo @@ -37,6 +37,8 @@ Globals: COURSE_TABLE: !Ref CourseTable ELASTIC_CLOUD_ID: "{{resolve:ssm:/betaeducacao/elastic/cloud_id/str}}" ELASTIC_AUTH_PASS: "{{resolve:ssm:/betaeducacao/elastic/auth_pass/str}}" + KONVIVA_API_URL: https://saladeaula.digital + KONVIVA_SECRET_KEY: "{{resolve:ssm:/betaeducacao/konviva/secret_key/str}}" Resources: HttpLog: @@ -50,7 +52,7 @@ Resources: CorsConfiguration: AllowOrigins: ["*"] AllowMethods: [GET, POST, PUT, DELETE, PATCH, OPTIONS] - AllowHeaders: [Content-Type, X-Requested-With, Authorization, Workspace] + AllowHeaders: [Content-Type, X-Requested-With, Authorization, X-Tenant] Auth: DefaultAuthorizer: LambdaRequestAuthorizer Authorizers: diff --git a/http-api/tests/conftest.py b/http-api/tests/conftest.py index abeaafd..cb78f36 100644 --- a/http-api/tests/conftest.py +++ b/http-api/tests/conftest.py @@ -4,13 +4,11 @@ import os from dataclasses import dataclass from http import HTTPMethod -import boto3 import layercake.jsonl as jsonl import pytest from layercake.dynamodb import DynamoDBPersistenceLayer PYTEST_TABLE_NAME = 'pytest' -DYNAMODB_ENDPOINT_URL = 'http://127.0.0.1:8000' PK = os.getenv('DYNAMODB_PARTITION_KEY', 'pk') SK = os.getenv('DYNAMODB_SORT_KEY', 'sk') @@ -102,7 +100,8 @@ def http_api_proxy(): @pytest.fixture def dynamodb_client(): - client = boto3.client('dynamodb', endpoint_url=DYNAMODB_ENDPOINT_URL) + from boto3clients import dynamodb_client as client + client.create_table( AttributeDefinitions=[ {'AttributeName': PK, 'AttributeType': 'S'}, diff --git a/http-api/tests/routes/test_me.py b/http-api/tests/routes/test_me.py new file mode 100644 index 0000000..1446b2b --- /dev/null +++ b/http-api/tests/routes/test_me.py @@ -0,0 +1,54 @@ +import json +from http import HTTPMethod, HTTPStatus + +from layercake.dynamodb import DynamoDBCollection, DynamoDBPersistenceLayer + +from ..conftest import HttpApiProxy, LambdaContext + + +def test_me( + mock_app, + dynamodb_seeds, + dynamodb_persistence_layer: DynamoDBPersistenceLayer, + http_api_proxy: HttpApiProxy, + lambda_context: LambdaContext, +): + mock_app.me.collect = DynamoDBCollection(dynamodb_persistence_layer) + + # This data was added from seeds + r = mock_app.lambda_handler( + http_api_proxy( + raw_path='/me', + method=HTTPMethod.GET, + ), + lambda_context, + ) + + assert r['statusCode'] == HTTPStatus.OK + + body = json.loads(r['body']) + assert body == { + 'acls': [ + { + 'sk': 'cJtK9SsnJhKPyxESe7g3DG', + 'id': '5OxmMjL-ujoR5IMGegQz', + 'create_date': '2025-03-14T10:06:34.628078-03:00', + 'roles': ['ADMIN'], + }, + { + 'sk': '*', + 'id': '5OxmMjL-ujoR5IMGegQz', + 'create_date': '2022-06-13T15:00:24.309410-03:00', + 'roles': ['ADMIN'], + }, + ], + 'tenants': [ + { + 'sk': 'cJtK9SsnJhKPyxESe7g3DG', + 'name': 'Beta Educação', + 'id': '5OxmMjL-ujoR5IMGegQz', + 'cnpj': '15608435000190', + 'create_date': '2025-03-13T16:36:50.073156-03:00', + } + ], + } diff --git a/http-api/tests/routes/test_settings.py b/http-api/tests/routes/test_settings.py deleted file mode 100644 index 525da75..0000000 --- a/http-api/tests/routes/test_settings.py +++ /dev/null @@ -1,24 +0,0 @@ -from http import HTTPMethod, HTTPStatus - -from layercake.dynamodb import DynamoDBPersistenceLayer - -from ..conftest import HttpApiProxy, LambdaContext - - -def test_settings( - mock_app, - dynamodb_persistence_layer: DynamoDBPersistenceLayer, - http_api_proxy: HttpApiProxy, - lambda_context: LambdaContext, -): - r = mock_app.lambda_handler( - http_api_proxy( - raw_path='/settings', - method=HTTPMethod.GET, - ), - lambda_context, - ) - print(r) - - # assert 'id' in json.loads(r['body']) - assert r['statusCode'] == HTTPStatus.OK diff --git a/http-api/tests/routes/test_users.py b/http-api/tests/routes/test_users.py index 09619b7..bfa75b2 100644 --- a/http-api/tests/routes/test_users.py +++ b/http-api/tests/routes/test_users.py @@ -8,7 +8,6 @@ from ..conftest import HttpApiProxy, LambdaContext def test_get_emails( mock_app, - monkeypatch, dynamodb_seeds, dynamodb_persistence_layer: DynamoDBPersistenceLayer, http_api_proxy: HttpApiProxy, diff --git a/http-api/tests/test_konviva.py b/http-api/tests/test_konviva.py new file mode 100644 index 0000000..2fd8994 --- /dev/null +++ b/http-api/tests/test_konviva.py @@ -0,0 +1,11 @@ +import konviva +from settings import KONVIVA_API_URL + + +def test_konviva_token(): + token = konviva.token('sergio@somosbeta.com.br') + + assert isinstance(token, konviva.KonvivaToken) + + redirect_uri = konviva.redirect_uri(token) + assert KONVIVA_API_URL in redirect_uri diff --git a/http-api/uv.lock b/http-api/uv.lock index 103c60e..9cb47d9 100644 --- a/http-api/uv.lock +++ b/http-api/uv.lock @@ -149,6 +149,41 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, ] +[[package]] +name = "charset-normalizer" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 }, + { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 }, + { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 }, + { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 }, + { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 }, + { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 }, + { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 }, + { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 }, + { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 }, + { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 }, + { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 }, + { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 }, + { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 }, + { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, + { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, + { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, + { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, + { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, + { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, + { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, + { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, + { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, + { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, + { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, + { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, + { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +] + [[package]] name = "colorama" version = "0.4.6" @@ -354,6 +389,7 @@ dev = [ { name = "pytest" }, { name = "pytest-cov" }, { name = "ruff" }, + { name = "tqdm" }, ] [package.metadata] @@ -364,6 +400,7 @@ dev = [ { name = "pytest", specifier = ">=8.3.4" }, { name = "pytest-cov", specifier = ">=6.0.0" }, { name = "ruff", specifier = ">=0.9.1" }, + { name = "tqdm", specifier = ">=4.67.1" }, ] [[package]] @@ -421,6 +458,7 @@ dependencies = [ { name = "pydantic", extra = ["email"] }, { name = "pydantic-extra-types" }, { name = "pytz" }, + { name = "requests" }, { name = "shortuuid" }, ] @@ -437,6 +475,7 @@ requires-dist = [ { name = "pydantic", extras = ["email"], specifier = ">=2.10.6" }, { name = "pydantic-extra-types", specifier = ">=2.10.3" }, { name = "pytz", specifier = ">=2025.1" }, + { name = "requests", specifier = ">=2.32.3" }, { name = "shortuuid", specifier = ">=1.0.13" }, ] @@ -669,6 +708,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", size = 507930 }, ] +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + [[package]] name = "ruff" version = "0.11.2" @@ -724,6 +778,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, ] +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, +] + [[package]] name = "typing-extensions" version = "4.12.2"