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 // // @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.Medias.List(ctx, pagination, models.MediaQuery.Name.Like(database.WrapLike(*query.Keyword))) } // Show media // // @Router /admin/medias/:id [get] // @Bind id path func (ctl *medias) Show(ctx fiber.Ctx, id int64) error { media, err := services.Medias.FindByID(ctx, id) if err != nil { return ctx.SendString("Media not found") } url, err := ctl.oss.GetSignedUrl(ctx, media.Path) if err != nil { return err } return ctx.Redirect().To(url) } // Delete // // @Router /admin/medias/:id [delete] // @Bind id path func (ctl *medias) Delete(ctx fiber.Ctx, id int64) error { media, err := services.Medias.FindByID(ctx, id) if err != nil { return ctx.SendString("Media not found") } 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) }