Prompts de código: uma tarefa pronta para cada linguagem

Dezesseis tarefas para entregar ao gerador de código do jeito que estão. Cada uma já diz em que linguagem e versão escrever, se entra framework e com que rigor tratar os erros: troque os nomes dos seus campos, toque em «Aplicar» e leia o resultado.

Funções e utilitários

As coisinhas reescritas em todo projeto: gerar um slug a partir do título, formatar um valor em reais no JavaScript, validar um campo do formulário e calcular dias úteis entre duas datas sem contar feriado.

Slug de URL a partir do título

Transforma o título da matéria num endereço limpo: minúsculas, hifens, nada para escapar.

Prompt

Escreva uma função JavaScript que transforme o título de uma matéria em slug de URL: minúsculas, espaços viram hifens, acentos e cedilha são removidos, pontuação sai fora e nunca sobra hífen nas pontas. Sem dependências.

Resultado

export function slugify(title) { // a normalização separa a letra do acento e o acento é descartado — no endereço sobraria apenas lixo %C3 const base = title.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase() return base.replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "")}

Formatar um valor em dinheiro

Separador de milhar, duas casas decimais e a moeda, com o arredondamento feito antes da formatação.

Prompt

Escreva uma função Python que mostre um Decimal como valor no formato brasileiro: 1234.5 vira 1.234,50 BRL. Arredonde para centavos antes e nunca no float, e deixe passar outro código de moeda.

Resultado

def format_money(amount: Decimal, currency: str = "BRL") -> str: # quantizar em centavos ANTES de formatar: no float o último centavo some value = amount.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) return locale.format_string("%.2f", value, grouping=True) + " " + currency

Validar um campo do formulário

Uma expressão regular para e-mail e telefone, mais a checagem de uma linha que usa ela.

Prompt

Escreva expressões regulares que validem um e-mail e um telefone celular brasileiro no formulário de cadastro, cada uma com uma função curta de checagem. Explique cada parte do padrão para eu conseguir ajustar.

Resultado

const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[a-z]+$/i// no navegador conferimos só o formato — se o endereço existe quem diz é o e-mail de confirmaçãoexport const isEmail = (value) => EMAIL_RE.test(value.trim().toLowerCase())

Dias úteis entre duas datas

Fins de semana e feriados descontados, e uma exceção quando as datas chegam trocadas.

Prompt

Escreva uma função PHP 8.3 que conte os dias úteis entre duas datas: pule sábados, domingos e qualquer data do array de feriados. Lance uma exceção se a data final for anterior à inicial.

Resultado

function workingDays(DateTimeImmutable $from, DateTimeImmutable $to, array $holidays = []): int{ $period = new DatePeriod($from, new DateInterval("P1D"), $to); $isWork = fn (DateTimeImmutable $d) => (int) $d->format("N") < 6 && !in_array($d->format("Y-m-d"), $holidays, true); return count(array_filter(iterator_to_array($period), $isWork));}

Dados e APIs

A conversa com o serviço alheio e com o banco da casa: consumir uma API com novas tentativas quando dá timeout, importar um CSV torto, escrever a consulta de um relatório e paginar uma listagem grande.

Chamada de API com novas tentativas

Timeout, nova tentativa no 5xx e uma parada firme: um serviço lento não pode travar a requisição inteira.

Prompt

Escreva uma função TypeScript que chame uma API HTTP com quatro segundos de timeout e no máximo três tentativas. Repita só em 5xx e erros de rede, nunca em 4xx, espere entre as tentativas e lance um erro tipado quando elas acabarem.

Resultado

export async function fetchWithRetry(url: string, tries = 3): Promise<Response> { const res = await fetch(url, { signal: AbortSignal.timeout(4000) }) if (res.ok || res.status < 500 || tries === 1) return res await new Promise((r) => setTimeout(r, 400)) return fetchWithRetry(url, tries - 1)}

Importar um CSV torto

Lê a tabela de preços do fornecedor e joga as linhas quebradas num arquivo separado em vez de parar.

Prompt

Escreva um script Python com pandas que importe a tabela de preços de um fornecedor em CSV: separador ponto e vírgula, decimal com vírgula, os preços chegam como texto e em algumas linhas nem vêm. Mande as linhas ruins para rejected.csv e tire duplicatas por order_id.

Resultado

orders = pd.read_csv("orders.csv", sep=";", decimal=",", on_bad_lines="warn")orders["total"] = pd.to_numeric(orders["total"], errors="coerce")bad = orders["total"].isna()orders.loc[bad].to_csv("rejected.csv", index=False)clean = orders.loc[~bad].drop_duplicates(subset="order_id")

Uma consulta de relatório

Receita por cliente e por mês, escrita em cima do esquema que você cola no campo de dados.

Prompt

Escreva uma consulta PostgreSQL para o esquema acima: receita por cliente e por mês no último ano, do maior para o menor, sem os clientes que nunca compraram.

Resultado

SELECT c.name, date_trunc('month', o.created_at) AS month, sum(o.total) AS revenueFROM orders oJOIN customers c ON c.id = o.customer_idWHERE o.created_at >= now() - interval '1 year'GROUP BY 1, 2ORDER BY revenue DESC

Listagem paginada

Paginação por cursor: aquela que não repete linhas quando chegam novas durante a rolagem.

Prompt

Escreva uma função TypeScript com Prisma que devolva uma página de posts publicados com paginação por cursor: vinte por vez, os mais novos primeiro, e um nextCursor que o cliente manda de volta para a próxima página.

Resultado

const page = await prisma.post.findMany({ where: { published: true }, orderBy: { createdAt: "desc" }, cursor: cursorId ? { id: cursorId } : undefined, take: 20,})

Interface

As partes da tela que no fundo são código: um hook personalizado em React, um grid de cards responsivo que aguenta o celular e uma tela de listagem com carregamento e estado vazio.

Um hook de React

Segura o que se digita na busca para a lista não ser refeita a cada tecla.

Prompt

Escreva um hook React tipado que atrase um valor em 300 ms e limpe o temporizador ao desmontar, mais duas linhas mostrando como um campo de busca usa ele.

Resultado

export function useDebounced(value: string, delay = 300) { const [out, setOut] = useState(value) useEffect(() => { const id = setTimeout(() => setOut(value), delay) return () => clearTimeout(id) }, [value, delay]) return out}

Uma grade de cards elástica

Os cards do catálogo vão de quatro colunas para uma sem uma única media query.

Prompt

Escreva o CSS de uma grade de cards do catálogo: cards de no mínimo 260px, a linha preenchida por inteiro, 16px de espaço, sem media queries. Nomes de classe em BEM.

Resultado

.catalog__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px;}

Uma tela de lista

Uma lista de pedidos que rola em Jetpack Compose, com toque na linha e estado vazio.

Prompt

Escreva uma tela em Jetpack Compose com uma lista de pedidos rolável: cada linha mostra número, data e valor, o toque abre o pedido e com a lista vazia aparece um aviso.

Resultado

@Composablefun OrderList(orders: List<Order>) { LazyColumn { items(orders) { order -> OrderRow(order, onClick = { openOrder(order.id) }) } }}

Scripts e automação

Código que trabalha sem você: um script de automação para o backup do banco de dados, uma ferramenta de linha de comando de uso único e uma tarefa agendada no cron que acorda de madrugada.

Backup do banco de madrugada

Tira o dump, dá ao arquivo o nome da data e apaga tudo que passar de um mês.

Prompt

Escreva um script Bash que faça o dump de um banco PostgreSQL em /backup com a data no nome do arquivo, apague dumps com mais de 30 dias e pare no primeiro erro. Sem avisos do ShellCheck.

Resultado

#!/usr/bin/env bashset -euo pipefailstamp=$(date +%F)pg_dump --format=custom "$DATABASE_URL" > "/backup/db-$stamp.dump"find /backup -name "db-*.dump" -mtime +30 -delete

Uma ferramenta de linha de comando

Um utilitário de uso único: percorre uma pasta e renomeia os arquivos por regra.

Prompt

Escreva uma ferramenta de linha de comando em Go que percorra uma pasta e renomeie as fotos pela data em que foram tiradas. A pasta chega como flag, sem --apply só mostre o que mudaria, e use apenas a biblioteca padrão.

Resultado

func main() { dir := flag.String("dir", ".", "pasta com as fotos") flag.Parse() if err := filepath.WalkDir(*dir, renameByShootDate); err != nil { log.Fatal(err) }}

Uma tarefa agendada

Acorda às sete nos dias úteis, pega os números de ontem e manda por e-mail.

Prompt

Escreva uma tarefa Node.js que às 07:00 de segunda a sexta busque as vendas de ontem no PostgreSQL, monte uma tabela HTML e mande por e-mail para o time comercial. Registre as falhas em log e não derrube o processo.

Resultado

// sete da manhã nos dias úteis: os números precisam chegar antes da reunião diáriacron.schedule("0 7 * * 1-5", async () => { const rows = await db.query(DAILY_SALES_SQL) await mailer.send({ to: "vendas@loja.com.br", subject: "Vendas de ontem", html: render(rows) })})

Testes

Escrever testes unitários para o código que já existe: uma função coberta caso a caso e um endpoint da API testado também com entrada errada, incluindo as bordas que a gente pula calado.

Testes para uma função

pytest com casos parametrizados: zero, um valor negativo e None.

Prompt

Escreva testes pytest para uma função format_money(amount, currency): zero, um valor grande, um negativo, duas casas decimais e um TypeError quando chega None. Com parametrize.

Resultado

@pytest.mark.parametrize("amount,expected", [("0", "0,00"), ("1234.5", "1.234,50")])def test_format_money(amount, expected): assert format_money(Decimal(amount)) == expecteddef test_format_money_rejects_none(): with pytest.raises(TypeError): format_money(None)

Testes para um endpoint

Testes JUnit em GET e POST, incluindo o 404 e o erro de validação.

Prompt

Escreva testes JUnit 5 para o endpoint REST /api/orders: 200 com corpo para um pedido existente, 404 para um id desconhecido, 400 para um payload malformado. Verifique os campos do JSON, não só o status.

Resultado

@Testvoid returnsNotFoundForUnknownOrder() throws Exception { mockMvc.perform(get("/api/orders/0")) .andExpect(status().isNotFound()) .andExpect(jsonPath("$.error").value("order_not_found"));}

Prompts para o gerador de código: 16 tarefas prontas