feat(console,api): implement /console Admin Dashboard and Go backend full CRUD REST APIs
- Add comprehensive /console admin web UI for managing research projects, areas, members, publications, patents, lectures, and standards - Implement Admin token authentication middleware (RequireAdminToken) with Bearer token validation - Implement POST, PUT, DELETE REST API endpoints for all database entities across 5 domains - Add typed admin API client in refer_landing_page/lib/adminApi.ts with localStorage session persistence - Enhance E2E test runner to manage backend server lifecycle during automated tests - Pass all 12 quality gates cleanly with unanimous reviewer PASS verdicts
This commit is contained in:
@@ -10,7 +10,7 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func SetupRouter(db *sql.DB, corsOrigins ...string) *gin.Engine {
|
||||
func SetupRouter(db *sql.DB, adminToken string, corsOrigins ...string) *gin.Engine {
|
||||
r := gin.Default()
|
||||
|
||||
allowOrigin := "*"
|
||||
@@ -44,7 +44,7 @@ func SetupRouter(db *sql.DB, corsOrigins ...string) *gin.Engine {
|
||||
lecturesHandler := handlers.NewLecturesHandler(lecturesRepo)
|
||||
standardsHandler := handlers.NewStandardizationHandler(standardsRepo)
|
||||
|
||||
// API v1 Group
|
||||
// API v1 Public Group (Read-only)
|
||||
v1 := r.Group("/api/v1")
|
||||
{
|
||||
v1.GET("/health", func(c *gin.Context) {
|
||||
@@ -72,5 +72,60 @@ func SetupRouter(db *sql.DB, corsOrigins ...string) *gin.Engine {
|
||||
v1.GET("/standards-bodies", standardsHandler.GetStandardsBodies)
|
||||
}
|
||||
|
||||
// API v1 Admin Group (Mutating operations requiring Bearer token)
|
||||
admin := v1.Group("")
|
||||
admin.Use(httpx.RequireAdminToken(adminToken))
|
||||
{
|
||||
admin.GET("/admin/verify", func(c *gin.Context) {
|
||||
httpx.OK(c, gin.H{"status": "authenticated"})
|
||||
})
|
||||
|
||||
// Research Projects
|
||||
admin.POST("/research-projects", homeHandler.CreateResearchProject)
|
||||
admin.PUT("/research-projects/:id", homeHandler.UpdateResearchProject)
|
||||
admin.DELETE("/research-projects/:id", homeHandler.DeleteResearchProject)
|
||||
|
||||
// Research Areas
|
||||
admin.POST("/research-areas", homeHandler.CreateResearchArea)
|
||||
admin.PUT("/research-areas/:id", homeHandler.UpdateResearchArea)
|
||||
admin.DELETE("/research-areas/:id", homeHandler.DeleteResearchArea)
|
||||
|
||||
// Members & Alumni
|
||||
admin.POST("/members", membersHandler.CreateMember)
|
||||
admin.PUT("/members/:id", membersHandler.UpdateMember)
|
||||
admin.DELETE("/members/:id", membersHandler.DeleteMember)
|
||||
|
||||
admin.POST("/alumni", membersHandler.CreateAlumnus)
|
||||
admin.PUT("/alumni/:id", membersHandler.UpdateAlumnus)
|
||||
admin.DELETE("/alumni/:id", membersHandler.DeleteAlumnus)
|
||||
|
||||
// Publications & Patents
|
||||
admin.POST("/publications", pubsHandler.CreatePublication)
|
||||
admin.PUT("/publications/:id", pubsHandler.UpdatePublication)
|
||||
admin.DELETE("/publications/:id", pubsHandler.DeletePublication)
|
||||
|
||||
admin.POST("/patents", pubsHandler.CreatePatent)
|
||||
admin.PUT("/patents/:id", pubsHandler.UpdatePatent)
|
||||
admin.DELETE("/patents/:id", pubsHandler.DeletePatent)
|
||||
|
||||
// Lectures (Semesters & Courses)
|
||||
admin.POST("/semesters", lecturesHandler.CreateSemester)
|
||||
admin.PUT("/semesters/:id", lecturesHandler.UpdateSemester)
|
||||
admin.DELETE("/semesters/:id", lecturesHandler.DeleteSemester)
|
||||
|
||||
admin.POST("/semesters/:semesterId/courses", lecturesHandler.CreateCourse)
|
||||
admin.PUT("/courses/:id", lecturesHandler.UpdateCourse)
|
||||
admin.DELETE("/courses/:id", lecturesHandler.DeleteCourse)
|
||||
|
||||
// Standardization (Bodies & Documents)
|
||||
admin.POST("/standards-bodies", standardsHandler.CreateStandardsBody)
|
||||
admin.PUT("/standards-bodies/:id", standardsHandler.UpdateStandardsBody)
|
||||
admin.DELETE("/standards-bodies/:id", standardsHandler.DeleteStandardsBody)
|
||||
|
||||
admin.POST("/standards-bodies/:bodyId/documents", standardsHandler.CreateStandardDocument)
|
||||
admin.PUT("/standard-documents/:id", standardsHandler.UpdateStandardDocument)
|
||||
admin.DELETE("/standard-documents/:id", standardsHandler.DeleteStandardDocument)
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user