Skip to content

Resenas

Ruta: /teacher/reviews · Atajo: g r · Sidebar: Resenas

Gestion completa del sistema de resenas: moderar, responder, importar de plataformas externas, solicitar a alumnos y configurar automatizaciones.

Reviews page

4 KPI Cards:

  • Rating medio (estrella, fondo ambar)
  • Total de reviews (comentario, fondo azul)
  • Tasa de respuesta % (tendencia, fondo verde)
  • Este mes (calendario, fondo morado)

Distribucion de ratings: Barras horizontales 5→1 estrellas con conteos.

Reviews recientes: Primeras 5 reviews con cards completas.

La seccion publica del perfil (public-reviews-section.tsx) permite filtrar y ordenar reviews:

  • Pills de rating: Botones 5, 4, 3, 2, 1 estrellas con comportamiento toggle. Se pueden combinar.
  • Dropdown de source: Aparece solo cuando existen 2 o mas fuentes distintas. Opciones generadas dinamicamente desde availableSources.
  • Dropdown de orden: Mas recientes / Mejor valoradas / Peor valoradas.
  • Limpiar filtros: Enlace que resetea todos los filtros activos.

El backend (listPublic()) acepta source y sortBy como parametros. La consulta de estadisticas (barra resumen) es independiente y siempre devuelve totales sin filtrar.


Cada review muestra:

  • Avatar o circulo de inicial
  • Nombre (o “Anonimo”)
  • 5 estrellas (llenas/vacias)
  • Tiempo relativo (“5m”, “2h”, “3d”)
  • Badge de verificacion (verde)
  • Badge de source (gris, omitido para “pinteach”)
  • Badge de estado (amber=pending, gray=hidden, red=flagged)
  • Titulo + body
  • Quick tags (badges)
  • Miniaturas de imagenes (thumbnails 64x64px, object-cover, max 3) — solo si la review tiene imageUrls
  • Votacion de utilidad — Boton “Fue util” con contador en reviews publicas. Los visitantes pueden votar una vez por review. El voto se registra en reviews.helpfulCount y se muestra como “X personas encontraron esto util”. La accion llama a POST /public/:slug/reviews/:id/helpful. Una cookie previene votos duplicados del mismo visitante.
  • Respuesta del profesor (caja gris)
  • Reviews destacadas: borde ambar + fondo ambar claro
AccionEfecto
AprobarEstado → approved
OcultarEstado → hidden (opacity reducida)
DestacarToggle isFeatured (max 5 por profesor). Si se intenta destacar la 6ta, muestra toast “Maximo 5 reviews destacadas”
ResponderAbre formulario de respuesta (max 1000 chars)
Eliminar respuestaBorra teacherResponse
Eliminar reviewHard delete con confirmacion

FeatureDescripcionEstadoImplementado
Reviews con imagenesLos alumnos pueden adjuntar hasta 3 URLs de imagen al enviar su resena via ReviewForm. Se muestran como miniaturas 64x64px en ReviewCardBatch 2
Votacion de utilidadBoton “Fue util” en reviews publicas con contador helpfulCount. Prevencion de votos duplicados via cookieBatch 3
Limite de destacadas con feedbackAl intentar destacar la 6ta review, se muestra un toast de error. Comprobacion client-side en handleUpdate antes de la mutacionBatch 3
Traduccion automaticaReviews en otros idiomas no se traducen. Podria integrarse Google Translate para reviews de alumnos internacionalesAplazado

No hay bugs conocidos en esta pagina.


MejoraDescripcionDificultadEstadoImplementado
Filtro por fecha en reviews publicasLos filtros de rating y source ya estan implementados. Anadir un filtro por rango de fechas completaria la experienciaFacilBatch 4
Auto-solicitud mejoradaAgregar canal de solicitud configurable (in_app, email, link) y preview del mensaje que recibira el alumnoMedio

ArchivoProposito
apps/web/src/routes/teacher/reviews.lazy.tsxPagina principal (5 tabs)
apps/web/src/components/reviews/review-card.tsxCard de review
apps/web/src/components/reviews/review-response-form.tsxFormulario de respuesta
apps/web/src/components/reviews/review-settings-panel.tsxPanel de configuracion
apps/web/src/components/reviews/import-review-form.tsxFormulario de importacion
apps/web/src/components/reviews/review-form.tsxFormulario de envio de resena (portal alumno)
apps/web/src/components/reviews/public-reviews-section.tsxSeccion de resenas en perfil publico
apps/api/src/services/reviews/review-service.tsServicio principal
apps/api/src/services/reviews/review-request-service.tsSolicitudes
apps/api/src/services/reviews/review-settings-service.tsConfiguracion
EndpointMetodoProposito
/teacher/reviews/statsGETKPIs y distribucion
/teacher/reviewsGETLista paginada con filtros
/public/:slug/reviewsGETReviews publicas. Params: source, sortBy (newest/highest/lowest), dateFrom, dateTo. Devuelve availableSources[]
/teacher/reviews/:idPATCH/DELETEModerar / eliminar
/teacher/reviews/:id/respondPOST/DELETEResponder / eliminar respuesta
/teacher/reviews/importPOSTImportar review externa
/teacher/reviews/requestsGETLista de solicitudes
/teacher/reviews/requests/sendPOSTEnviar solicitud manual
/teacher/reviews/settingsGET/PATCHConfiguracion
  • DB: reviews.imageUrls JSONB — array de URLs de imagen (strings). No hay limite en DB; la restriccion de max 3 se aplica en el formulario de alumno.
  • Formulario alumno (ReviewForm): Campo “Step 4” visible tras seleccionar rating. Valida URL valida con new URL(). Muestra previsualizacion 64x64px con boton X para eliminar. Maximo 3 imagenes. Enter en el input llama addImageUrl().
  • Card (ReviewCard): Bloque de miniaturas renderizado entre quick tags y la respuesta del profesor. Condicional: solo aparece si review.imageUrls && review.imageUrls.length > 0.
  • API: El campo imageUrls se envia en el body de POST /student/sessions/:id/review. El endpoint de listado (GET /teacher/reviews) devuelve imageUrls[] en cada review.
ParametroValor
Cooldown entre solicitudes7 dias
Ventana de edicion de resena30 dias
Retraso auto-request30 minutos
Sesiones minimas para solicitar1
Maximo imagenes por review3