package routes import ( "encoding/json" "net/http" "github.com/CesarSSH/api-estudiantes/db" "github.com/CesarSSH/api-estudiantes/models" "github.com/gorilla/mux" "gorm.io/gorm" ) func GetEstudiantesHandler(w http.ResponseWriter, r *http.Request) { var estudiantes []models.Estudiante // Cargar los estudiantes junto con la asociación de Categorias db.DB.Preload("Categoria").Find(&estudiantes) // Codificar y enviar la respuesta en formato JSON w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(&estudiantes) } func PostEstudianteHandler(w http.ResponseWriter, r *http.Request) { var estudiante models.Estudiante err := json.NewDecoder(r.Body).Decode(&estudiante) if err != nil { w.WriteHeader(http.StatusBadRequest) // Error 400 w.Write([]byte("Error decoding JSON: " + err.Error())) return } // Verifica si la CategoriaID existe var categoria models.Categoria result := db.DB.First(&categoria, estudiante.CategoriaID) // Busca la categoria por ID if result.Error != nil { if result.Error == gorm.ErrRecordNotFound { w.WriteHeader(http.StatusNotFound) // Error 404 w.Write([]byte("El ID de esa categoria no existe")) return } // Si hay un error diferente, maneja el error w.WriteHeader(http.StatusInternalServerError) // Error 500 w.Write([]byte("Error en la query de la DB: " + result.Error.Error())) return } // Si el AttributeID existe, crea el nuevo estudiante estudianteCreado := db.DB.Create(&estudiante) if estudianteCreado.Error != nil { w.WriteHeader(http.StatusBadRequest) // Error 400 w.Write([]byte("Error al crear el estudiante: " + estudianteCreado.Error.Error())) return } w.WriteHeader(http.StatusCreated) // Código 201 json.NewEncoder(w).Encode(&estudiante) // Devuelve el estudiante creado } func DeleteEstudianteHandler(w http.ResponseWriter, r *http.Request) { var estudiante models.Estudiante params := mux.Vars(r) db.DB.First(&estudiante, params["id"]) if estudiante.ID == 0 { w.WriteHeader(http.StatusNotFound) w.Write([]byte("Estudiante no encontrado")) return } db.DB.Delete(&estudiante) //Esta funcion me desactivar el usuario w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(map[string]string{ "message": "Estudiante eliminado exitosamente", }) } func GetEstudianteByIdHandler(w http.ResponseWriter, r *http.Request) { var estudiante models.Estudiante params := mux.Vars(r) // Obtener el parametro "id" de la URL // Buscar el estudiante por ID y precargar la asociacion con Categoria if err := db.DB.Preload("Categoria").First(&estudiante, params["id"]).Error; err != nil { // Si no encuentra al estudiante, devolver 404 Not Found w.WriteHeader(http.StatusNotFound) w.Write([]byte("Estudiante no encontrado")) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(&estudiante) }