Просмотр исходного кода

Base de datos con operaciones CRUD

unknown 1 год назад
Сommit
466006bd0a
8 измененных файлов с 441 добавлено и 0 удалено
  1. 8 0
      go.mod
  2. 4 0
      go.sum
  3. 204 0
      main.go
  4. 23 0
      plantillas/cabecera.html
  5. 76 0
      plantillas/editar.html
  6. 74 0
      plantillas/formulario.html
  7. 44 0
      plantillas/inicio.html
  8. 8 0
      plantillas/pagina.html

+ 8 - 0
go.mod

@@ -0,0 +1,8 @@
+module Go
+
+go 1.23.1
+
+require (
+	filippo.io/edwards25519 v1.1.0 
+	github.com/go-sql-driver/mysql v1.8.1 
+)

+ 4 - 0
go.sum

@@ -0,0 +1,4 @@
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
+github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
+github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=

+ 204 - 0
main.go

@@ -0,0 +1,204 @@
+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(&registro.Id, &registro.Nombre, &registro.FechaNacimiento, &registro.Genero, &registro.NivelSocieconomico, &registro.Neurodivergente, &registro.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)
+	}
+}

+ 23 - 0
plantillas/cabecera.html

@@ -0,0 +1,23 @@
+{{ define "cabecera"}}
+
+<!doctype html>
+<html lang="en">
+  <head>
+    <title>Title</title>
+
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+  </head>
+  <body>
+
+  <nav class="navbar navbar-expand navbar-light bg-light">
+      <div class="nav navbar-nav">
+          <a class="nav-item nav-link active" href="/pagina.html"> Home <span class="sr-only">(current)</span></a>
+      </div>
+  </nav>
+
+   <div class="container">
+
+{{ end }}

+ 76 - 0
plantillas/editar.html

@@ -0,0 +1,76 @@
+{{ define "editar"}}
+{{ template "cabecera"}}
+
+<div class="card">
+    <div class="card-header">
+        Editar usuario
+    </div>
+    <div class="card-body">
+        <form method="post" action="/actualizar">
+
+            <input type="hidden" value= "{{.Id}}" class="form-control" name="Id" id="Id" placeholder="">
+      
+            <div class="form-group">
+              <label for="">Nombre</label>
+              <input type="text" class="form-control" name="nombre" value="{{.Nombre}}" id="nombre">
+            </div>
+
+            <div class="form-group">
+                <label for="">Fecha de nacimiento</label>
+                <input type="text" class="form-control" name="fdn" value="{{.FechaNacimiento}}"id="fdn">
+                <small class="form-text text-muted">Por favor, ingresa tu fecha de nacimiento en formato AAAA/MM/DD.</small>
+              </div>
+
+              <div class="form-group">
+                <label for="genero">Género</label>
+                <select class="form-control" id="genero" name="genero" value="{{.Genero}}">
+                  <option value="">Seleccione una opción</option>
+                  <option value="masculino">Masculino</option>
+                  <option value="femenino">Femenino</option>
+                </select>
+              </div>
+
+              <div class="form-group">
+                <label for="nivel-socioeconomico">Nivel socioeconómico</label>
+                <select class="form-control" id="nivel_socioeconomico" name="nivel_socioeconomico" value="{{.NivelSocieconomico}}">
+                  <option value="">Seleccione una opción</option>
+                  <option value="bajo">Bajo</option>
+                  <option value="medio-bajo">Medio bajo</option>
+                  <option value="medio">Medio</option>
+                  <option value="medio-alto">Medio alto</option>
+                  <option value="alto">Alto</option>
+                </select>
+              </div>
+
+              <div class="form-group">
+                <label for="neurodivergente">Neurodivergente</label>
+                <select class="form-control" id="neurodivergente" name="neurodivergente" value="{{.Neurodivergente}}">
+                  <option value="">Seleccione una opción</option>
+                  <option value="no">NO</option>
+                  <option value="si">Dispraxia</option>
+                  <option value="no">Sinestesia</option>
+                  <option value="no">Epilepsia</option>
+                  <option value="no">Transtorno bipolar</option>
+                  <option value="no">Transtorno obsesivo compulsivo</option>
+                  <option value="no">Sindrome de Tourette</option>
+                  <option value="prefiero-no-decirlo">Prefiero no decirlo</option>
+                </select>
+              </div>
+
+              <div class="form-group">
+                <label for="grupo-etnico">Grupo étnico</label>
+                <select class="form-control" id="grupo_etnico" name="grupo_etnico" value="{{.GrupoEtnico}}">
+                  <option value="">Seleccione una opción</option>
+                  <option value="no">NO</option>
+                  <option value="indigena">Indígena</option>
+                  <option value="afrodescendiente">Afrodescendiente</option>
+                </select>
+              </div>  
+
+            <button type="submit" class="btn btn-primary">Guardar cambios</button>
+        </form> 
+    </div>
+</div>
+
+{{ template "pagina"}}
+{{ end }}

+ 74 - 0
plantillas/formulario.html

@@ -0,0 +1,74 @@
+{{ define "formulario"}}
+{{ template "cabecera"}}
+
+<div class="card">
+    <div class="card-header">
+        Registro de nuevo usuario
+    </div>
+    <div class="card-body">
+        <form method="post" action="/insertar">
+
+            <div class="form-group">
+              <label for="">Nombre</label>
+              <input type="text" class="form-control" name="nombre" id="nombre">
+            </div>
+
+            <div class="form-group">
+                <label for="">Fecha de nacimiento</label>
+                <input type="text" class="form-control" name="fdn" id="fdn">
+                <small class="form-text text-muted">Por favor, ingresa tu fecha de nacimiento en formato AAAA/MM/DD.</small>
+              </div>
+
+              <div class="form-group">
+                <label for="genero">Género</label>
+                <select class="form-control" id="genero" name="genero">
+                  <option value="">Seleccione una opción</option>
+                  <option value="masculino">Masculino</option>
+                  <option value="femenino">Femenino</option>
+                </select>
+              </div>
+
+              <div class="form-group">
+                <label for="nivel-socioeconomico">Nivel socioeconómico</label>
+                <select class="form-control" id="nivel_socioeconomico" name="nivel_socioeconomico">
+                  <option value="">Seleccione una opción</option>
+                  <option value="bajo">Bajo</option>
+                  <option value="medio-bajo">Medio bajo</option>
+                  <option value="medio">Medio</option>
+                  <option value="medio-alto">Medio alto</option>
+                  <option value="alto">Alto</option>
+                </select>
+              </div>
+
+              <div class="form-group">
+                <label for="neurodivergente">Neurodivergente</label>
+                <select class="form-control" id="neurodivergente" name="neurodivergente">
+                  <option value="">Seleccione una opción</option>
+                  <option value="no">NO</option>
+                  <option value="si">Dispraxia</option>
+                  <option value="no">Sinestesia</option>
+                  <option value="no">Epilepsia</option>
+                  <option value="no">Transtorno bipolar</option>
+                  <option value="no">Transtorno obsesivo compulsivo</option>
+                  <option value="no">Sindrome de Tourette</option>
+                  <option value="prefiero-no-decirlo">Prefiero no decirlo</option>
+                </select>
+              </div>
+
+              <div class="form-group">
+                <label for="grupo-etnico">Grupo étnico</label>
+                <select class="form-control" id="grupo_etnico" name="grupo_etnico">
+                  <option value="">Seleccione una opción</option>
+                  <option value="no">NO</option>
+                  <option value="indigena">Indígena</option>
+                  <option value="afrodescendiente">Afrodescendiente</option>
+                </select>
+              </div>  
+
+            <button type="submit" class="btn btn-primary">Agregar usuario</button>
+        </form> 
+    </div>
+</div>
+
+{{ template "pagina"}}
+{{ end }}

+ 44 - 0
plantillas/inicio.html

@@ -0,0 +1,44 @@
+{{ define "inicio" }}
+{{ template "cabecera"}}
+
+
+       <a name="" id="" class="btn btn-primary" href="/formulario" role="button">Agregar usuario</a>
+       <table class="table">
+        <thead>
+            <tr>
+                <th>ID</th>
+                <th>Nombre</th>
+                <th>Fecha de Nacimiento</th>
+                <th>Genero </th>
+                <th>Nivel socioeconomico</th>
+                <th>Neurodivergente</th>
+                <th>Grupo etnico</th>
+                <td> Acciones </td>
+            </tr>
+        </thead>
+        <tbody>
+            {{range.}}
+            <tr>
+                <td> {{.Id}} </td>
+                <td> {{.Nombre}} </td>
+                <td> {{.FechaNacimiento}} </td>
+                <td> {{.Genero}} </td>
+                <td> {{.NivelSocieconomico}} </td>
+                <td> {{.Neurodivergente}} </td>
+                <td> {{.GrupoEtnico}} </td>
+                <td> 
+                <a name="" id="" class="btn btn-warning" href="/editar?id={{.Id}}" role="button">Editar</a>    
+                <a name="" id="" class="btn btn-danger" href="/borrar?id={{.Id}}" role="button">Borrar</a>
+                </td>
+            </tr>
+            {{end}}
+            <tr>
+                <td scope="row"></td>
+                <td></td>
+                <td></td>
+            </tr>
+        </tbody>
+    </table> 
+
+{{ template "pagina"}}
+{{ end }}

+ 8 - 0
plantillas/pagina.html

@@ -0,0 +1,8 @@
+{{ define "pagina"}}
+</div>
+
+
+</body>
+</html>
+
+{{ end }}