update profile
This commit is contained in:
@@ -64,8 +64,6 @@ class AuditLogMiddleware(BaseMiddlewareHandler):
|
||||
ip_addr = req_context.http.source_ip
|
||||
response = next_middleware(app)
|
||||
|
||||
print(app.context['_route'])
|
||||
|
||||
# Successful response
|
||||
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#successful_responses
|
||||
if 200 <= response.status_code < 300 and user:
|
||||
|
||||
@@ -10,9 +10,11 @@ from elasticsearch import Elasticsearch
|
||||
from layercake.dynamodb import (
|
||||
DynamoDBCollection,
|
||||
DynamoDBPersistenceLayer,
|
||||
KeyPair,
|
||||
MissingError,
|
||||
SortKey,
|
||||
TransactKey,
|
||||
)
|
||||
from layercake.extra_types import CpfStr, NameStr
|
||||
from pydantic import UUID4, BaseModel, StringConstraints
|
||||
|
||||
import cognito
|
||||
@@ -21,6 +23,7 @@ from api_gateway import JSONResponse
|
||||
from boto3clients import dynamodb_client, idp_client
|
||||
from middlewares import AuditLogMiddleware
|
||||
from models import User
|
||||
from rules.user import update_user
|
||||
from settings import ELASTIC_CONN, USER_POOOL_ID, USER_TABLE
|
||||
|
||||
from .emails import router as emails
|
||||
@@ -65,6 +68,46 @@ def post_user(payload: User):
|
||||
return JSONResponse(status_code=HTTPStatus.CREATED)
|
||||
|
||||
|
||||
class UserData(BaseModel):
|
||||
name: NameStr
|
||||
cpf: CpfStr
|
||||
|
||||
|
||||
@router.put(
|
||||
'/<id>',
|
||||
compress=True,
|
||||
tags=['User'],
|
||||
summary='Update user',
|
||||
middlewares=[
|
||||
AuditLogMiddleware('USER_UPDATE', user_collect, ('id', 'name', 'new_cpf'))
|
||||
],
|
||||
)
|
||||
def put_user(id: str, payload: UserData):
|
||||
update_user(
|
||||
{
|
||||
'id': id,
|
||||
'name': payload.name,
|
||||
'cpf': payload.cpf,
|
||||
},
|
||||
persistence_layer=user_layer,
|
||||
)
|
||||
return JSONResponse(
|
||||
body={
|
||||
'id': id,
|
||||
'name': payload.name,
|
||||
'new_cpf': payload.cpf,
|
||||
},
|
||||
status_code=HTTPStatus.OK,
|
||||
)
|
||||
|
||||
|
||||
@router.get('/<id>', compress=True, tags=['User'], summary='Get user')
|
||||
def get_user(id: str):
|
||||
return user_collect.get_items(
|
||||
TransactKey(id) + SortKey('0') + SortKey('last_profile_edit')
|
||||
)
|
||||
|
||||
|
||||
class Password(BaseModel):
|
||||
cognito_sub: UUID4
|
||||
new_password: Annotated[str, StringConstraints(min_length=6)]
|
||||
@@ -95,11 +138,6 @@ def password(id: str, payload: Password):
|
||||
)
|
||||
|
||||
|
||||
@router.get('/<id>', compress=True, tags=['User'], summary='Get user')
|
||||
def get_user(id: str):
|
||||
return user_collect.get_item(KeyPair(id, '0'))
|
||||
|
||||
|
||||
@router.get('/<sub>/idp', compress=True, include_in_schema=False)
|
||||
def get_idp(sub: str):
|
||||
return cognito.admin_get_user(
|
||||
|
||||
@@ -1,11 +1,88 @@
|
||||
import json
|
||||
from http import HTTPMethod, HTTPStatus
|
||||
|
||||
from layercake.dynamodb import DynamoDBCollection, DynamoDBPersistenceLayer, KeyPair
|
||||
from layercake.dynamodb import (
|
||||
DynamoDBCollection,
|
||||
DynamoDBPersistenceLayer,
|
||||
KeyPair,
|
||||
SortKey,
|
||||
TransactKey,
|
||||
)
|
||||
|
||||
from ..conftest import HttpApiProxy, LambdaContext
|
||||
|
||||
|
||||
def test_update_user_cpf(
|
||||
mock_app,
|
||||
dynamodb_seeds,
|
||||
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
|
||||
http_api_proxy: HttpApiProxy,
|
||||
lambda_context: LambdaContext,
|
||||
):
|
||||
r = mock_app.lambda_handler(
|
||||
http_api_proxy(
|
||||
raw_path='/users/5OxmMjL-ujoR5IMGegQz',
|
||||
method=HTTPMethod.PUT,
|
||||
body={
|
||||
'name': 'Sérgio Siqueira',
|
||||
'cpf': '26886156020',
|
||||
},
|
||||
),
|
||||
lambda_context,
|
||||
)
|
||||
assert r['statusCode'] == HTTPStatus.OK
|
||||
|
||||
collect = DynamoDBCollection(dynamodb_persistence_layer)
|
||||
user = collect.get_items(
|
||||
TransactKey('5OxmMjL-ujoR5IMGegQz')
|
||||
+ SortKey('0')
|
||||
+ SortKey('last_profile_edit')
|
||||
)
|
||||
assert 'last_profile_edit' in user
|
||||
|
||||
|
||||
def test_update_user_name(
|
||||
mock_app,
|
||||
dynamodb_seeds,
|
||||
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
|
||||
http_api_proxy: HttpApiProxy,
|
||||
lambda_context: LambdaContext,
|
||||
):
|
||||
r = mock_app.lambda_handler(
|
||||
http_api_proxy(
|
||||
raw_path='/users/5OxmMjL-ujoR5IMGegQz',
|
||||
method=HTTPMethod.PUT,
|
||||
body={
|
||||
'name': 'Sérgio R Siqueira',
|
||||
'cpf': '07879819908',
|
||||
},
|
||||
),
|
||||
lambda_context,
|
||||
)
|
||||
assert r['statusCode'] == HTTPStatus.OK
|
||||
|
||||
|
||||
def test_update_user_conflict_cpf(
|
||||
mock_app,
|
||||
dynamodb_seeds,
|
||||
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
|
||||
http_api_proxy: HttpApiProxy,
|
||||
lambda_context: LambdaContext,
|
||||
):
|
||||
r = mock_app.lambda_handler(
|
||||
http_api_proxy(
|
||||
raw_path='/users/5OxmMjL-ujoR5IMGegQz',
|
||||
method=HTTPMethod.PUT,
|
||||
body={
|
||||
'name': 'Sérgio Siqueira',
|
||||
'cpf': '08679004901',
|
||||
},
|
||||
),
|
||||
lambda_context,
|
||||
)
|
||||
assert r['statusCode'] == HTTPStatus.BAD_REQUEST
|
||||
|
||||
|
||||
def test_get_emails(
|
||||
mock_app,
|
||||
dynamodb_seeds,
|
||||
|
||||
@@ -20,3 +20,4 @@
|
||||
{"id": {"S": "QV4sXY3DvSTUMGJ4QqsrwJ"}, "sk": {"S": "generated_items#43ea4475-c369-4f90-b576-135b7df5106b"}}
|
||||
{"id": {"S": "email"}, "sk": {"S": "sergio@somosbeta.com.br"}}
|
||||
{"id": {"S": "cpf"}, "sk": {"S": "07879819908"}}
|
||||
{"id": {"S": "cpf"}, "sk": {"S": "08679004901"}}
|
||||
|
||||
@@ -22,7 +22,7 @@ const courses = defineCollection({
|
||||
z.object({
|
||||
id: z.string(),
|
||||
title: z.string(),
|
||||
summary: z.string(),
|
||||
excerpt: z.string(),
|
||||
slug: z.string(),
|
||||
image: image().optional(),
|
||||
course: z.object({
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 386f7086-2871-436f-85f5-31d632fbf624
|
||||
title: Boas Práticas em Manipulação de Alimentos
|
||||
slug: boas-praticas-em-manipulcao-de-alimentos
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: true
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 3c27ea9c-9464-46a1-9717-8c1441793186
|
||||
title: CIPA Grau de Risco 1
|
||||
slug: cipa-grau-de-risco-1
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 99bb3b60-4ded-4a8e-937c-ba2d78ec6454
|
||||
title: CIPA Grau de Risco 2
|
||||
slug: cipa-grau-de-risco-2
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 863214e8-26e2-440b-854b-a0ced0164bbf
|
||||
title: CIPA Grau de Risco 3 (teórico)
|
||||
slug: cipa-grau-de-risco-3-terico
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: f7def039-bf27-496a-94ff-0667c9c0c0db
|
||||
title: CIPA Grau de Risco 3
|
||||
slug: cipa-grau-de-risco-3
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 38d8ba20-49a4-4c69-b674-b70a985eb76a
|
||||
title: CIPA Grau de Risco 4
|
||||
slug: cipa-grau-de-risco-4
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 281198c2-f293-4acc-b96e-e4a2d5f6b73c
|
||||
title: CIPA
|
||||
slug: cipa
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 4866c068-577a-45b0-b41a-41a7dc6b9ab7
|
||||
title: Combate a Incêndio
|
||||
slug: combate-a-incendio
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 00ebdd8d-b4db-4437-8814-274811a4c469
|
||||
title: Direção Defensiva (08 horas)
|
||||
slug: direcao-defensiva-08-horas
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: a1a8727c-0519-4692-93e7-81dbe66e167f
|
||||
title: Direção Defensiva (20 horas)
|
||||
slug: direo-defensiva-20-horas
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 6d17d9cf-96be-42a4-bae5-75926e1e832a
|
||||
title: Exposição ao Benzeno - (Portaria 1109)
|
||||
slug: exposicao-ao-benzeno-portaria-1109
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: c19cd7ee-3cc8-4f9c-95ff-dad7993f49b1
|
||||
title: Gestão da Cultura de Segurança
|
||||
slug: gestao-da-cultura-de-seguranca
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 96c03c32-089c-4ccb-8aa1-73b0f49228b9
|
||||
title: Lei Lucas
|
||||
summary: Capacitação obrigatória em primeiros socorros para profissionais da educação, conforme a Lei 13.722/2018, abordando técnicas essenciais como RCP, controle de hemorragias e desobstrução das vias aéreas.
|
||||
excerpt: Capacitação obrigatória em primeiros socorros para profissionais da educação, conforme a Lei 13.722/2018, abordando técnicas essenciais como RCP, controle de hemorragias e desobstrução das vias aéreas.
|
||||
slug: lei-lucas
|
||||
draft: false
|
||||
|
||||
@@ -11,6 +11,7 @@ course:
|
||||
|
||||
import { Accordion, Item, Header, Body } from "~/components/Accordion";
|
||||
|
||||
<Fragment slot="modules">
|
||||
<Accordion>
|
||||
<Item>
|
||||
<Header>Introdução à Lei Lucas</Header>
|
||||
@@ -38,4 +39,6 @@ import { Accordion, Item, Header, Body } from "~/components/Accordion";
|
||||
<Header>Sinais vitais e avaliação primária</Header>
|
||||
<Body></Body>
|
||||
</Item>
|
||||
|
||||
</Accordion>
|
||||
</Fragment>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 80dfc302-4e05-4f23-944d-9a2768cb6c7d
|
||||
title: LOTO Lockout e Tagout
|
||||
slug: loto-lockout-e-tagout
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 439e9a43-ab92-469a-a849-b6e824370f80
|
||||
title: Noções em Primeiros Socorros
|
||||
slug: noes-em-primeiros-socorros
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 5c119d4b-573c-4d8d-a99d-63756af2f4c5
|
||||
title: NR-06 - Equipamento de Proteção Individual - EPI
|
||||
slug: nr-06-equipamento-de-proteo-individual-epi
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 4ea2498a-a6a9-4293-94d0-ceeb248e64b7
|
||||
title: NR-10 Básico
|
||||
slug: nr-10-basico
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 2e1c93c2-1779-482b-9552-c04e09db8349
|
||||
title: NR-10 Complementar (SEP)
|
||||
slug: nr-10-complementar-sep
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: b3d0e345-a8e5-4dc2-a3b0-218bc894ee55
|
||||
title: NR-10 Noções do Risco Elétrico
|
||||
slug: nr-10-nocoes-do-risco-eletrico
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 7f7905aa-ec6d-4189-b884-50fa9b1bd0b8
|
||||
title: NR-10 Reciclagem
|
||||
slug: nr-10-reciclagem
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: f10c3283-7722-41c6-ba5d-222f9f4f48af
|
||||
title: NR-11 Operador de Empilhadeira
|
||||
slug: nr-11-operador-de-empilhadeira
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 479516a7-5431-452e-8f28-228e34b86e0c
|
||||
title: NR-11 Segurança em Transpaleteira
|
||||
slug: nr-11-seguranca-em-transpaleteira
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: b945be62-408d-4099-a75c-4d1dda929659
|
||||
title: NR-11 Segurança na Operação de Pontes Rolantes
|
||||
slug: nr-11-seguranca-na-operacao-de-pontes-rolantes
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 4682187a-cb5c-47a8-9597-ad9243a6d717
|
||||
title: NR-11 Segurança na Operação de Talhas
|
||||
slug: nr-11-seguranca-na-operacao-de-talhas
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 70827c13-1db5-4499-977f-9a6623e45161
|
||||
title: NR-11 Segurança na Operação de Rebocadores
|
||||
slug: nr-11-seguranca-na-operao-de-rebocadores
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: a810dd22-56c0-4d9b-8cd2-7e2ee9c45839
|
||||
title: NR-11 Transporte, movimentação, armazenagem e manuseio de materiais
|
||||
slug: nr-11-transporte-movimentacao-armazenagem-e-manuseio-de-materiais
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 52b4a909-b6a9-456e-a7b9-c0b3c18ebe00
|
||||
title: NR-12 Máquinas e Equipamentos
|
||||
slug: nr-12-maquinas-e-equipamentos
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 5c53656d-9557-4ef9-8e05-08d3190bb115
|
||||
title: NR-13 Operador de Caldeiras
|
||||
slug: nr-13-operador-de-caldeiras
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 3b05b03c-8714-4f98-90e0-2a3ac4940035
|
||||
title: NR-13 Vasos de Pressão e Unidades de Processo
|
||||
slug: nr-13-vasos-de-pressao-e-unidades-de-processo
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: a3c46d94-cf31-4b5f-8de3-6aa1c2d423f0
|
||||
title: NR-17 Ergonomia para Teleatendimento/Telemarketing
|
||||
slug: nr-17-ergonomia-para-teleatendimento-telemarketing
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 4e52d4e9-0566-4f8c-8307-1db770e4c33c
|
||||
title: NR-17 Ergonomia
|
||||
slug: nr-17-ergonomia
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 7aba7598-83b2-4df7-938c-d075ffef47ca
|
||||
title: NR-18 Construção Civil
|
||||
slug: nr-18-construcao-civil
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 450a70ca-8ab5-4520-8a22-0e277359797d
|
||||
title: NR-18 PEMT Plataforma Móvel de Trabalho Aéreo
|
||||
summary: Capacita os profissionais para identificar e minimizar riscos, utilizar corretamente os Equipamentos de Proteção Individual (EPIs), realizar manutenções preventivas e corretivas, além de garantir a segurança durante a operação de plataformas elevatórias.
|
||||
excerpt: Capacita os profissionais para identificar e minimizar riscos, utilizar corretamente os Equipamentos de Proteção Individual (EPIs), realizar manutenções preventivas e corretivas, além de garantir a segurança durante a operação de plataformas elevatórias.
|
||||
slug: nr-18-plataforma-de-trabalho-aereo
|
||||
draft: false
|
||||
image: ./_assets/nr-18-plataforma.png
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 96c2553a-d087-42ad-be5e-e960ea673c3d
|
||||
title: NR-18 Sinaleiro e Amarrador de Cargas para Içamento
|
||||
slug: nr-18-sinaleiro-e-amarrador-de-cargas-para-icamento
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: d800d2a9-ae76-46de-be82-3e06ae6afcee
|
||||
title: NR-20 Básico
|
||||
slug: nr-20-basico
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 95a1fcb9-ba16-4b3c-a59d-047ca32078ff
|
||||
title: NR-20 Iniciação
|
||||
slug: nr-20-inicicao
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 6689a04a-99c1-4150-b1ed-c131b6dc5bb5
|
||||
title: NR-20 Intermediário
|
||||
slug: nr-20-intermediario
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 07da69f2-2a2c-4771-b766-633295476ad7
|
||||
title: NR-26 Sinalização de Segurança
|
||||
slug: nr-26-sinalizao-de-seguranca
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 5c9c1ff1-361f-479d-bd2c-eb3b124a74fc
|
||||
title: NR-31 CIPATR
|
||||
slug: nr-31-cipatr
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 3f284753-85ce-4f53-8de7-cdfcdaf9515b
|
||||
title: NR-33 Supervisor em Espaço Confinado
|
||||
slug: nr-33-supervisor-em-espaco-confinado
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: b23493dd-6359-4352-97be-12dca3a21ca6
|
||||
title: NR-33 Trabalhadores Autorizados e Vigias em Espaço Confinado
|
||||
slug: nr-33-trabalhadores-autorizados-e-vigias-em-espaco-confinado
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: e1c44881-2fe3-484e-ada2-12b6bf5b9398
|
||||
title: NR-35 Segurança nos Trabalhos em Altura (Teórico)
|
||||
slug: nr-35-seguranca-nos-trabalhos-em-altura-teorico
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 6dd8f711-5c5a-477a-971f-122cbac4ce48
|
||||
title: NR-35 Supervisor de Trabalho em Altura
|
||||
slug: nr-35-supervisor-de-trabalho-em-altura
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: e1c44881-2fe3-484e-ada2-12b6bf5b9398
|
||||
title: NR-35 Trabalho em Altura
|
||||
slug: nr-35-trabalhos-em-altura-teorico
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: c2d1362f-aa7f-40b0-bd15-37570bda5f25
|
||||
title: PCA - Programa de Conservação Auditiva
|
||||
slug: pca-programa-de-conservacao-auditiva
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 1c7b1cf0-6973-4271-9407-6e974f0094e9
|
||||
title: PPR Programa de Proteção Respiratória
|
||||
slug: ppr-programa-de-protecao-respiratoria
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: f05293f0-2ff4-4026-9e65-2f0f67d9f83b
|
||||
title: Prevenção e combate ao assédio sexual e às demais formas de violência no trabalho
|
||||
slug: prevencao-e-combate-ao-assedio-sexual-e-as-demais-formas-de-violencia-no-trabalho
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 15ee05a3-4ceb-4b7e-9979-db75b28c9ade
|
||||
title: Reciclagem de NR-10 SEP 08 horas
|
||||
slug: reciclagem-de-nr-10-sep-08-horas
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 446426ce-c0f0-4238-83ed-95e8c0434f45
|
||||
title: Reciclagem de NR-11 Segurança na Operação de Rebocadores
|
||||
slug: reciclagem-de-nr-11-seguranca-na-opercao-de-rebocadores
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 76a5ba94-e11c-48f5-88eb-9326df9be264
|
||||
title: NR-12 Máquinas e Equipamentos
|
||||
summary: Com foco na prevenção de acidentes, na conformidade com a NR-18 e no uso correto de EPIs, como operação, manutenção e inspeção de plataformas elevatórias, assegurando maior segurança e garantindo atendimento às exigências legais.
|
||||
excerpt: Com foco na prevenção de acidentes, na conformidade com a NR-18 e no uso correto de EPIs, como operação, manutenção e inspeção de plataformas elevatórias, assegurando maior segurança e garantindo atendimento às exigências legais.
|
||||
slug: reciclagem-de-nr-12-maquinas-e-equipamentos
|
||||
draft: false
|
||||
|
||||
@@ -11,6 +11,6 @@ course:
|
||||
reciclagem: true
|
||||
modules:
|
||||
- Descrição e identificação dos riscos associados com cada máquina e equipamento e as proteções específicas contra cada um deles
|
||||
- 'Funcionamento das proteções: como e por que devem ser usadas'
|
||||
- "Funcionamento das proteções: como e por que devem ser usadas"
|
||||
- Como e em que circunstâncias uma proteção pode ser removida por quem, sendo na maioria dos casos, somente o pessoal de inspeção ou manutenção
|
||||
---
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 0e39c7af-a812-49aa-ac12-72f4e0ede8c9
|
||||
title: Reciclagem de NR-18 Plataforma de Trabalho Aéreo PEMT
|
||||
slug: reciclagem-de-nr-18-plataforma-de-trabalho-aereo-pemt
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: c01ec8a2-0359-4351-befb-76c3577339e0
|
||||
title: Reciclagem em NR-10 Básico
|
||||
slug: reciclagem-em-nr-10-basico
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 39f89a69-3d94-4dd6-9049-66e540fb2f32
|
||||
title: Reciclagem em NR-10 Complementar (SEP)
|
||||
slug: reciclagem-em-nr-10-complementar-sep
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 6a403773-aeac-4e6a-ac39-dc958e4be52a
|
||||
title: Reciclagem em NR-11 - Operador de Empilhadeira
|
||||
slug: reciclagem-em-nr-11-operador-de-empilhadeira
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 4a0c4652-fcb3-4362-8fff-bc5ac3ba1cf3
|
||||
title: Reciclagem em NR-11 Plataforma de Trabalho Elevatória (PTA)
|
||||
slug: reciclagem-em-nr-11-plataforma-de-trabalho-elevatria-pta
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 124ca098-b609-4550-a83c-6b9120a2db42
|
||||
title: Reciclagem em NR-11 Transpaleteiras
|
||||
slug: reciclagem-em-nr-11-transpaleteiras
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: d6520884-89e7-4843-b77f-7777c5376d50
|
||||
title: Reciclagem em NR-13 Operador de Caldeiras
|
||||
slug: reciclagem-em-nr-13-operador-de-caldeiras
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 9301601e-385a-4525-a65a-4054f669632f
|
||||
title: Reciclagem em NR-13 Vasos de Pressão e Unidades de Processo
|
||||
slug: reciclagem-em-nr-13-vasos-de-pressao-e-unidades-de-processo
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 801d1115-b4e8-4213-96b1-0b4f99bf202e
|
||||
title: Reciclagem em NR-18 Básico em segurança do trabalho
|
||||
slug: reciclagem-em-nr-18-basico-em-segurana-do-trabalho
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: d9f9c3d6-ba97-4695-b1fb-e2539158b064
|
||||
title: Reciclagem em NR-20 Avançado II
|
||||
slug: reciclagem-em-nr-20-avancado-ii
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 8efe00d2-38e2-4281-8f5e-b9113e91374b
|
||||
title: Reciclagem em NR-20 Básico
|
||||
slug: reciclagem-em-nr-20-basico
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 0707270e-623f-486a-8dbd-d852377a208c
|
||||
title: Reciclagem em NR-20 - Intermediário
|
||||
slug: reciclagem-em-nr-20-intermediario
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: eb19c520-5546-4c57-898d-029c86e59fb6
|
||||
title: Reciclagem em NR-33 Supervisores em Espaço Confinado
|
||||
slug: reciclagem-em-nr-33-supervisores-em-espaco-confinado
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 2b9a6e19-2e2d-4fc2-8924-b45d47057715
|
||||
title: Reciclagem em NR-33 Trabalhos em Espaços Confinados
|
||||
slug: reciclagem-em-nr-33-trabalhos-em-espacos-confinados
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
id: 30bb357f-2f48-4764-93d1-ffe219cbc5d3
|
||||
title: Reciclagem em NR-35 Trabalhos em Altura ( Teórico)
|
||||
slug: reciclagem-em-nr-35-trabalhos-em-altura-teorico
|
||||
summary: ...
|
||||
excerpt: ...
|
||||
draft: false
|
||||
|
||||
course:
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
import '@fontsource/roboto'
|
||||
import '~/styles/app.css'
|
||||
import Logo from '~/components/logos/Eduseg.astro'
|
||||
import Container from '~/components/Container.astro'
|
||||
import HeaderNav from '~/components/HeaderNav.astro'
|
||||
import { Icon } from 'astro-icon/components'
|
||||
import "@fontsource/roboto";
|
||||
import "~/styles/app.css";
|
||||
import Logo from "~/components/logos/Eduseg.astro";
|
||||
import Container from "~/components/Container.astro";
|
||||
import HeaderNav from "~/components/HeaderNav.astro";
|
||||
import { Icon } from "astro-icon/components";
|
||||
|
||||
const year = new Date().getFullYear()
|
||||
const year = new Date().getFullYear();
|
||||
---
|
||||
|
||||
<!doctype html>
|
||||
@@ -18,7 +18,9 @@ const year = new Date().getFullYear()
|
||||
<link rel="sitemap" href="/sitemap-index.xml" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<slot name="head">
|
||||
<title>Educação que garante sua segurança — EDUSEG®</title>
|
||||
<title>
|
||||
Educação que garante sua segurança — EDUSEG®
|
||||
</title>
|
||||
</slot>
|
||||
</head>
|
||||
|
||||
@@ -29,8 +31,14 @@ const year = new Date().getFullYear()
|
||||
</a>
|
||||
|
||||
<div class="ml-auto">
|
||||
<a href="//app.betaeducacao.com.br" class="flex gap-1 items-center hover:outline rounded-xs">
|
||||
<Icon name="arrow-left-end-on-rectangle" class="size-5 rotate-180" />
|
||||
<a
|
||||
href="//app.betaeducacao.com.br"
|
||||
class="flex gap-1 items-center hover:outline rounded-xs"
|
||||
>
|
||||
<Icon
|
||||
name="arrow-left-end-on-rectangle"
|
||||
class="size-5 rotate-180"
|
||||
/>
|
||||
<>Entrar</>
|
||||
</a>
|
||||
</div>
|
||||
@@ -40,6 +48,7 @@ const year = new Date().getFullYear()
|
||||
|
||||
<main id="content">
|
||||
<slot />
|
||||
<slot name="modules" />
|
||||
</main>
|
||||
|
||||
<footer class="py-6 text-white/70">
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
---
|
||||
import { Picture } from "astro:assets";
|
||||
import { Icon } from "astro-icon/components";
|
||||
import Layout from "~/layouts/Layout.astro";
|
||||
import Layout from "~/layouts/CourseLayout.astro";
|
||||
import Container from "~/components/Container.astro";
|
||||
import Carousel from "~/components/Carousel.astro";
|
||||
|
||||
import Kordsa from "~/components/logos/Kordsa.astro";
|
||||
import Semeq from "~/components/logos/Semeq.astro";
|
||||
import Natura from "~/components/logos/Natura.astro";
|
||||
@@ -40,11 +41,11 @@ const trainer = data.course?.trainer
|
||||
: null;
|
||||
---
|
||||
|
||||
<Layout>
|
||||
<Fragment slot="head">
|
||||
<title>{data.title}</title>
|
||||
</Fragment>
|
||||
|
||||
<Layout>
|
||||
<section class="space-y-6 lg:space-y-24">
|
||||
<Container class="lg:flex items-center justify-start gap-6 max-lg:pt-6">
|
||||
<Picture
|
||||
@@ -68,7 +69,7 @@ const trainer = data.course?.trainer
|
||||
{data.title}
|
||||
</h1>
|
||||
<p class="text-base/6">
|
||||
{data.summary}
|
||||
{data.excerpt}
|
||||
<a
|
||||
href="#modulos"
|
||||
class="text-blue-400 *:hover:underline"
|
||||
|
||||
Reference in New Issue
Block a user