Sistema de geração automática de certificados para eventos usando AWS Lambda e Docker. O projeto gera certificados personalizados para participantes de eventos, processando mensagens do SQS e utilizando templates predefinidos. Os certificados incluem QR code para validação com logo Tech Floripa no centro e são registrados na blockchain Solana para autenticação.
- Geração de certificados personalizados com:
- Nome do participante em fonte estilizada
- Código de validação único
- Logo do evento
- Detalhes do evento em três linhas centralizadas
- QR Code para validação com logo Tech Floripa no centro
- Registro na blockchain Solana para autenticação
- Processamento de mensagens SQS
- Execução em container Docker
- Deploy automatizado para AWS Lambda
- Integração com AWS ECR
- Envio de mensagens para fila de notificação com dados do certificado
project_root/
├── certified_builder/
│ ├── certified_builder.py # Classe principal de geração de certificados
│ ├── make_qrcode.py # Geração de QR codes com logo
│ ├── certificates_on_solana.py # Integração com blockchain Solana
│ ├── solana_explorer_url.py # Extração de URL do Solana Explorer
│ └── utils/
│ └── fetch_file_certificate.py # Utilitário para download de imagens
├── models/
│ ├── participant.py # Modelo de dados do participante
│ ├── certificate.py # Modelo de dados do certificado
│ └── event.py # Modelo de dados do evento
├── aws/
│ ├── sqs_service.py # Serviço para envio de mensagens SQS
│ ├── s3_service.py # Serviço para upload no S3
│ └── boto_aws.py # Configuração do cliente AWS
├── fonts/
│ ├── PinyonScript/ # Fonte para o nome do participante
│ └── ChakraPetch/ # Fonte para detalhes e código de validação
├── tests/ # Testes automatizados
├── lambda_function.py # Handler da função Lambda
├── config.py # Configurações do projeto
├── Dockerfile # Configuração do container
└── requirements.txt # Dependências do projeto
- Python 3.13
- Pillow (Processamento de imagens)
- httpx (Requisições HTTP)
- Pydantic (Validação de dados)
- qrcode (Geração de QR codes)
- Docker
- AWS Lambda
- AWS ECR
- AWS SQS
- Solana Blockchain (Registro de certificados)
A Lambda recebe mensagens do SQS com os dados dos participantes para gerar os certificados:
{
"participants": [
{
"first_name": "Nome",
"last_name": "Sobrenome",
"email": "[email protected]",
"phone": "(00) 00000-0000",
"cpf": "000.000.000-00",
"order_id": 123,
"product_id": 456,
"product_name": "Nome do Evento",
"certificate_details": "Descrição do certificado em três linhas",
"certificate_logo": "URL do logo",
"certificate_background": "URL do template",
"order_date": "2025-03-26 20:55:25",
"checkin_latitude": "-27.5460492",
"checkin_longitude": "-48.6227075",
"time_checkin": "2025-03-26 20:55:44"
}
]
}Após a geração dos certificados, uma mensagem é enviada para outra fila SQS com os dados do certificado gerado:
[
{
"order_id": 123,
"validation_code": "ABC-DEF-GHI",
"authenticity_verification_url": "https://explorer.solana.com/tx/...?cluster=devnet",
"product_id": 456,
"product_name": "Nome do Evento",
"email": "[email protected]",
"certificate_key": "certificates/456/123/Nome_Sobrenome_Nome_do_Evento_ABC-DEF-GHI.png",
"success": true
}
]order_id: ID do pedido/ordemvalidation_code: Código de validação do certificado (formato: XXX-XXX-XXX)authenticity_verification_url: URL do Solana Explorer para verificação na blockchainproduct_id: ID do produto/eventoproduct_name: Nome do produto/eventoemail: Email do participantecertificate_key: Chave do certificado no S3 (formato:certificates/{product_id}/{order_id}/{nome_certificado}.png)success: Indica se a geração foi bem-sucedida (true/false)
Nota: A mensagem é enviada como um array, podendo conter múltiplos certificados quando processados em lote.
- Docker
- Python 3.13+
- AWS CLI configurado
- Clone o repositório:
git clone https://github.com/seu-usuario/certified_builder_py.git
cd certified_builder_py- Instale as dependências:
pip install -r requirements.txt- Execute com Docker:
docker build -t certified-builder . && docker run -p 9000:8080 certified-builder- Teste localmente:
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d @test/mock.jsonO deploy é automatizado através do GitHub Actions:
- Push para a branch main dispara o workflow
- Imagem Docker é construída
- Upload para AWS ECR
- Atualização da função Lambda
- Logo do Evento: Canto superior esquerdo (150x150 pixels máximo, redimensionado automaticamente)
- Nome: Centro do certificado (fonte Pinyon Script)
- Detalhes: Três linhas centralizadas abaixo do nome (fonte Chakra Petch)
- QR Code: Posicionado abaixo do logo (150x150 pixels) com logo Tech Floripa centralizado
- Contém URL de validação com código único:
https://tech.floripa.br/certificate-validate/?validate_code=XXX-XXX-XXX - Usa correção de erros nível H (30% redundância) para garantir leitura mesmo com logo
- Contém URL de validação com código único:
- Texto "Scan to Validate": Abaixo do QR code, centralizado
- Código de Validação: Canto inferior direito (fonte Chakra Petch)
- Fork o projeto
- Crie sua branch de feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.