package main import ( "context" "fmt" "log" "net/http" "git.agecem.com/bottin/bottin/v10/pkg/bottin" "github.com/labstack/echo/v4" ) func UICountPresences(ctx context.Context, cfg Config, dbClient *DBClient) echo.HandlerFunc { return func(c echo.Context) error { type data struct { Error string Decompte int HideFermerButton bool } return c.Render(http.StatusOK, "decompte-html", func() (d data) { if err := func() error { select { case <-ctx.Done(): return fmt.Errorf("Impossible de contacter le serveur: %s", ctx.Err()) default: if dbClient == nil { return fmt.Errorf("Impossible de contacter la base de données: le client DB est nil") } /* switch c.QueryParams().Get("hideFermerButton") { case "", "false": default: d.HideFermerButton = true } */ if err := echo.QueryParamsBinder(c). Bool("hideFermerButton", &d.HideFermerButton). BindError(); err != nil { // log.Println("bind error on /decompte:", err) } decompte, err := dbClient.CountPresences(ctx) if err != nil { return err } d.Decompte = decompte // No errors return nil } }(); err != nil { // Send error to user d.Error = err.Error() // Log error log.Println("err:", d.Error) } return }()) } } func UICreatePresence(ctx context.Context, cfg Config, bottinClient *bottin.APIClient, dbClient *DBClient) echo.HandlerFunc { return func(c echo.Context) error { type data struct { Error string Result string } return c.Render(http.StatusOK, "scan-html", func() (d data) { if err := func() error { select { case <-ctx.Done(): return fmt.Errorf("Impossible de contacter le serveur: %s", ctx.Err()) default: if bottinClient == nil { return fmt.Errorf("Impossible de contacter le serveur: le client bottin est nil") } if dbClient == nil { return fmt.Errorf("Impossible de contacter la base de données: le client DB est nil") } membreID := c.FormValue("membre_id") if membreID == "" { return fmt.Errorf("Aucun numéro étudiant sélectionné. Assurez-vous de cliquer sur la case 'Numéro étudiant:' avant de scanner.") } membreResponse, err := bottinClient.ReadMembre(ctx, membreID) if err != nil { if err.Error() == "400 no rows in result set" { return fmt.Errorf("Numéro étudiant introuvable %s", membreID) } return err } if membreResponse.Data.Membre.ID != membreID { return fmt.Errorf("Bottin a retourné '%s' en demandant '%s'", membreID, membreResponse.Data.Membre.ID) } if err := dbClient.CreatePresence(ctx, membreID); err != nil { return err } d.Result = fmt.Sprintf( "%s, %s (%s) peut participer à l'Assemblée Générale!", membreResponse.Data.Membre.LastName, membreResponse.Data.Membre.FirstName, membreID, ) // No errors return nil } }(); err != nil { // Send error to user d.Error = err.Error() // Log error log.Println("err:", d.Error) } return }()) } } func UIIndex(ctx context.Context, cfg Config) echo.HandlerFunc { return func(c echo.Context) error { type data struct { Error string } return c.Render(http.StatusOK, "index-html", func() (d data) { if err := func() error { select { case <-ctx.Done(): return fmt.Errorf("Impossible de contacter le serveur: %s", ctx.Err()) default: return nil } }(); err != nil { // Send error to user d.Error = err.Error() // Log error log.Println("err:", d.Error) } return }()) } }