110 lines
2.6 KiB
Go
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")
|
|
}
|