Prompts de code : une tâche prête pour chaque langage

Seize cahiers des charges à donner au générateur de code tels quels. Chacun fixe déjà le langage et sa version, le framework éventuel et le niveau de gestion des erreurs : remplacez les noms de vos champs, appliquez en un clic et lisez le code.

Fonctions et utilitaires

Les petites briques qu'on réécrit dans chaque projet : fabriquer un slug d'URL depuis un titre, formater un montant en euros, écrire une fonction de validation d'un champ de formulaire et compter les jours ouvrés entre deux dates.

Slug URL depuis le titre

Transforme le titre d'un article en adresse propre : minuscules, tirets, rien à échapper.

Prompt

Écris une fonction JavaScript qui transforme le titre d'un article en slug d'URL : minuscules, espaces remplacés par des tirets, accents et cédilles supprimés, ponctuation jetée, jamais de tiret aux extrémités. Sans dépendances.

Résultat

export function slugify(title) { // la normalisation sépare la lettre de son accent, et l'accent est jeté — dans une URL il ne resterait que du %C3 const base = title.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase() return base.replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "")}

Formater un montant

Séparateur de milliers, deux décimales et la devise — arrondi fait avant le formatage, pas après.

Prompt

Écris une fonction Python qui affiche un Decimal comme un montant au format français : 1234.5 devient 1 234,50 EUR. Arrondis d'abord aux centimes et jamais sur un float, et laisse passer un autre code de devise.

Résultat

def format_money(amount: Decimal, currency: str = "EUR") -> str: # on quantifie en centimes AVANT le formatage : sur un float, le dernier centime disparaît value = amount.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) return locale.format_string("%.2f", value, grouping=True) + " " + currency

Valider un champ de formulaire

Une expression régulière pour l'e-mail et le téléphone, plus la vérification d'une ligne qui s'en sert.

Prompt

Écris des expressions régulières qui valident une adresse e-mail et un numéro de téléphone français dans un formulaire d'inscription, avec une courte fonction de vérification pour chacune. Explique chaque partie du motif pour que je puisse l'ajuster.

Résultat

const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[a-z]+$/i// côté navigateur on ne vérifie que la forme — l'existence de l'adresse, c'est le mail de confirmation qui la prouveexport const isEmail = (value) => EMAIL_RE.test(value.trim().toLowerCase())

Jours ouvrés entre deux dates

Week-ends et jours fériés retirés, et une exception si les dates arrivent à l'envers.

Prompt

Écris une fonction PHP 8.3 qui compte les jours ouvrés entre deux dates : saute les samedis, les dimanches et toute date du tableau des jours fériés. Lève une exception si la date de fin précède la date de début.

Résultat

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));}

Données et API

La conversation avec le service d'en face et avec sa propre base : un appel d'API qui gère le timeout et les relances, l'import d'un fichier CSV mal formé, une requête SQL de rapport et une sortie paginée.

Appel d'API avec relances

Un timeout, une relance sur 5xx et un arrêt net : qu'un service lent ne bloque pas toute la requête.

Prompt

Écris une fonction TypeScript qui appelle une API HTTP avec quatre secondes de timeout et trois tentatives au plus. Relance seulement sur 5xx et erreurs réseau, jamais sur 4xx, attends entre les tentatives et lève une erreur typée une fois les tentatives épuisées.

Résultat

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)}

Importer un CSV bancal

Lit le tarif d'un fournisseur et met les lignes cassées dans leur propre fichier au lieu de planter.

Prompt

Écris un script Python avec pandas qui importe le tarif d'un fournisseur depuis un CSV : point-virgule comme séparateur, virgule décimale, les prix arrivent en texte et manquent dans certaines lignes. Envoie les lignes fautives dans rejected.csv et retire les doublons par order_id.

Résultat

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")

Une requête de rapport

Chiffre d'affaires par client et par mois, écrit contre le schéma collé dans le champ données.

Prompt

Écris une requête PostgreSQL pour le schéma ci-dessus : chiffre d'affaires par client et par mois sur la dernière année, du plus gros au plus petit, sans les clients qui n'ont jamais commandé.

Résultat

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

Sortie paginée

Pagination par curseur : celle qui ne répète pas de lignes quand de nouvelles arrivent pendant le défilement.

Prompt

Écris une fonction TypeScript avec Prisma qui renvoie une page d'articles publiés en pagination par curseur : vingt à la fois, les plus récents d'abord, plus un nextCursor que le client renvoie pour la page suivante.

Résultat

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

Interface

Les morceaux d'écran qui sont en réalité du code : un hook React réutilisable, une grille de cartes responsive qui tient aussi sur un téléphone et un écran de liste pour une application mobile.

Un hook React

Retient la saisie dans la recherche pour ne pas relancer la liste à chaque touche.

Prompt

Écris un hook React typé qui retarde une valeur de 300 ms et nettoie son minuteur au démontage, plus deux lignes montrant comment un champ de recherche l'utilise.

Résultat

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}

Une grille de cartes souple

Les cartes du catalogue passent de quatre colonnes à une seule sans une seule media query.

Prompt

Écris le CSS d'une grille de cartes de catalogue : cartes de 260px minimum, la rangée se remplit entièrement, 16px d'écart, sans media queries. Noms de classes en BEM.

Résultat

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

Un écran de liste

Une liste de commandes défilante en Jetpack Compose, avec appui sur la ligne et état vide.

Prompt

Écris un écran Jetpack Compose avec une liste de commandes défilante : chaque ligne montre le numéro, la date et le montant, un appui ouvre la commande, et un message apparaît quand la liste est vide.

Résultat

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

Scripts et automatisation

Du code qui tourne sans vous : un script de sauvegarde automatique de la base lancé la nuit, un petit outil en ligne de commande à usage unique et une tâche planifiée par cron qui se réveille toute seule.

Sauvegarde nocturne de la base

Fait le dump, nomme le fichier par la date et efface tout ce qui dépasse le mois.

Prompt

Écris un script Bash qui dumpe une base PostgreSQL dans /backup avec la date dans le nom du fichier, supprime les dumps de plus de 30 jours et s'arrête à la première erreur. Sans avertissement ShellCheck.

Résultat

#!/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

Un outil en ligne de commande

Un outil à usage unique : il parcourt un dossier et renomme les fichiers selon une règle.

Prompt

Écris un outil en ligne de commande en Go qui parcourt un dossier et renomme les photos selon leur date de prise de vue. Le dossier arrive en flag, sans --apply affiche seulement ce qui changerait, et n'utilise que la bibliothèque standard.

Résultat

func main() { dir := flag.String("dir", ".", "dossier contenant les photos") flag.Parse() if err := filepath.WalkDir(*dir, renameByShootDate); err != nil { log.Fatal(err) }}

Une tâche planifiée

Se réveille à sept heures en semaine, prend les chiffres de la veille et les envoie par mail.

Prompt

Écris une tâche Node.js qui, à 07:00 du lundi au vendredi, récupère les ventes de la veille dans PostgreSQL, en fait un tableau HTML et l'envoie par mail à l'équipe commerciale. Journalise les échecs et ne fais jamais tomber le processus.

Résultat

// sept heures en semaine : les chiffres doivent être là avant le point quotidiencron.schedule("0 7 * * 1-5", async () => { const rows = await db.query(DAILY_SALES_SQL) await mailer.send({ to: "ventes@boutique.fr", subject: "Ventes de la veille", html: render(rows) })})

Tests

Des tests sur du code déjà écrit : écrire des tests unitaires pour une fonction existante, couvrir un endpoint d'API et passer par les cas limites qu'on saute discrètement quand on les écrit à la main.

Tests pour une fonction

pytest avec des cas paramétrés : zéro, un montant négatif et None.

Prompt

Écris des tests pytest pour une fonction format_money(amount, currency) : zéro, un gros montant, un montant négatif, deux décimales et un TypeError quand None arrive. Avec parametrize.

Résultat

@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)

Tests pour un endpoint

Des tests JUnit sur GET et POST, avec le 404 et l'erreur de validation.

Prompt

Écris des tests JUnit 5 pour l'endpoint REST /api/orders : 200 avec un corps pour une commande existante, 404 pour un id inconnu, 400 pour un payload malformé. Vérifie les champs JSON, pas seulement le statut.

Résultat

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

Prompts pour le générateur de code : 16 tâches prêtes