mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 11:16:37 +08:00
56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package handler
|
||
|
||
import (
|
||
"net/http"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
|
||
"github.com/truewhile/MeBox/internal/service"
|
||
)
|
||
|
||
// 媒体库筛选面板接口:facets 提供可选项,random 提供「随便看看」。
|
||
//
|
||
// 两者都走与列表完全相同的可见性判定(mediaVisibilityForRequest)与筛选解析
|
||
// (parseLibraryFilters),因此不会出现「列表里有、facets 里没有」或「随机跳
|
||
// 到了筛选条件之外的条目」这类不一致。
|
||
|
||
func libraryFacetsHandler(svc *service.Container) gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
libraryID := c.Param("id")
|
||
facets, err := svc.Media.LibraryFacets(
|
||
c.Request.Context(),
|
||
libraryID,
|
||
mediaVisibilityForRequest(c, svc),
|
||
svc.Discovery,
|
||
)
|
||
if err != nil {
|
||
writeInternalOrCanceled(c, err)
|
||
return
|
||
}
|
||
c.JSON(http.StatusOK, facets)
|
||
}
|
||
}
|
||
|
||
func libraryRandomHandler(svc *service.Container) gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
libraryID := c.Param("id")
|
||
filters := parseLibraryFilters(c)
|
||
// 随机只取一条,因此不带分页参数;未观看筛选仍需要会话用户。
|
||
media, err := svc.Media.RandomMedia(
|
||
c.Request.Context(),
|
||
libraryID,
|
||
mediaVisibilityForRequest(c, svc),
|
||
filters,
|
||
)
|
||
if err != nil {
|
||
writeInternalOrCanceled(c, err)
|
||
return
|
||
}
|
||
if media == nil {
|
||
c.JSON(http.StatusNotFound, gin.H{"error": "no media matches the current filters"})
|
||
return
|
||
}
|
||
c.JSON(http.StatusOK, media)
|
||
}
|
||
}
|