Add read-only multi-server API (step 2) + dedupe serverID validation
GET /servers lists registered servers; GET /servers/:id/clients returns that server's client list (filtered in-handler, store.GetClients isn't server-scoped yet - that's a later step). Old routes untouched. Also factors the repeated serverID validation guard in jsondb.go's new server-scoped methods into one validateServerID() helper, per a code simplification review.
This commit is contained in:
@@ -408,6 +408,54 @@ func GetClient(db store.IStore) echo.HandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
// ListServers handler returns a JSON list of registered servers (step 2 of
|
||||
// the multi-server extension - read-only, additive alongside the existing
|
||||
// single-server routes).
|
||||
func ListServers(db store.IStore) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
servers, err := db.GetServers()
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusInternalServerError, jsonHTTPResponse{
|
||||
false, fmt.Sprintf("Cannot get server list: %v", err),
|
||||
})
|
||||
}
|
||||
return c.JSON(http.StatusOK, servers)
|
||||
}
|
||||
}
|
||||
|
||||
// GetServerClients handler returns a JSON list of clients belonging to a
|
||||
// single server (step 2 of the multi-server extension). Filtering happens
|
||||
// in-handler for now since db.GetClients has not yet been switched to a
|
||||
// server-scoped signature (that's a later step).
|
||||
func GetServerClients(db store.IStore) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
serverID := c.Param("id")
|
||||
if !util.ValidateRecordID(serverID) {
|
||||
return c.JSON(http.StatusBadRequest, jsonHTTPResponse{false, "Please provide a valid server ID"})
|
||||
}
|
||||
|
||||
if _, err := db.GetServerByID(serverID); err != nil {
|
||||
return c.JSON(http.StatusNotFound, jsonHTTPResponse{false, "Server not found"})
|
||||
}
|
||||
|
||||
clientDataList, err := db.GetClients(false)
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusInternalServerError, jsonHTTPResponse{
|
||||
false, fmt.Sprintf("Cannot get client list: %v", err),
|
||||
})
|
||||
}
|
||||
|
||||
var filtered []model.ClientData
|
||||
for _, cd := range clientDataList {
|
||||
if cd.Client.ServerID == serverID {
|
||||
filtered = append(filtered, cd)
|
||||
}
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, filtered)
|
||||
}
|
||||
}
|
||||
|
||||
// NewClient handler
|
||||
func NewClient(db store.IStore) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
|
||||
Reference in New Issue
Block a user