From a2b0ab64719f7ce293a313514bc154452d845b85 Mon Sep 17 00:00:00 2001 From: William Petit Date: Fri, 7 Dec 2018 09:57:19 +0100 Subject: [PATCH] Add general usage example --- goweb.go | 3 +++ goweb_test.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 goweb.go create mode 100644 goweb_test.go diff --git a/goweb.go b/goweb.go new file mode 100644 index 0000000..855c920 --- /dev/null +++ b/goweb.go @@ -0,0 +1,3 @@ +// Package goweb - +// Ce package est une librairie d'utilitaires pour la création d'applications web +package goweb diff --git a/goweb_test.go b/goweb_test.go new file mode 100644 index 0000000..83bb385 --- /dev/null +++ b/goweb_test.go @@ -0,0 +1,55 @@ +package goweb + +import ( + "net/http" + + "forge.cadoles.com/wpetit/goweb/middleware" + "forge.cadoles.com/wpetit/goweb/service" + "forge.cadoles.com/wpetit/goweb/service/template" + "forge.cadoles.com/wpetit/goweb/template/html" + "github.com/go-chi/chi" +) + +func Example_usage() { + + // Exemple d'utilisation de la librairie "goweb" pour la mise en place + // d'une application web avec injection de dépendances - ici un moteur de templates. + + // On créait un conteneur de service vide + container := service.NewContainer() + + // On expose le service "template" avec l'implémentation + // basée sur le moteur de rendu HTML de la librairie standard + container.Provide(template.ServiceName, html.ServiceProvider("./templates")) + + router := chi.NewRouter() + + // On utilise le middleware "ServiceContainer" pour exposer + // le conteneur de service dans nos requêtes + router.Use(middleware.ServiceContainer(container)) + + // On créait un handler pour la page d'accueil + router.Get("/", ServeHomePage) + + if err := http.ListenAndServe(":3000", router); err != nil { + panic(err) + } + +} + +func ServeHomePage(w http.ResponseWriter, r *http.Request) { + + // On récupère le conteneur de service depuis le contexte de la requête + container, err := middleware.GetServiceContainer(r.Context()) + if err != nil { + panic(err) + } + + // On récupère le service "template" depuis le conteneur de service + templateService := template.Must(container) + + // On utilise notre + if err := templateService.RenderPage(w, "my-template.html.tmpl", nil); err != nil { + panic(err) + } +}