|
- package controller
-
- import (
- "context"
- "encoding/json"
- "fmt"
- "net/http"
-
- "github.com/AFASystems/presence/internal/pkg/model"
- "github.com/gorilla/mux"
- "github.com/segmentio/kafka-go"
- "gorm.io/gorm"
- )
-
- func sendKafkaMessage(writer *kafka.Writer, value *model.ApiUpdate, ctx context.Context) error {
- valueStr, err := json.Marshal(&value)
- if err != nil {
- fmt.Println("error in encoding: ", err)
- return err
- }
- msg := kafka.Message{
- Value: valueStr,
- }
-
- if err := writer.WriteMessages(ctx, msg); err != nil {
- fmt.Println("Error in sending kafka message: ", err)
- return err
- }
-
- return nil
- }
-
- func TrackerAdd(db *gorm.DB, writer *kafka.Writer, ctx context.Context) http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- var tracker model.Tracker
- if err := json.NewDecoder(r.Body).Decode(&tracker); err != nil {
- http.Error(w, err.Error(), 400)
- return
- }
- db.Create(&tracker)
-
- apiUpdate := model.ApiUpdate{
- Method: "POST",
- ID: tracker.ID,
- }
-
- if err := sendKafkaMessage(writer, &apiUpdate, ctx); err != nil {
- fmt.Println("error in sending Kafka POST message")
- http.Error(w, "Error in sending kafka message", 500)
- return
- }
-
- w.Write([]byte("ok"))
- }
- }
-
- func TrackerList(db *gorm.DB) http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- var list []model.Tracker
- db.Find(&list)
- json.NewEncoder(w).Encode(list)
- }
- }
-
- func TrackerUpdate(db *gorm.DB) http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- var tracker model.Tracker
-
- if err := json.NewDecoder(r.Body).Decode(&tracker); err != nil {
- http.Error(w, "Invalid JSON", 400)
- return
- }
-
- id := tracker.ID
-
- if err := db.First(&model.Tracker{}, "id = ?", id).Error; err != nil {
- http.Error(w, err.Error(), 400)
- return
- }
-
- if err := db.Save(&tracker).Error; err != nil {
- http.Error(w, err.Error(), 500)
- return
- }
-
- w.Write([]byte("ok"))
- }
- }
-
- func TrackerDelete(db *gorm.DB, writer *kafka.Writer, ctx context.Context) http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- id := mux.Vars(r)["id"]
- if res := db.Delete(&model.Tracker{}, "id = ?", id); res.RowsAffected == 0 {
- http.Error(w, "no tracker with such ID found", 400)
- return
- }
-
- apiUpdate := model.ApiUpdate{
- Method: "Delete",
- ID: id,
- }
-
- fmt.Printf("Sending DELETE tracker id: %s message\n", id)
-
- if err := sendKafkaMessage(writer, &apiUpdate, ctx); err != nil {
- fmt.Println("error in sending Kafka DELETE message")
- http.Error(w, "Error in sending kafka message", 500)
- return
- }
-
- w.Write([]byte("ok"))
- }
- }
|