package main
import (
"github.com/go-mizu/mizu"
)
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
func main() {
app := mizu.New()
// List all users
app.Get("/users", func(c *mizu.Ctx) error {
users := []User{{ID: "1", Name: "Alice"}}
return c.JSON(200, users)
})
// Get a single user
app.Get("/users/{id}", func(c *mizu.Ctx) error {
id := c.Param("id")
user := User{ID: id, Name: "Alice"}
return c.JSON(200, user)
})
// Create a user
app.Post("/users", func(c *mizu.Ctx) error {
var input struct {
Name string `json:"name"`
Email string `json:"email"`
}
if err := c.BindJSON(&input, 1<<20); err != nil {
return c.JSON(400, map[string]string{"error": err.Error()})
}
user := User{ID: "123", Name: input.Name, Email: input.Email}
return c.JSON(201, user)
})
// Central error handling
app.ErrorHandler(func(c *mizu.Ctx, err error) {
c.Logger().Error("api error", "error", err)
c.JSON(500, map[string]string{"error": "internal server error"})
})
app.Listen(":3000")
}