添加新功能,完善项目

This commit is contained in:
truewhile
2026-09-22 16:22:29 +08:00
parent 47899284a5
commit b5ce4646cf
85 changed files with 7103 additions and 982 deletions
+55
View File
@@ -0,0 +1,55 @@
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)
}
}