Loading...
Loading...
Generate Chi router implementations following GO modular architechture conventions (Chi router from bricks package, Fx DI with chi.Route interface, REST endpoints). Use when creating HTTP route registration for resources in internal/modules/<module>/http/chi/router/ including REST routes (GET, POST, PUT, DELETE) for CRUD operations, custom endpoints, versioned APIs, and route groups.
npx skill4agent add cristiano-pacheco/ai-rules go-create-chi-routerinternal/modules/<module>/http/chi/router/<resource>_router.gopackage router
import (
"github.com/cristiano-pacheco/bricks/pkg/http/server/chi"
"github.com/cristiano-pacheco/pingo/internal/modules/<module>/http/chi/handler"
)
type ResourceRouter struct {
handler *handler.ResourceHandler
}
func NewResourceRouter(h *handler.ResourceHandler) *ResourceRouter {
return &ResourceRouter{handler: h}
}
func (r *ResourceRouter) Setup(server *chi.Server) {
router := server.Router()
router.Get("/api/v1/resources", r.handler.ListResources)
router.Get("/api/v1/resources/:id", r.handler.GetResource)
router.Post("/api/v1/resources", r.handler.CreateResource)
router.Put("/api/v1/resources/:id", r.handler.UpdateResource)
router.Delete("/api/v1/resources/:id", r.handler.DeleteResource)
}func (r *ResourceRouter) Setup(server *chi.Server) {
router := server.Router()
router.Get("/api/v1/resources", r.handler.ListResources)
router.Get("/api/v1/resources/:id", r.handler.GetResource)
router.Post("/api/v1/resources", r.handler.CreateResource)
router.Put("/api/v1/resources/:id", r.handler.UpdateResource)
router.Delete("/api/v1/resources/:id", r.handler.DeleteResource)
}func (r *ResourceRouter) Setup(server *chi.Server) {
router := server.Router()
// Standard CRUD
router.Get("/api/v1/resources", r.handler.ListResources)
router.Post("/api/v1/resources", r.handler.CreateResource)
// Custom actions
router.Post("/api/v1/resources/:id/activate", r.handler.ActivateResource)
router.Post("/api/v1/resources/:id/deactivate", r.handler.DeactivateResource)
// Nested resources
router.Get("/api/v1/resources/:id/items", r.handler.ListResourceItems)
router.Post("/api/v1/resources/:id/items", r.handler.AddResourceItem)
}func (r *ResourceRouter) Setup(server *chi.Server) {
router := server.Router()
// Public routes
router.Get("/api/v1/resources", r.handler.ListResources)
router.Get("/api/v1/resources/:id", r.handler.GetResource)
// Protected routes (if auth middleware needed)
router.Group(func(r chi.Router) {
// r.Use(middleware.Auth) // Example if auth middleware exists
r.Post("/api/v1/resources", r.handler.CreateResource)
r.Put("/api/v1/resources/:id", r.handler.UpdateResource)
r.Delete("/api/v1/resources/:id", r.handler.DeleteResource)
})
}type ResourceRouter struct {
resourceHandler *handler.ResourceHandler
itemHandler *handler.ItemHandler
}
func NewResourceRouter(
resourceHandler *handler.ResourceHandler,
itemHandler *handler.ItemHandler,
) *ResourceRouter {
return &ResourceRouter{
resourceHandler: resourceHandler,
itemHandler: itemHandler,
}
}
func (r *ResourceRouter) Setup(server *chi.Server) {
router := server.Router()
// Resource routes
router.Get("/api/v1/resources", r.resourceHandler.ListResources)
router.Post("/api/v1/resources", r.resourceHandler.CreateResource)
// Item routes (related resource)
router.Get("/api/v1/items", r.itemHandler.ListItems)
router.Post("/api/v1/items", r.itemHandler.CreateItem)
}internal/modules/<module>/fx.gofx.Provide(
fx.Annotate(
router.NewResourceRouter,
fx.As(new(chi.Route)),
fx.ResultTags(`group:"routes"`),
),
),fx.Provide(
fx.Annotate(
router.NewResourceRouter,
fx.As(new(chi.Route)),
fx.ResultTags(`group:"routes"`),
),
fx.Annotate(
router.NewItemRouter,
fx.As(new(chi.Route)),
fx.ResultTags(`group:"routes"`),
),
),GETPOSTPUTPATCHDELETE/api/v1//resources/contacts/monitors:id/resources/:id/resources/:id/items/resources/:id/activate*ResourceRouterSetup*chi.Serverserver.Router()/api/v1/ListResourcesCreateResourcefx.As(new(chi.Route))fx.ResultTags(\bricks/pkg/http/server/chimake lint<Resource>RouterNew<Resource>Router<resource>_router.gointernal/modules/<module>/http/chi/router/<resource>_router.goSetup(server *chi.Server)fx.gomake lintrouter.Get("/api/v1/resources", r.handler.ListResources) // query params in handlerrouter.Get("/api/v1/resources/:resourceId/items/:itemId", r.handler.GetResourceItem)router.Post("/api/v1/resources/bulk", r.handler.BulkCreateResources)
router.Delete("/api/v1/resources/bulk", r.handler.BulkDeleteResources)