feat: add model groups CRUD admin API endpoints
This commit is contained in:
@@ -0,0 +1,76 @@
|
|||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"gophergate/internal/db"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *Server) handleGetModelGroups(c *gin.Context) {
|
||||||
|
var groups []db.ModelGroup
|
||||||
|
if err := s.database.Select(&groups, "SELECT * FROM model_groups ORDER BY id"); err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if groups == nil {
|
||||||
|
groups = []db.ModelGroup{}
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, groups)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) handleCreateModelGroup(c *gin.Context) {
|
||||||
|
var group db.ModelGroup
|
||||||
|
if err := c.ShouldBindJSON(&group); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := s.database.Exec(`
|
||||||
|
INSERT INTO model_groups (id, strategy, selector_model, targets, complexity_threshold, heuristic_rules)
|
||||||
|
VALUES (?, ?, ?, ?, ?, ?)`,
|
||||||
|
group.ID, group.Strategy, group.SelectorModel, group.Targets,
|
||||||
|
group.ComplexityThreshold, group.HeuristicRules)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.refreshRouter()
|
||||||
|
c.JSON(http.StatusCreated, group)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) handleUpdateModelGroup(c *gin.Context) {
|
||||||
|
id := c.Param("id")
|
||||||
|
var group db.ModelGroup
|
||||||
|
if err := c.ShouldBindJSON(&group); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := s.database.Exec(`
|
||||||
|
UPDATE model_groups SET strategy=?, selector_model=?, targets=?, complexity_threshold=?, heuristic_rules=?, updated_at=CURRENT_TIMESTAMP
|
||||||
|
WHERE id=?`,
|
||||||
|
group.Strategy, group.SelectorModel, group.Targets,
|
||||||
|
group.ComplexityThreshold, group.HeuristicRules, id)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.refreshRouter()
|
||||||
|
c.JSON(http.StatusOK, group)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) handleDeleteModelGroup(c *gin.Context) {
|
||||||
|
id := c.Param("id")
|
||||||
|
_, err := s.database.Exec("DELETE FROM model_groups WHERE id=?", id)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.refreshRouter()
|
||||||
|
c.JSON(http.StatusOK, gin.H{"status": "deleted"})
|
||||||
|
}
|
||||||
@@ -276,6 +276,11 @@ func (s *Server) setupRoutes() {
|
|||||||
admin.GET("/models", s.handleGetModels)
|
admin.GET("/models", s.handleGetModels)
|
||||||
admin.PUT("/models/:id", s.handleUpdateModel)
|
admin.PUT("/models/:id", s.handleUpdateModel)
|
||||||
|
|
||||||
|
admin.GET("/model-groups", s.handleGetModelGroups)
|
||||||
|
admin.POST("/model-groups", s.handleCreateModelGroup)
|
||||||
|
admin.PUT("/model-groups/:id", s.handleUpdateModelGroup)
|
||||||
|
admin.DELETE("/model-groups/:id", s.handleDeleteModelGroup)
|
||||||
|
|
||||||
admin.GET("/users", s.handleGetUsers)
|
admin.GET("/users", s.handleGetUsers)
|
||||||
admin.POST("/users", s.handleCreateUser)
|
admin.POST("/users", s.handleCreateUser)
|
||||||
admin.PUT("/users/:id", s.handleUpdateUser)
|
admin.PUT("/users/:id", s.handleUpdateUser)
|
||||||
|
|||||||
Reference in New Issue
Block a user