No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

107 líneas
2.7KB

  1. package main
  2. import "log"
  3. import "encoding/json"
  4. import "strings"
  5. //abstract CRUD operation for espoCRM Entity
  6. var crmSite = "https://c.hitxy.org.au/"
  7. func createEntity(entityType string, jsonB []byte) (entity interface{}, err error) {
  8. url := crmSite + "api/v1/" + entityType
  9. jsonStr, err := postRAW(jsonB, url, crmBuildCommonAPIHeader())
  10. if err != nil {
  11. entity, _ = rescueDuplicate(err, entityType)
  12. return
  13. }
  14. return json2Entity(entityType, jsonStr)
  15. }
  16. func updateEntity(entityType string, id string, jsonB []byte) (entity interface{}, err error) {
  17. url := crmSite + "api/v1/" + entityType + "/" + id
  18. jsonStr, err := patchRAW(jsonB, url, crmBuildCommonAPIHeader())
  19. if err != nil {
  20. log.Println(err)
  21. return
  22. }
  23. return json2Entity(entityType, jsonStr)
  24. }
  25. func replaceEntity(entityType string, id string, jsonB []byte) (entity interface{}, err error) {
  26. url := crmSite + "api/v1/" + entityType + "/" + id
  27. jsonStr, err := putRAW(jsonB, url, crmBuildCommonAPIHeader())
  28. if err != nil {
  29. log.Println(err)
  30. return
  31. }
  32. return json2Entity(entityType, jsonStr)
  33. }
  34. func deleteEntity(entityType string, id string) (deleted bool, err error) {
  35. url := crmSite + "api/v1/" + entityType + "/" + id
  36. resp, err := deleteRAW(url, crmBuildCommonAPIHeader())
  37. if err != nil {
  38. log.Println(err)
  39. return
  40. }
  41. deleted = strings.ToLower(resp) == "true"
  42. return
  43. }
  44. //give an id, return json
  45. func crmGetEntity(entityType string, id string) (entity interface{}, err error) {
  46. url := crmSite + "api/v1/" + entityType + "/" + id
  47. jsonStr, err := getRAW(url, crmBuildCommonAPIHeader())
  48. if err != nil {
  49. log.Println(err)
  50. return
  51. }
  52. return json2Entity(entityType, jsonStr)
  53. }
  54. func crmBuildCommonAPIHeader() (headers map[string]string) {
  55. headers = map[string]string{}
  56. headers["Authorization"] = crmAuthHeader()
  57. headers["Accept"] = "application/json"
  58. headers["Content-Type"] = "application/json"
  59. return headers
  60. }
  61. //given a json string, convert it to Typed structure
  62. func json2Entity(entityType string, data string) (r interface{}, err error) {
  63. switch entityType {
  64. case "Lead":
  65. e := crmdLead{}
  66. err = json.Unmarshal([]byte(data), &e)
  67. r = e
  68. case "Account":
  69. //r = crmdAccount{}
  70. default:
  71. log.Fatalf("json2Entity: Unknown EntityType %s", entityType)
  72. }
  73. if err != nil {
  74. log.Println(err)
  75. }
  76. return
  77. }
  78. func rescueDuplicate(e error, entityType string) (entity interface{}, success bool) {
  79. if !isErrIndicateDuplicate(e) {
  80. return
  81. }
  82. entity, err := e.(errorHTTPResponse).XStatusReason().Data2Entity(entityType)
  83. success = err == nil
  84. return
  85. }
  86. func isErrIndicateDuplicate(e error) (yes bool) {
  87. err, isOurError := e.(errorHTTPResponse)
  88. if !isOurError {
  89. return
  90. }
  91. reason := err.XStatusReason()
  92. yes = strings.ToLower(reason.Reason) == "duplicate"
  93. return
  94. }