Initial commit
This commit is contained in:
commit
02947128bc
24 changed files with 1126 additions and 0 deletions
158
handler.go
Normal file
158
handler.go
Normal file
|
@ -0,0 +1,158 @@
|
|||
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
|
||||
}())
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue