package controller import ( "context" "encoding/json" "net/http" "github.com/AFASystems/presence/internal/pkg/api/response" "github.com/AFASystems/presence/internal/pkg/model" "github.com/gorilla/mux" "gorm.io/gorm" ) func GatewayAddController(db *gorm.DB, context context.Context) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var gateway model.Gateway if err := json.NewDecoder(r.Body).Decode(&gateway); err != nil { response.BadRequest(w, "invalid request body") return } if err := db.WithContext(context).Create(&gateway).Error; err != nil { response.InternalError(w, "failed to create gateway", err) return } response.JSON(w, http.StatusCreated, map[string]string{"status": "created"}) } } func GatewayListController(db *gorm.DB, context context.Context) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var gateways []model.Gateway if err := db.WithContext(context).Find(&gateways).Error; err != nil { response.InternalError(w, "failed to list gateways", err) return } response.JSON(w, http.StatusOK, gateways) } } func GatewayDeleteController(db *gorm.DB, context context.Context) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { id := mux.Vars(r)["id"] res := db.WithContext(context).Delete(&model.Gateway{}, "id = ?", id) if res.RowsAffected == 0 { response.NotFound(w, "gateway not found") return } if res.Error != nil { response.InternalError(w, "failed to delete gateway", res.Error) return } response.JSON(w, http.StatusOK, map[string]string{"status": "deleted"}) } } func GatewayUpdateController(db *gorm.DB, context context.Context) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { id := mux.Vars(r)["id"] if err := db.WithContext(context).First(&model.Gateway{}, "id = ?", id).Error; err != nil { response.NotFound(w, "gateway not found") return } var gateway model.Gateway if err := json.NewDecoder(r.Body).Decode(&gateway); err != nil { response.BadRequest(w, "invalid request body") return } if err := db.WithContext(context).Save(&gateway).Error; err != nil { response.InternalError(w, "failed to update gateway", err) return } response.JSON(w, http.StatusOK, map[string]string{"status": "updated"}) } }