html works without newline

This commit is contained in:
betology 2025-03-21 16:08:47 -06:00
parent 5211f5beb7
commit 4bb69e98fa
5 changed files with 116 additions and 1 deletions

View file

@ -21,7 +21,13 @@ func main() {
// Initialize Gin router // Initialize Gin router
router := gin.Default() router := gin.Default()
// Initialize API handlers // Load HTML templates
router.LoadHTMLGlob("templates/*")
// Serve static files (CSS)
router.Static("/static", "./static")
// Initialize API handlers (MOVE THIS UP!)
apiHandler := api.NewAPIHandler(database) apiHandler := api.NewAPIHandler(database)
// Define API routes // Define API routes
@ -35,6 +41,10 @@ func main() {
apiGroup.DELETE("/:id", apiHandler.DeleteNombre) apiGroup.DELETE("/:id", apiHandler.DeleteNombre)
} }
// HTML Routes (MOVE THIS DOWN!)
apiGroup.GET("/html", apiHandler.GetNombresHTML)
apiGroup.GET("/html/:id", apiHandler.GetNombreByIDHTML)
// Start the server // Start the server
if err := router.Run(":8080"); err != nil { if err := router.Run(":8080"); err != nil {
log.Fatalf("Failed to start server: %v", err) log.Fatalf("Failed to start server: %v", err)

View file

@ -2,6 +2,7 @@ package api
import ( import (
"database/sql" "database/sql"
"log"
"net/http" "net/http"
"strconv" "strconv"
@ -159,3 +160,51 @@ func (h *APIHandler) DeleteNombre(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Nombre deleted"}) c.JSON(http.StatusOK, gin.H{"message": "Nombre deleted"})
} }
func (h *APIHandler) GetNombresHTML(c *gin.Context) {
log.Println("GetNombresHTML called") // Add logging
rows, err := h.DB.Query("SELECT NombreID, FamiliaID, Nombre, Fecha, ProveedorID, Precio, Inactivo FROM Nombres")
if err != nil {
log.Println("Database query error:", err) // Add logging
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
defer rows.Close()
var nombres []Nombre
for rows.Next() {
var nombre Nombre
if err := rows.Scan(&nombre.NombreID, &nombre.FamiliaID, &nombre.Nombre, &nombre.Fecha, &nombre.ProveedorID, &nombre.Precio, &nombre.Inactivo); err != nil {
log.Println("Row scan error:", err) // Add logging
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
nombres = append(nombres, nombre)
}
log.Println("Retrieved nombres:", nombres) // Add logging
c.HTML(http.StatusOK, "nombres.html", nombres)
log.Println("nombres.html rendered") //add log
}
func (h *APIHandler) GetNombreByIDHTML(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid ID"})
return
}
var nombre Nombre
err = h.DB.QueryRow("SELECT NombreID, FamiliaID, Nombre, Fecha, ProveedorID, Precio, Inactivo FROM Nombres WHERE NombreID = ?", id).Scan(
&nombre.NombreID, &nombre.FamiliaID, &nombre.Nombre, &nombre.Fecha, &nombre.ProveedorID, &nombre.Precio, &nombre.Inactivo)
if err != nil {
if err == sql.ErrNoRows {
c.JSON(http.StatusNotFound, gin.H{"error": "Nombre not found"})
} else {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
}
return
}
c.HTML(http.StatusOK, "nombre.html", nombre)
}

22
static/style.css Normal file
View file

@ -0,0 +1,22 @@
body {
font-family: sans-serif;
}
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}

21
templates/nombre.html Normal file
View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<title>Nombre</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<h1>Nombre Details</h1>
<p><strong>NombreID:</strong> {{ .NombreID }}</p>
<p><strong>FamiliaID:</strong> {{ .FamiliaID }}</p>
<p><strong>Nombre:</strong> {{ .Nombre }}</p>
<p><strong>Fecha:</strong> {{ .Fecha }}</p>
<p><strong>ProveedorID:</strong> {{ .ProveedorID }}</p>
<p><strong>Precio:</strong> {{ .Precio }}</p>
<p><strong>Inactivo:</strong> {{ .Inactivo }}</p>
<a href="/nombres">Back to List</a>
</body>
</html>

13
templates/nombres.html Normal file
View file

@ -0,0 +1,13 @@
<tbody>
{{ range . }}
<tr>
<td>{{ .NombreID }}</td>
<td>{{ .FamiliaID }}</td>
<td>{{ .Nombre }}</td>
<td>{{ .Fecha }}</td>
<td>{{ .ProveedorID }}</td>
<td>{{ .Precio }}</td>
<td>{{ .Inactivo }}</td>
</tr>
{{ end }}
</tbody>