|
|
@@ -0,0 +1,59 @@ |
|
|
|
// This package parse a http request from datatables (jQuery plugin) to a friendly structure |
|
|
|
// More details in https://github.com/saulortega/datatables |
|
|
|
// import "github.com/saulortega/datatables" |
|
|
|
|
|
|
|
package datatables |
|
|
|
|
|
|
|
import ( |
|
|
|
"encoding/json" |
|
|
|
"errors" |
|
|
|
"net/http" |
|
|
|
) |
|
|
|
|
|
|
|
type Response struct { |
|
|
|
Draw int `json:"draw"` |
|
|
|
RecordsTotal int `json:"recordsTotal"` |
|
|
|
RecordsFiltered int `json:"recordsFiltered"` |
|
|
|
Data interface{} `json:"data"` |
|
|
|
Error error `json:"error,omitempty"` |
|
|
|
} |
|
|
|
|
|
|
|
func (r *Response) Check() error { |
|
|
|
var err error |
|
|
|
|
|
|
|
if r.Data == nil || r.RecordsFiltered == 0 { |
|
|
|
r.Data = []string{} //Vacío, no nulo |
|
|
|
} |
|
|
|
|
|
|
|
if r.RecordsFiltered > r.RecordsTotal { |
|
|
|
err = errors.New("wrong filtered or total records") |
|
|
|
} |
|
|
|
|
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
func (r *Response) WriteResponseOnSuccess(w http.ResponseWriter) error { |
|
|
|
err := r.Check() |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
RJSON, err := json.Marshal(r) |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
w.WriteHeader(http.StatusOK) |
|
|
|
w.Write(RJSON) |
|
|
|
|
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
func (r *Response) WriteResponse(w http.ResponseWriter) error { |
|
|
|
err := r.WriteResponseOnSuccess(w) |
|
|
|
if err != nil { |
|
|
|
w.WriteHeader(http.StatusInternalServerError) |
|
|
|
} |
|
|
|
|
|
|
|
return err |
|
|
|
} |