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.
 
 
 
 

121 lines
2.7 KiB

  1. package apiclient
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io"
  7. "net/http"
  8. "github.com/AFASystems/presence/internal/pkg/config"
  9. "github.com/AFASystems/presence/internal/pkg/model"
  10. )
  11. func GetTrackers(token string, client *http.Client, cfg *config.Config) ([]model.Tracker, error) {
  12. res, err := getRequest(token, "getTrackers", client, cfg)
  13. if err != nil {
  14. return []model.Tracker{}, err
  15. }
  16. var i []model.Tracker
  17. err = json.NewDecoder(res.Body).Decode(&i)
  18. if err != nil {
  19. return []model.Tracker{}, err
  20. }
  21. return i, nil
  22. }
  23. func GetGateways(token string, client *http.Client, cfg *config.Config) ([]model.Gateway, error) {
  24. res, err := getRequest(token, "getGateways", client, cfg)
  25. if err != nil {
  26. return []model.Gateway{}, err
  27. }
  28. body, err := io.ReadAll(res.Body)
  29. if err != nil {
  30. return []model.Gateway{}, err
  31. }
  32. fmt.Printf("Gateways raw response: %s\n", body)
  33. var i []model.Gateway
  34. err = json.NewDecoder(bytes.NewReader(body)).Decode(&i)
  35. if err != nil {
  36. return []model.Gateway{}, err
  37. }
  38. return i, nil
  39. }
  40. func GetTrackerZones(token string, client *http.Client, cfg *config.Config) ([]model.TrackerZones, error) {
  41. res, err := getRequest(token, "getTrackerZones", client, cfg)
  42. if err != nil {
  43. return []model.TrackerZones{}, err
  44. }
  45. var i []model.TrackerZones
  46. err = json.NewDecoder(res.Body).Decode(&i)
  47. if err != nil {
  48. return []model.TrackerZones{}, err
  49. }
  50. return i, nil
  51. }
  52. func GetFloors(token string, client *http.Client, cfg *config.Config) ([]model.Floor, error) {
  53. res, err := getRequest(token, "getFloors", client, cfg)
  54. if err != nil {
  55. return []model.Floor{}, err
  56. }
  57. var i []model.Floor
  58. err = json.NewDecoder(res.Body).Decode(&i)
  59. if err != nil {
  60. return []model.Floor{}, err
  61. }
  62. return i, nil
  63. }
  64. func GetZones(token string, client *http.Client, cfg *config.Config) ([]model.Zone, error) {
  65. res, err := getRequest(token, "getZones", client, cfg)
  66. if err != nil {
  67. return []model.Zone{}, err
  68. }
  69. var i []model.Zone
  70. err = json.NewDecoder(res.Body).Decode(&i)
  71. if err != nil {
  72. return []model.Zone{}, err
  73. }
  74. return i, nil
  75. }
  76. func InferPosition(token string, client *http.Client, cfg *config.Config) (model.PositionResponse, error) {
  77. url := fmt.Sprintf("%s/ble-ai/infer", cfg.APIBaseURL)
  78. req, err := http.NewRequest("GET", url, nil)
  79. if err != nil {
  80. return model.PositionResponse{}, err
  81. }
  82. setHeader(req, token)
  83. res, err := client.Do(req)
  84. if err != nil {
  85. return model.PositionResponse{}, err
  86. }
  87. if res.StatusCode != 200 {
  88. return model.PositionResponse{}, fmt.Errorf("status code: %d", res.StatusCode)
  89. }
  90. var i model.PositionResponse
  91. err = json.NewDecoder(res.Body).Decode(&i)
  92. if err != nil {
  93. return model.PositionResponse{}, err
  94. }
  95. return i, nil
  96. }