--- name: crud_register_routes kind: function lang: go domain: infra version: "1.0.0" purity: impure signature: "func CRUDRegisterRoutes(mux *http.ServeMux, basePath string, res CRUDResource, db *sql.DB)" description: "Registra las 5 rutas REST de un CRUDResource en un http.ServeMux: GET /base, GET /base/{id}, POST /base, PUT /base/{id}, DELETE /base/{id}. Usa la sintaxis 'METHOD /path' de Go 1.22+." tags: [crud, routes, register, http, mux, infra] uses_functions: [crud_generate_handlers_go_infra] uses_types: [CRUDResource_go_infra] returns: [] returns_optional: false error_type: "error_go_core" imports: [database/sql, fmt, net/http, strings] params: - name: mux desc: "*http.ServeMux donde se registran las rutas" - name: basePath desc: "prefijo de las rutas (ej: '/api/projects')" - name: res desc: "definicion CRUDResource del recurso" - name: db desc: "conexion *sql.DB a SQLite" output: "muta mux con las 5 rutas CRUD registradas" tested: true tests: ["registra las 5 rutas y responde correctamente", "soporta multiples recursos en un mismo mux"] test_file_path: "functions/infra/crud_test.go" file_path: "functions/infra/crud_register_routes.go" --- ## Ejemplo ```go mux := http.NewServeMux() CRUDRegisterRoutes(mux, "/api/projects", projectRes, db) CRUDRegisterRoutes(mux, "/api/users", userRes, db) http.ListenAndServe(":8080", mux) ``` ## Notas Impura — muta el mux pasado como parametro. basePath se normaliza quitando el slash final. Si la ruta colisiona con una ya registrada en el mux, Go lanzara panic al arrancar (comportamiento estandar del ServeMux). Para combinar con middleware de logging/CORS, envolver el mux con HTTPMiddlewareChain al final.