package admin import ( "quyun/v2/app/requests" "quyun/v2/app/services" "quyun/v2/database" "quyun/v2/database/models" "quyun/v2/providers/ali" "github.com/gofiber/fiber/v3" ) // @provider type medias struct { oss *ali.OSSClient } // List medias // // @Summary 媒体列表 // @Tags Admin Medias // @Produce json // @Param pagination query requests.Pagination false "分页参数" // @Param query query ListQuery false "筛选条件" // @Success 200 {object} requests.Pager{items=models.Media} "成功" // @Router /admin/medias [get] // @Bind pagination query // @Bind query query func (ctl *medias) List(ctx fiber.Ctx, pagination *requests.Pagination, query *ListQuery) (*requests.Pager, error) { return services.Media.List(ctx, pagination, models.MediaQuery.Name.Like(database.WrapLike(*query.Keyword))) } // Show media // // @Summary 媒体预览(跳转到签名 URL) // @Tags Admin Medias // @Param id path int64 true "媒体 ID" // @Success 302 {string} string "跳转" // @Router /admin/medias/:id [get] // @Bind media path key(id) model(id) func (ctl *medias) Show(ctx fiber.Ctx, media *models.Media) error { url, err := ctl.oss.GetSignedUrl(ctx, media.Path) if err != nil { return err } return ctx.Redirect().To(url) } // Delete // // @Summary 删除媒体 // @Tags Admin Medias // @Produce json // @Param id path int64 true "媒体 ID" // @Success 204 {object} any "成功" // @Router /admin/medias/:id [delete] // @Bind media path key(id) model(id) func (ctl *medias) Delete(ctx fiber.Ctx, media *models.Media) error { if err := ctl.oss.Delete(ctx, media.Path); err != nil { return err } if _, err := media.Delete(ctx); err != nil { return err } return ctx.SendStatus(fiber.StatusNoContent) }