Revisión de Promociones de Publicaciones
Los administradores aprueban o rechazan campañas de promoción de publicaciones (impulso publicitario pagado) pendientes. El lado orientado al creador (crear/gestionar una campaña) también está completamente conectado de extremo a extremo, con una pantalla "Mis promociones" bajo Settings → My promotions — ver Promociones de Publicaciones para esa mitad de la funcionalidad.
Checklist de implementación
- Listar campañas de promoción pendientes (
adminGetPendingPromotions) - Aprobar una campaña (
adminApprovePromotion) — la cambia aactive, lo que le da un impulso real en el ranking del feed principal - Rechazar una campaña con un motivo (
adminRejectPromotion) — reembolsa el presupuesto de monedas no utilizado del creador
Dónde vive esto
Backend — apps/backend/graphql/resolvers/post-promotion.resolver.js, protegido por el permiso de administrador MANAGE_PROMOTIONS. Es el mismo archivo de resolver que las operaciones orientadas al creador (myPromotions, createPostPromotion, pausePostPromotion, etc.), consumidas por la pantalla "Mis promociones" de apps/frontend-nextjs — ver la referencia técnica.
Frontend — apps/frontend-admin/src/app/promotions/page.tsx, mostrado condicionalmente en la navegación de administrador según el permiso MANAGE_PROMOTIONS.
Referencia de GraphQL
query AdminGetPendingPromotions {
adminGetPendingPromotions {
id campaignName objective budgetType budgetAmount
post { id text }
user { id username }
}
}
mutation AdminApprovePromotion($id: ID!) { adminApprovePromotion(id: $id) { id status reviewedAt } }
mutation AdminRejectPromotion($id: ID!, $reason: String) { adminRejectPromotion(id: $id, reason: $reason) { id status rejectionReason reviewedAt } }