package tenant import ( "time" "quyun/v2/app/errorx" "quyun/v2/app/http/tenant/dto" "quyun/v2/app/requests" "quyun/v2/app/services" "quyun/v2/database/models" "github.com/gofiber/fiber/v3" log "github.com/sirupsen/logrus" ) // mediaAssetAdmin provides tenant-admin media asset endpoints. // // @provider type mediaAssetAdmin struct{} // adminList // // @Summary 媒体资源列表(租户管理) // @Tags Tenant // @Accept json // @Produce json // @Param tenantCode path string true "Tenant Code" // @Param filter query dto.AdminMediaAssetListFilter true "Filter" // @Success 200 {object} requests.Pager{items=models.MediaAsset} // // @Router /t/:tenantCode/v1/management/media_assets [get] // @Bind tenant local key(tenant) // @Bind tenantUser local key(tenant_user) // @Bind filter query func (*mediaAssetAdmin) adminList( ctx fiber.Ctx, tenant *models.Tenant, tenantUser *models.TenantUser, filter *dto.AdminMediaAssetListFilter, ) (*requests.Pager, error) { if err := requireTenantAdmin(tenantUser); err != nil { return nil, err } if filter == nil { filter = &dto.AdminMediaAssetListFilter{} } log.WithFields(log.Fields{ "tenant_id": tenant.ID, "user_id": tenantUser.UserID, "type": filter.Type, "status": filter.Status, }).Info("tenant.admin.media_assets.list") return services.MediaAsset.AdminPage(ctx.Context(), tenant.ID, filter) } // adminDetail // // @Summary 媒体资源详情(租户管理) // @Tags Tenant // @Accept json // @Produce json // @Param tenantCode path string true "Tenant Code" // @Param assetID path int64 true "AssetID" // @Success 200 {object} models.MediaAsset // // @Router /t/:tenantCode/v1/management/media_assets/:assetID [get] // @Bind tenant local key(tenant) // @Bind tenantUser local key(tenant_user) // @Bind assetID path func (*mediaAssetAdmin) adminDetail( ctx fiber.Ctx, tenant *models.Tenant, tenantUser *models.TenantUser, assetID int64, ) (*models.MediaAsset, error) { if err := requireTenantAdmin(tenantUser); err != nil { return nil, err } log.WithFields(log.Fields{ "tenant_id": tenant.ID, "user_id": tenantUser.UserID, "asset_id": assetID, }).Info("tenant.admin.media_assets.detail") return services.MediaAsset.AdminDetail(ctx.Context(), tenant.ID, assetID) } // uploadInit // // @Summary 初始化媒体资源上传(租户管理) // @Tags Tenant // @Accept json // @Produce json // @Param tenantCode path string true "Tenant Code" // @Param form body dto.AdminMediaAssetUploadInitForm true "Form" // @Success 200 {object} dto.AdminMediaAssetUploadInitResponse // // @Router /t/:tenantCode/v1/management/media_assets/upload_init [post] // @Bind tenant local key(tenant) // @Bind tenantUser local key(tenant_user) // @Bind form body func (*mediaAssetAdmin) uploadInit( ctx fiber.Ctx, tenant *models.Tenant, tenantUser *models.TenantUser, form *dto.AdminMediaAssetUploadInitForm, ) (*dto.AdminMediaAssetUploadInitResponse, error) { if err := requireTenantAdmin(tenantUser); err != nil { return nil, err } if form == nil { return nil, errorx.ErrInvalidParameter } log.WithFields(log.Fields{ "tenant_id": tenant.ID, "user_id": tenantUser.UserID, "type": form.Type, }).Info("tenant.admin.media_assets.upload_init") return services.MediaAsset.AdminUploadInit(ctx.Context(), tenant.ID, tenantUser.UserID, form, time.Now()) } // uploadComplete // // @Summary 确认上传完成并进入处理(租户管理) // @Tags Tenant // @Accept json // @Produce json // @Param tenantCode path string true "Tenant Code" // @Param assetID path int64 true "AssetID" // @Param form body dto.AdminMediaAssetUploadCompleteForm false "Form" // @Success 200 {object} models.MediaAsset // // @Router /t/:tenantCode/v1/management/media_assets/:assetID/upload_complete [post] // @Bind tenant local key(tenant) // @Bind tenantUser local key(tenant_user) // @Bind assetID path // @Bind form body func (*mediaAssetAdmin) uploadComplete( ctx fiber.Ctx, tenant *models.Tenant, tenantUser *models.TenantUser, assetID int64, form *dto.AdminMediaAssetUploadCompleteForm, ) (*models.MediaAsset, error) { if err := requireTenantAdmin(tenantUser); err != nil { return nil, err } log.WithFields(log.Fields{ "tenant_id": tenant.ID, "user_id": tenantUser.UserID, "asset_id": assetID, }).Info("tenant.admin.media_assets.upload_complete") return services.MediaAsset.AdminUploadComplete(ctx.Context(), tenant.ID, tenantUser.UserID, assetID, form, time.Now()) } // adminDelete // // @Summary 删除媒体资源(租户管理,软删) // @Tags Tenant // @Accept json // @Produce json // @Param tenantCode path string true "Tenant Code" // @Param assetID path int64 true "AssetID" // @Success 200 {object} models.MediaAsset // // @Router /t/:tenantCode/v1/management/media_assets/:assetID [delete] // @Bind tenant local key(tenant) // @Bind tenantUser local key(tenant_user) // @Bind assetID path func (*mediaAssetAdmin) adminDelete( ctx fiber.Ctx, tenant *models.Tenant, tenantUser *models.TenantUser, assetID int64, ) (*models.MediaAsset, error) { if err := requireTenantAdmin(tenantUser); err != nil { return nil, err } log.WithFields(log.Fields{ "tenant_id": tenant.ID, "user_id": tenantUser.UserID, "asset_id": assetID, }).Info("tenant.admin.media_assets.delete") return services.MediaAsset.AdminDelete(ctx.Context(), tenant.ID, tenantUser.UserID, assetID, time.Now()) }