Construir uma API HTTP em Node.js capaz de:
- Receber ideias de posts.
- Usar IA para gerar título e conteúdo em Markdown.
- Persistir rascunhos em PostgreSQL.
- Controlar fluxo de rascunho → aprovação → publicação → rejeição.
- Expor endpoints para criação, listagem, busca e gerenciamento de posts.
- Usar Node.js nativo (sem Express, Fastify ou NestJS).
- Responder sempre em JSON com
Content-Type: application/json. - Persistência em PostgreSQL.
- Separar responsabilidades: camada HTTP, regras de negócio, persistência, integração com IA.
- Não publicar automaticamente posts recém-criados pela IA.
- Rascunhos não são considerados publicados.
- Posts rejeitados não são considerados publicados.
Cada registro na tabela posts deve conter:
id: identificador único (nanoid).title: título gerado pela IA.content: conteúdo em Markdown.created_at: data de criação.approved_at: data de aprovação (quando existir).published_at: data de publicação (quando existir).rejected_at: data de rejeição (quando existir).
- Serviço responsável por gerar rascunho a partir de uma ideia.
- Deve retornar:
titlecontent(em Markdown, português brasileiro, com introdução, desenvolvimento e conclusão).
- Validar resposta da IA com zod antes de persistir.
Lista posts públicos:
published_atdefinido e <= data atual.approved_atdefinido.rejected_atnulo.
Lista todos os posts (rascunhos, rejeitados e publicados).
Busca post público pelo ID.
- Retorna 404 se não existir ou não estiver público.
Cria rascunho via IA.
- Body:
{ "idea": "..." } - Campos
published_at,approved_at,rejected_atiniciam comonull.
Aprova e publica post.
- Define
approved_atepublished_atcom data atual. rejected_atvolta anull.
Rejeita post.
- Define
rejected_atcom data atual. - Remove
approved_atepublished_at.
- Disponibilizar Swagger/OpenAPI descrevendo endpoints, parâmetros, schemas e respostas.
Cobrir:
- Roteador HTTP.
- Leitura de corpo JSON.
- Operações do repositório de posts.
- Fluxo de criação de rascunho.
- Listagem pública.
- Busca por post inexistente.
- Aprovação e rejeição.
- Disponibilização da documentação da API.
- PostgreSQL em container (Docker Compose).
- Arquivo
.env.examplecom variáveis necessárias. - Ferramentas sugeridas:
pg→ conexão PostgreSQL.postgrator→ migrations.zod→ validação.nanoid→ IDs únicos.supertest→ testes end-to-end.
- Todas as respostas e perguntas devem ser feitas em português brasileiro.
- Não usar frameworks HTTP.
- Usar status HTTP coerentes.
- Não armazenar chaves de serviços externos no repositório.
- Encerrar conexões corretamente.
- Testes devem rodar de forma automatizada.