mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-29 11:36:36 +08:00
65 lines
2.0 KiB
Go
65 lines
2.0 KiB
Go
// Package handler — subscription update + per-subscription site search.
|
|
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/ShukeBta/MediaStationGo/internal/model"
|
|
"github.com/ShukeBta/MediaStationGo/internal/service"
|
|
)
|
|
|
|
// updateSubscriptionHandler patches a subscription row.
|
|
func updateSubscriptionHandler(svc *service.Container) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
var patch model.Subscription
|
|
if err := c.ShouldBindJSON(&patch); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
if err := svc.Repo.DB.WithContext(c.Request.Context()).
|
|
Model(&model.Subscription{}).
|
|
Where("id = ?", c.Param("id")).
|
|
Updates(map[string]any{
|
|
"name": patch.Name,
|
|
"feed_url": patch.FeedURL,
|
|
"filter": patch.Filter,
|
|
"media_type": patch.MediaType,
|
|
"media_category": patch.MediaCategory,
|
|
"save_path": patch.SavePath,
|
|
"enabled": patch.Enabled,
|
|
}).Error; err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.Status(http.StatusNoContent)
|
|
}
|
|
}
|
|
|
|
// searchSubscriptionHandler runs a one-off keyword search against the
|
|
// configured tracker sites for the given subscription. We treat the
|
|
// subscription's filter as the search term; this lets the UI preview
|
|
// what would be queued without actually downloading anything.
|
|
func searchSubscriptionHandler(svc *service.Container) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
var sub model.Subscription
|
|
err := svc.Repo.DB.WithContext(c.Request.Context()).
|
|
Where("id = ?", c.Param("id")).First(&sub).Error
|
|
if err != nil {
|
|
c.JSON(http.StatusNotFound, gin.H{"error": "subscription not found"})
|
|
return
|
|
}
|
|
keyword := sub.Filter
|
|
if keyword == "" {
|
|
keyword = sub.Name
|
|
}
|
|
results, err := svc.Site.Search(c.Request.Context(), keyword)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"items": results, "subscription": sub})
|
|
}
|
|
}
|