Fix login blank screen and progress persistence

- Fix authStore to persist user data, not just isAuthenticated
- Fix progressStore handling of undefined API responses
- Remove minimax.md documentation file
- All progress now properly saves to PostgreSQL
- Login flow working correctly
This commit is contained in:
Renato
2026-02-12 03:38:33 +01:00
parent d31575a143
commit a2ed69fdb8
68 changed files with 14321 additions and 397 deletions

View File

@@ -2,7 +2,6 @@ package handlers
import (
"net/http"
"strconv"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
@@ -34,7 +33,7 @@ func (h *ProgresoHandler) GetProgreso(c *gin.Context) {
return
}
progresos, err := h.progresoRepo.GetByUsuario(c.Request.Context(), userID.(uuid.UUID))
progresos, err := h.progresoRepo.GetProgresoByUsuarioID(userID.(uuid.UUID))
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al obtener progreso"})
return
@@ -47,72 +46,32 @@ func (h *ProgresoHandler) GetProgreso(c *gin.Context) {
c.JSON(http.StatusOK, progresos)
}
// GetProgresoModulo godoc
// @Summary Obtener progreso por módulo
// @Description Obtiene el progreso del usuario en un módulo específico
// @Tags progreso
// @Produce json
// @Security BearerAuth
// @Param numero path int true "Número del módulo"
// @Success 200 {array} models.Progreso
// @Router /api/progreso/modulo/{numero} [get]
func (h *ProgresoHandler) GetProgresoModulo(c *gin.Context) {
userID, exists := c.Get("user_id")
if !exists {
c.JSON(http.StatusUnauthorized, gin.H{"error": "No autorizado"})
return
}
moduloNumero, err := strconv.Atoi(c.Param("numero"))
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Número de módulo inválido"})
return
}
progresos, err := h.progresoRepo.GetByModulo(c.Request.Context(), userID.(uuid.UUID), moduloNumero)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al obtener progreso"})
return
}
if progresos == nil {
progresos = []models.Progreso{}
}
c.JSON(http.StatusOK, progresos)
}
// UpdateProgreso godoc
// @Summary Guardar avance
// @Description Guarda el progreso de un ejercicio
// SaveProgreso godoc
// @Summary Guardar/actualizar progreso
// @Description Guarda o actualiza el progreso de un ejercicio
// @Tags progreso
// @Accept json
// @Produce json
// @Param ejercicioId path int true "ID del ejercicio"
// @Param progreso body models.ProgresoUpdate true "Datos del progreso"
// @Param progreso body models.Progreso true "Datos del progreso"
// @Security BearerAuth
// @Success 200 {object} map[string]string
// @Router /api/progreso/{ejercicioId} [put]
func (h *ProgresoHandler) UpdateProgreso(c *gin.Context) {
// @Router /api/progreso [post]
func (h *ProgresoHandler) SaveProgreso(c *gin.Context) {
userID, exists := c.Get("user_id")
if !exists {
c.JSON(http.StatusUnauthorized, gin.H{"error": "No autorizado"})
return
}
ejercicioID, err := strconv.Atoi(c.Param("ejercicioId"))
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "ID de ejercicio inválido"})
return
}
var req models.ProgresoUpdate
if err := c.ShouldBindJSON(&req); err != nil {
var progreso models.Progreso
if err := c.ShouldBindJSON(&progreso); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
err = h.progresoRepo.Upsert(c.Request.Context(), userID.(uuid.UUID), ejercicioID, &req)
progreso.UsuarioID = userID.(uuid.UUID)
err := h.progresoRepo.SaveProgreso(&progreso)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al guardar progreso: " + err.Error()})
return
@@ -123,11 +82,11 @@ func (h *ProgresoHandler) UpdateProgreso(c *gin.Context) {
// GetResumen godoc
// @Summary Obtener resumen
// @Description Obtiene estadísticas del progreso del usuario
// @Description Obtiene estadísticas del progreso del usuario (puntos totales, etc.)
// @Tags progreso
// @Produce json
// @Security BearerAuth
// @Success 200 {object} models.ProgresoResumen
// @Success 200 {object} models.ResumenProgreso
// @Router /api/progreso/resumen [get]
func (h *ProgresoHandler) GetResumen(c *gin.Context) {
userID, exists := c.Get("user_id")
@@ -136,7 +95,7 @@ func (h *ProgresoHandler) GetResumen(c *gin.Context) {
return
}
resumen, err := h.progresoRepo.GetResumen(c.Request.Context(), userID.(uuid.UUID))
resumen, err := h.progresoRepo.GetResumen(userID.(uuid.UUID))
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al obtener resumen"})
return

View File

@@ -216,7 +216,7 @@ func (h *UsersHandler) GetUserProgreso(c *gin.Context) {
return
}
progresos, err := h.progresoRepo.GetByUsuarioID(c.Request.Context(), id)
progresos, err := h.progresoRepo.GetProgresoByUsuarioID(id)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al obtener progreso"})
return