package main import ( "database/sql" "fmt" "log" "net/http" "text/template" _ "github.com/go-sql-driver/mysql" ) func conexionDB() (conexion *sql.DB) { Driver := "mysql" Usuario := "root" Contraseña := "" Nombre := "sistema" conexion, err := sql.Open(Driver, Usuario+":"+Contraseña+"@tcp(127.0.0.1)/"+Nombre) if err != nil { panic(err.Error()) } return conexion } var plantillas = template.Must(template.ParseGlob("plantillas/*")) func main() { http.HandleFunc("/", Inicio) http.HandleFunc("/formulario", Formulario) http.HandleFunc("/insertar", Insertar) http.HandleFunc("/borrar", Borrar) http.HandleFunc("/editar", Editar) http.HandleFunc("/actualizar", Actualizar) log.Println("Servidor corriendo") http.ListenAndServe(":8080", nil) } func Borrar(w http.ResponseWriter, r *http.Request) { idRegistro := r.URL.Query().Get("id") fmt.Println(idRegistro) conexionEstablecida := conexionDB() borrarRegistro, err := conexionEstablecida.Prepare("UPDATE registros SET deleted_at = NOW() WHERE id = ?") if err != nil { panic(err.Error()) } borrarRegistro.Exec(idRegistro) http.Redirect(w, r, "/", http.StatusSeeOther) } type Registro struct { Id int Nombre string FechaNacimiento string Genero string NivelSocieconomico string Neurodivergente string GrupoEtnico string } func Inicio(w http.ResponseWriter, r *http.Request) { conexionEstablecida := conexionDB() registros, err := conexionEstablecida.Query("SELECT * FROM registros WHERE deleted_at IS NULL") if err != nil { log.Fatal(err) } registro := Registro{} arregloRegistro := []Registro{} for registros.Next() { var Id int var Nombre, Genero, NivelSocieconomico, Neurodivergente, GrupoEtnico, FechaNacimiento string var DeletedAt sql.NullTime err = registros.Scan(&Id, &Nombre, &FechaNacimiento, &Genero, &NivelSocieconomico, &Neurodivergente, &GrupoEtnico, &DeletedAt) if err != nil { log.Fatal(err) } registro.Id = Id registro.Nombre = Nombre registro.FechaNacimiento = FechaNacimiento registro.Genero = Genero registro.NivelSocieconomico = NivelSocieconomico registro.Neurodivergente = Neurodivergente registro.GrupoEtnico = GrupoEtnico arregloRegistro = append(arregloRegistro, registro) } fmt.Println(arregloRegistro) plantillas.ExecuteTemplate(w, "inicio", arregloRegistro) } func Editar(w http.ResponseWriter, r *http.Request) { idRegistro := r.URL.Query().Get("id") fmt.Println(idRegistro) conexionEstablecida := conexionDB() rows, err := conexionEstablecida.Query("SELECT Id, Nombre, FechaNacimiento, Genero, NivelSocieconomico, Neurodivergente, GrupoEtnico FROM registros WHERE Id=?", idRegistro) if err != nil { log.Fatal(err) } defer rows.Close() registro := Registro{} if rows.Next() { err = rows.Scan(®istro.Id, ®istro.Nombre, ®istro.FechaNacimiento, ®istro.Genero, ®istro.NivelSocieconomico, ®istro.Neurodivergente, ®istro.GrupoEtnico) if err != nil { log.Fatal(err) } } fmt.Println(registro) plantillas.ExecuteTemplate(w, "editar", registro) } func Formulario(w http.ResponseWriter, r *http.Request) { plantillas.ExecuteTemplate(w, "formulario", nil) } func Insertar(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { Id := r.FormValue("Id") Nombre := r.FormValue("nombre") FechaNacimiento := r.FormValue("fdn") Genero := r.FormValue("genero") NivelSocieconomico := r.FormValue("nivel_socioeconomico") Neurodivergente := r.FormValue("neurodivergente") GrupoEtnico := r.FormValue("grupo_etnico") conexionEstablecida := conexionDB() insertarRegistros, err := conexionEstablecida.Prepare("INSERT INTO registros (Id,Nombre, FechaNacimiento, Genero, NivelSocieconomico, Neurodivergente, GrupoEtnico) VALUES (?,?, ?, ?, ?, ?, ?)") if err != nil { http.Error(w, "Error al preparar la consulta: "+err.Error(), http.StatusInternalServerError) return } defer insertarRegistros.Close() _, err = insertarRegistros.Exec(Id, Nombre, FechaNacimiento, Genero, NivelSocieconomico, Neurodivergente, GrupoEtnico) if err != nil { http.Error(w, "Error al ejecutar la consulta: "+err.Error(), http.StatusInternalServerError) return } http.Redirect(w, r, "/", http.StatusSeeOther) } else { http.Error(w, "Método no permitido", http.StatusMethodNotAllowed) } } func Restaurar(w http.ResponseWriter, r *http.Request) { idRegistro := r.URL.Query().Get("id") fmt.Println(idRegistro) conexionEstablecida := conexionDB() restaurarRegistro, err := conexionEstablecida.Prepare("UPDATE registros SET deleted_at = NULL WHERE id = ?") if err != nil { panic(err.Error()) } restaurarRegistro.Exec(idRegistro) http.Redirect(w, r, "/", http.StatusSeeOther) } func Actualizar(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { Id := r.FormValue("Id") Nombre := r.FormValue("nombre") FechaNacimiento := r.FormValue("fdn") Genero := r.FormValue("genero") NivelSocieconomico := r.FormValue("nivel_socioeconomico") Neurodivergente := r.FormValue("neurodivergente") GrupoEtnico := r.FormValue("grupo_etnico") if Id == "" || Nombre == "" || FechaNacimiento == "" || Genero == "" || NivelSocieconomico == "" || Neurodivergente == "" || GrupoEtnico == "" { http.Error(w, "Todos los campos son obligatorios", http.StatusBadRequest) return } conexionEstablecida := conexionDB() modificarRegistros, err := conexionEstablecida.Prepare(" UPDATE registros SET Nombre=?, FechaNacimiento=?, Genero=?, NivelSocieconomico=?, Neurodivergente=?, GrupoEtnico=? WHERE Id=?") if err != nil { http.Error(w, "Error al preparar la consulta: "+err.Error(), http.StatusInternalServerError) return } defer modificarRegistros.Close() _, err = modificarRegistros.Exec(Nombre, FechaNacimiento, Genero, NivelSocieconomico, Neurodivergente, GrupoEtnico, Id) if err != nil { http.Error(w, "Error al ejecutar la consulta: "+err.Error(), http.StatusInternalServerError) return } http.Redirect(w, r, "/", http.StatusSeeOther) } else { http.Error(w, "Método no permitido", http.StatusMethodNotAllowed) } }