25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

80 satır
2.3 KiB

  1. package controller
  2. import (
  3. "context"
  4. "encoding/json"
  5. "net/http"
  6. "github.com/AFASystems/presence/internal/pkg/api/response"
  7. "github.com/AFASystems/presence/internal/pkg/model"
  8. "github.com/gorilla/mux"
  9. "gorm.io/gorm"
  10. )
  11. func TrackerZoneAddController(db *gorm.DB, context context.Context) http.HandlerFunc {
  12. return func(w http.ResponseWriter, r *http.Request) {
  13. var tz model.TrackerZones
  14. if err := json.NewDecoder(r.Body).Decode(&tz); err != nil {
  15. response.BadRequest(w, "invalid request body")
  16. return
  17. }
  18. if err := db.WithContext(context).Create(&tz).Error; err != nil {
  19. response.InternalError(w, "failed to create tracker zone", err)
  20. return
  21. }
  22. response.JSON(w, http.StatusCreated, map[string]string{"status": "created"})
  23. }
  24. }
  25. func TrackerZoneListController(db *gorm.DB, context context.Context) http.HandlerFunc {
  26. return func(w http.ResponseWriter, r *http.Request) {
  27. var list []model.TrackerZones
  28. if err := db.WithContext(context).Find(&list).Error; err != nil {
  29. response.InternalError(w, "failed to list tracker zones", err)
  30. return
  31. }
  32. response.JSON(w, http.StatusOK, list)
  33. }
  34. }
  35. func TrackerZoneUpdateController(db *gorm.DB, context context.Context) http.HandlerFunc {
  36. return func(w http.ResponseWriter, r *http.Request) {
  37. var tz model.TrackerZones
  38. if err := json.NewDecoder(r.Body).Decode(&tz); err != nil {
  39. response.BadRequest(w, "invalid request body")
  40. return
  41. }
  42. id := tz.ID
  43. if err := db.WithContext(context).First(&model.TrackerZones{}, "id = ?", id).Error; err != nil {
  44. response.NotFound(w, "tracker zone not found")
  45. return
  46. }
  47. if err := db.WithContext(context).Save(&tz).Error; err != nil {
  48. response.InternalError(w, "failed to update tracker zone", err)
  49. return
  50. }
  51. response.JSON(w, http.StatusOK, map[string]string{"status": "updated"})
  52. }
  53. }
  54. func TrackerZoneDeleteController(db *gorm.DB, context context.Context) http.HandlerFunc {
  55. return func(w http.ResponseWriter, r *http.Request) {
  56. id := mux.Vars(r)["id"]
  57. res := db.WithContext(context).Delete(&model.TrackerZones{}, "id = ?", id)
  58. if res.RowsAffected == 0 {
  59. response.NotFound(w, "tracker zone not found")
  60. return
  61. }
  62. if res.Error != nil {
  63. response.InternalError(w, "failed to delete tracker zone", res.Error)
  64. return
  65. }
  66. response.JSON(w, http.StatusOK, map[string]string{"status": "deleted"})
  67. }
  68. }