You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.2 KiB

  1. // This package parse a http request from datatables (jQuery plugin) to a friendly structure
  2. // More details in https://github.com/saulortega/datatables
  3. // import "github.com/saulortega/datatables"
  4. package datatables
  5. import (
  6. "encoding/json"
  7. "errors"
  8. "net/http"
  9. )
  10. type Response struct {
  11. Draw int `json:"draw"`
  12. RecordsTotal int `json:"recordsTotal"`
  13. RecordsFiltered int `json:"recordsFiltered"`
  14. Data interface{} `json:"data"`
  15. Error error `json:"error,omitempty"`
  16. }
  17. func (r *Response) Check() error {
  18. var err error
  19. if r.Data == nil || r.RecordsFiltered == 0 {
  20. r.Data = []string{} //Vacío, no nulo
  21. }
  22. if r.RecordsFiltered > r.RecordsTotal {
  23. err = errors.New("wrong filtered or total records")
  24. }
  25. return err
  26. }
  27. func (r *Response) WriteResponseOnSuccess(w http.ResponseWriter) error {
  28. err := r.Check()
  29. if err != nil {
  30. return err
  31. }
  32. RJSON, err := json.Marshal(r)
  33. if err != nil {
  34. return err
  35. }
  36. w.WriteHeader(http.StatusOK)
  37. w.Write(RJSON)
  38. return nil
  39. }
  40. func (r *Response) WriteResponse(w http.ResponseWriter) error {
  41. err := r.WriteResponseOnSuccess(w)
  42. if err != nil {
  43. w.WriteHeader(http.StatusInternalServerError)
  44. }
  45. return err
  46. }