Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

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