- 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
106 lines
2.7 KiB
Go
106 lines
2.7 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
|
|
"github.com/ren/econ/backend/internal/models"
|
|
"github.com/ren/econ/backend/internal/repository"
|
|
)
|
|
|
|
type ProgresoHandler struct {
|
|
progresoRepo *repository.ProgresoRepository
|
|
}
|
|
|
|
func NewProgresoHandler(progresoRepo *repository.ProgresoRepository) *ProgresoHandler {
|
|
return &ProgresoHandler{progresoRepo: progresoRepo}
|
|
}
|
|
|
|
// GetProgreso godoc
|
|
// @Summary Obtener todo el progreso
|
|
// @Description Obtiene todo el progreso del usuario autenticado
|
|
// @Tags progreso
|
|
// @Produce json
|
|
// @Security BearerAuth
|
|
// @Success 200 {array} models.Progreso
|
|
// @Router /api/progreso [get]
|
|
func (h *ProgresoHandler) GetProgreso(c *gin.Context) {
|
|
userID, exists := c.Get("user_id")
|
|
if !exists {
|
|
c.JSON(http.StatusUnauthorized, gin.H{"error": "No autorizado"})
|
|
return
|
|
}
|
|
|
|
progresos, err := h.progresoRepo.GetProgresoByUsuarioID(userID.(uuid.UUID))
|
|
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)
|
|
}
|
|
|
|
// SaveProgreso godoc
|
|
// @Summary Guardar/actualizar progreso
|
|
// @Description Guarda o actualiza el progreso de un ejercicio
|
|
// @Tags progreso
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param progreso body models.Progreso true "Datos del progreso"
|
|
// @Security BearerAuth
|
|
// @Success 200 {object} map[string]string
|
|
// @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
|
|
}
|
|
|
|
var progreso models.Progreso
|
|
if err := c.ShouldBindJSON(&progreso); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{"message": "Progreso guardado exitosamente"})
|
|
}
|
|
|
|
// GetResumen godoc
|
|
// @Summary Obtener resumen
|
|
// @Description Obtiene estadísticas del progreso del usuario (puntos totales, etc.)
|
|
// @Tags progreso
|
|
// @Produce json
|
|
// @Security BearerAuth
|
|
// @Success 200 {object} models.ResumenProgreso
|
|
// @Router /api/progreso/resumen [get]
|
|
func (h *ProgresoHandler) GetResumen(c *gin.Context) {
|
|
userID, exists := c.Get("user_id")
|
|
if !exists {
|
|
c.JSON(http.StatusUnauthorized, gin.H{"error": "No autorizado"})
|
|
return
|
|
}
|
|
|
|
resumen, err := h.progresoRepo.GetResumen(userID.(uuid.UUID))
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al obtener resumen"})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, resumen)
|
|
}
|