list.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package sites
  2. import (
  3. "net/http"
  4. "github.com/0xJacky/Nginx-UI/internal/site"
  5. "github.com/0xJacky/Nginx-UI/model"
  6. "github.com/0xJacky/Nginx-UI/query"
  7. "github.com/gin-gonic/gin"
  8. "github.com/spf13/cast"
  9. "github.com/uozi-tech/cosy"
  10. )
  11. func GetSiteList(c *gin.Context) {
  12. // Parse query parameters
  13. options := &site.ListOptions{
  14. Search: c.Query("search"),
  15. Name: c.Query("name"),
  16. Status: c.Query("status"),
  17. OrderBy: c.Query("sort_by"),
  18. Sort: c.DefaultQuery("order", "desc"),
  19. NamespaceID: cast.ToUint64(c.Query("namespace_id")),
  20. }
  21. // Get sites from database
  22. s := query.Site
  23. db := cosy.UseDB(c)
  24. var sites []*model.Site
  25. var err error
  26. if options.NamespaceID == 0 {
  27. // Local tab: no namespace OR deploy_mode='local'
  28. err = db.Where("namespace_id IS NULL OR namespace_id IN (?)",
  29. db.Model(&model.Namespace{}).Where("deploy_mode = ?", "local").Select("id"),
  30. ).Preload("Namespace").Find(&sites).Error
  31. } else {
  32. // Remote tab: specific namespace
  33. sites, err = s.Where(s.NamespaceID.Eq(options.NamespaceID)).Preload(s.Namespace).Find()
  34. }
  35. if err != nil {
  36. cosy.ErrHandler(c, err)
  37. return
  38. }
  39. // Get site configurations using the internal logic
  40. configs, err := site.GetSiteConfigs(c, options, sites)
  41. if err != nil {
  42. cosy.ErrHandler(c, err)
  43. return
  44. }
  45. c.JSON(http.StatusOK, gin.H{
  46. "data": configs,
  47. })
  48. }