Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

118 wiersze
2.7 KiB

  1. package controller
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "github.com/AFASystems/presence/internal/pkg/model"
  8. "github.com/gorilla/mux"
  9. "github.com/segmentio/kafka-go"
  10. "gorm.io/gorm"
  11. )
  12. func SendKafkaMessage(writer *kafka.Writer, value *model.ApiUpdate, ctx context.Context) error {
  13. valueStr, err := json.Marshal(&value)
  14. if err != nil {
  15. fmt.Println("error in encoding: ", err)
  16. return err
  17. }
  18. msg := kafka.Message{
  19. Value: valueStr,
  20. }
  21. if err := writer.WriteMessages(ctx, msg); err != nil {
  22. fmt.Println("Error in sending kafka message: ", err)
  23. return err
  24. }
  25. return nil
  26. }
  27. func TrackerAdd(db *gorm.DB, writer *kafka.Writer, ctx context.Context) http.HandlerFunc {
  28. return func(w http.ResponseWriter, r *http.Request) {
  29. var tracker model.Tracker
  30. if err := json.NewDecoder(r.Body).Decode(&tracker); err != nil {
  31. http.Error(w, err.Error(), 400)
  32. return
  33. }
  34. db.Create(&tracker)
  35. apiUpdate := model.ApiUpdate{
  36. Method: "POST",
  37. ID: tracker.ID,
  38. MAC: tracker.MAC,
  39. }
  40. if err := SendKafkaMessage(writer, &apiUpdate, ctx); err != nil {
  41. fmt.Println("error in sending Kafka POST message")
  42. http.Error(w, "Error in sending kafka message", 500)
  43. return
  44. }
  45. w.Write([]byte("ok"))
  46. }
  47. }
  48. func TrackerList(db *gorm.DB) http.HandlerFunc {
  49. return func(w http.ResponseWriter, r *http.Request) {
  50. var list []model.Tracker
  51. db.Find(&list)
  52. json.NewEncoder(w).Encode(list)
  53. }
  54. }
  55. func TrackerUpdate(db *gorm.DB) http.HandlerFunc {
  56. return func(w http.ResponseWriter, r *http.Request) {
  57. var tracker model.Tracker
  58. if err := json.NewDecoder(r.Body).Decode(&tracker); err != nil {
  59. http.Error(w, "Invalid JSON", 400)
  60. return
  61. }
  62. id := tracker.ID
  63. if err := db.First(&model.Tracker{}, "id = ?", id).Error; err != nil {
  64. http.Error(w, err.Error(), 400)
  65. return
  66. }
  67. if err := db.Save(&tracker).Error; err != nil {
  68. http.Error(w, err.Error(), 500)
  69. return
  70. }
  71. w.Write([]byte("ok"))
  72. }
  73. }
  74. func TrackerDelete(db *gorm.DB, writer *kafka.Writer, ctx context.Context) http.HandlerFunc {
  75. return func(w http.ResponseWriter, r *http.Request) {
  76. id := mux.Vars(r)["id"]
  77. var tracker model.Tracker
  78. db.Find(&tracker, "id = ?", id)
  79. if res := db.Delete(&model.Tracker{}, "id = ?", id); res.RowsAffected == 0 {
  80. http.Error(w, "no tracker with such ID found", 400)
  81. return
  82. }
  83. apiUpdate := model.ApiUpdate{
  84. Method: "Delete",
  85. ID: tracker.ID,
  86. }
  87. fmt.Printf("Sending DELETE tracker id: %s message\n", id)
  88. if err := SendKafkaMessage(writer, &apiUpdate, ctx); err != nil {
  89. fmt.Println("error in sending Kafka DELETE message")
  90. http.Error(w, "Error in sending kafka message", 500)
  91. return
  92. }
  93. w.Write([]byte("ok"))
  94. }
  95. }