templating/main.go
2025-09-29 23:53:04 +02:00

110 lines
2.6 KiB
Go

package main
import (
"log/slog"
"templating/ui"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/html/v2"
)
func main() {
engine := html.New("./templates", ".html")
engine.Reload(true)
app := fiber.New(
fiber.Config{
Views: engine,
})
app.Get("/", func(c *fiber.Ctx) error {
return c.Render("pages/index", fiber.Map{
"Message": "Hello World",
"UsernameField": ui.UsernameField().ToMap(),
"EmailField": ui.EmailField().ToMap(),
"PasswordField": ui.PasswordField().ToMap(),
}, "layouts/base")
})
type SomeForm struct {
Username string `json:"username" validate:"required,min=3,max=30,username"`
Email string `json:"email" validate:"required,email"`
Password string `json:"password" validate:"required,min=8,max=20"`
}
app.Post("/validate/username", func(c *fiber.Ctx) error {
slog.Info(`validate username triggered`)
username := c.FormValue("username")
input := SomeForm{
Username: username,
}
validate := ui.GetValidator()
err := validate.StructPartial(input, "Username")
if err != nil {
field := ui.UsernameField().
WithValue(username).
WithError(ui.GetFirstError(err))
return c.Render("components/input", field.ToMap())
}
// Emular que el nombre de usuario existe
if username == "juan" {
slog.Info("username already exists")
field := ui.UsernameField().
WithValue(username).
WithError("El nombre de usuario ya existe")
return c.Render("components/input", field.ToMap())
}
field := ui.UsernameField().WithValue(username)
return c.Render("components/input", field.ToMap())
})
app.Post("/validate/email", func(c *fiber.Ctx) error {
slog.Info(`validate email triggered`)
email := c.FormValue("email")
input := SomeForm{
Email: email,
}
validate := ui.GetValidator()
err := validate.StructPartial(input, "Email")
if err != nil {
field := ui.EmailField().
WithValue(email).
WithError(ui.GetFirstError(err))
return c.Render("components/input", field.ToMap())
}
field := ui.EmailField().WithValue(email)
return c.Render("components/input", field.ToMap())
})
app.Post("/validate/password", func(c *fiber.Ctx) error {
slog.Info(`validate password triggered`)
password := c.FormValue("password")
input := SomeForm{
Password: password,
}
validate := ui.GetValidator()
err := validate.StructPartial(input, "Password")
if err != nil {
field := ui.PasswordField().
WithValue(password).
WithError(ui.GetFirstError(err))
return c.Render("components/input", field.ToMap())
}
field := ui.PasswordField().WithValue(password)
return c.Render("components/input", field.ToMap())
})
app.Listen(":3000")
}