Aller au contenu

La commande make:public-contact dans Forge

forge make:public-contact génère une page de contact publique : un gabarit de vue et une méthode de contrôleur.
C'est une variante spécialisée de la page publique, dédiée aux coordonnées de contact.

Le code correspondant est dans cli/public/public_contact.py.

1. Rôle

La commande crée une page de contact publique fixe, sous le slug contact.

Elle réutilise entièrement la mécanique de make:public-page :

  • elle écrit un gabarit Jinja sous mvc/views/public/contact.html ;
  • elle ajoute une méthode contact au contrôleur mvc/controllers/public_pages_controller.py ;
  • elle déclare une route publique GET /contact dans mvc/routes/__init__.py.

Le gabarit affiche des coordonnées (email, téléphone, adresse) en français littéral, prêtes à être renseignées.
Contrairement à make:public-form, cette page n'insère pas de données : elle présente des informations de contact.

Forge ne réécrit jamais un fichier utilisateur en silence (principe 9).
Le gabarit suit le mode write-if-new ; le contrôleur et les routes sont complétés par insertion.

2. Vue d'ensemble rapide

Élément Valeur
Commande forge forge make:public-contact (aucun argument)
Module Python cli.public.public_contact
Catégorie génération de pages publiques (CLI)
Rôle générer une page de contact publique (vue, contrôleur, route)
Entrées aucune (slug fixe contact)
Sorties un gabarit de contact, une méthode contact, une route GET /contact
Fichiers touchés mvc/views/public/contact.html, mvc/controllers/public_pages_controller.py, mvc/routes/__init__.py
Mode Forge génère (write-if-new pour le gabarit), complète par insertion le contrôleur et les routes
ADR ADR-051 (insertion dans le contrôleur des pages publiques), ADR-029 (convention de routes)

3. Schémas UML

3.1 Diagramme de séquence

Le diagramme montre le déroulé d'un appel à forge make:public-contact.
La commande s'appuie sur les helpers de public_page pour insérer la méthode et la route.

sequenceDiagram
    actor Dev as Développeur
    participant Forge as forge CLI
    participant Cmd as make_public_contact
    participant Page as helpers public_page
    participant FS as Système de fichiers

    Dev->>Forge: forge make:public-contact
    Forge->>Cmd: main([])
    Cmd->>Page: build_public_page_spec("contact")
    Cmd->>FS: écrit contact.html si absent
    Cmd->>Page: _ensure_controller_method(contact)
    Page->>FS: insère la méthode si absente
    Cmd->>Page: _ensure_route(GET /contact)
    Page->>FS: insère la route si absente
    Cmd-->>Dev: affiche créés, préservés, avertissements

À retenir :

  • le slug est fixe (contact), aucun argument n'est attendu ;
  • la génération réutilise la spécification et les helpers de public_page ;
  • le gabarit existant est préservé, avec le message « Aucun écrasement effectué.
    ».

4. API publique / Commande

Invocation :

forge make:public-contact

La commande n'accepte aucun argument ; sinon elle affiche Usage : forge make:public-contact (aucun argument attendu).

Symbole Signature Rôle
build_contact_template build_contact_template() -> str produit le gabarit de la page de contact
make_public_contact make_public_contact(*, root: Path \| None = None) -> MakePublicPageResult exécute la génération complète
print_result print_result(result: MakePublicPageResult) -> None affiche le résultat de la génération
main main(args: list[str] \| None = None, *, root: Path \| None = None) -> MakePublicPageResult point d'entrée de forge make:public-contact

Le résultat est un MakePublicPageResult, la même structure que make:public-page.

5. Contextes d'utilisation

Besoin Commande / Élément
Offrir une page de contact publique prête à l'emploi forge make:public-contact
Hériter de la mise en page commune des pages publiques cli.public.public_contact (réutilise public_page)
Produire seulement le gabarit de contact build_contact_template()

6. Exemples d'utilisation

Générer la page de contact :

forge make:public-contact

Sortie typique :

Page contact générée
Route : /contact
Template : mvc/views/public/contact.html
Contrôleur : mvc/controllers/public_pages_controller.py

Appel direct depuis du code Python :

from cli.public.public_contact import make_public_contact

result = make_public_contact()
print(result.spec.slug)  # "contact"

7. Idempotence et écriture write-if-new

Préservation des fichiers utilisateur

Si mvc/views/public/contact.html existe déjà, il est conservé tel quel.
La sortie indique alors « Page contact déjà existante »
suivie de « Aucun écrasement effectué.
».

Coordonnées à compléter

Le gabarit généré contient des valeurs de démonstration (email, téléphone, adresse).
Ce sont des libellés en français littéral : ajustez directement le texte et les coordonnées dans le gabarit.

Voir aussi