All MicroEvals
Você é um desenvolvedor Backend Java Sênior especializado em...
Create MicroEval
Header image for Você é um desenvolvedor Backend Java Sênior especializado em...

Você é um desenvolvedor Backend Java Sênior especializado em...

Prompt

Você é um desenvolvedor Backend Java Sênior especializado em Java 25, Spring Boot 4, PostgreSQL, Redis e sistemas distribuídos. Implemente o backend de uma plataforma de processamento de pedidos chamada OrderFlow. Requisitos O sistema deve possuir: - Java 25 - Spring Boot 4 - Spring Web - Spring Data JPA - PostgreSQL - Redis - Spring Security - JWT - Bean Validation - Flyway - Docker Compose Funcionalidades 1. Autenticação Implemente: - POST "/api/auth/register" - POST "/api/auth/login" - POST "/api/auth/refresh" - POST "/api/auth/logout" Utilize access token + refresh token. O refresh token deve ser revogável. Não armazene senhas em texto puro. --- 2. Produtos Implemente: - POST "/api/products" - GET "/api/products" - GET "/api/products/{id}" - PUT "/api/products/{id}" - DELETE "/api/products/{id}" Um produto possui: - id - name - description - price - stock - createdAt - updatedAt A API deve possuir paginação. --- 3. Pedidos Implemente: - POST "/api/orders" - GET "/api/orders/{id}" - GET "/api/orders" - POST "/api/orders/{id}/cancel" Um pedido possui: - id - user - status - total - createdAt - updatedAt Cada pedido possui vários itens. --- Regra crítica Considere o seguinte cenário: O produto possui apenas 1 unidade em estoque. Dois usuários fazem uma requisição simultaneamente tentando comprar essa unidade. O sistema NÃO pode permitir estoque negativo. Implemente uma solução correta para concorrência. Explique por que sua solução funciona. --- Idempotência O endpoint de criação de pedidos deve aceitar: "Idempotency-Key" Se o cliente enviar a mesma chave duas vezes, a operação não pode criar dois pedidos. Implemente isso corretamente considerando duas requisições simultâneas. --- Redis Utilize Redis para: - cache de produtos - rate limiting - controle de idempotência Explique quais dados devem possuir TTL e quais não. --- PostgreSQL Crie as entidades e migrations necessárias. Utilize constraints do banco quando elas forem importantes para garantir integridade. Não dependa exclusivamente da aplicação para garantir regras críticas. --- Arquitetura Utilize uma arquitetura organizada em camadas. No mínimo: - Controller - Service - Repository - Domain/Entity - DTO - Mapper - Exception - Security - Configuration Evite colocar regra de negócio dentro dos Controllers. --- Tratamento de erros Crie um tratamento global utilizando "@RestControllerAdvice". A API deve retornar erros estruturados, por exemplo: { "timestamp": "...", "status": 409, "error": "CONFLICT", "message": "Insufficient stock", "path": "/api/orders" } Utilize corretamente HTTP 400, 401, 403, 404, 409 e 422 quando aplicável. --- Segurança Implemente: - autenticação JWT - autorização baseada em roles - senha com algoritmo apropriado - proteção dos endpoints administrativos - validação dos JWTs - expiração dos tokens Não coloque secrets diretamente no código. --- Observabilidade Adicione: - logs estruturados - métricas - correlation/request ID - informações úteis para debugging Explique quais métricas você monitoraria em produção. --- Docker Crie um "docker-compose.yml" contendo: - aplicação Spring Boot - PostgreSQL - Redis A aplicação deve conseguir iniciar corretamente após os serviços necessários estarem disponíveis. --- O que você deve entregar 1. Estrutura completa do projeto. 2. Código Java das principais classes. 3. Entidades JPA. 4. DTOs. 5. Controllers. 6. Services. 7. Repositories. 8. Security/JWT. 9. Exception Handler. 10. Migrations Flyway. 11. Configuração PostgreSQL. 12. Configuração Redis. 13. Docker Compose. 14. Exemplos de requests/responses. 15. Testes automatizados para as partes críticas. Parte mais importante do benchmark Depois de implementar, faça uma análise crítica da própria solução. Responda: 1. Onde existem condições de corrida? 2. O que acontece se a aplicação cair durante uma transação? 3. O que acontece se Redis ficar indisponível? 4. O que acontece se PostgreSQL ficar indisponível? 5. O que acontece se duas requisições utilizarem a mesma "Idempotency-Key" simultaneamente? 6. Como você evitaria overselling? 7. Quais índices PostgreSQL você criaria? 8. Onde existe risco de N+1 query? 9. Como você escalaria horizontalmente essa aplicação? 10. O que você mudaria se o sistema passasse de 100 requisições por segundo para 10.000? Não apresente apenas código que "parece funcionar". Explique as garantias de consistência e concorrência da implementação e diferencie claramente uma solução teoricamente correta de uma solução realmente segura em produção.

Drag to resize

Response not available

Drag to resize
Drag to resize
Drag to resize
Drag to resize