package main import ( "database/sql" "fmt" "log" "net/http" "os" "github.com/go-sql-driver/mysql" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" ) var db *sql.DB func main() { cfg := mysql.Config{ User: os.Getenv("DBUSER"), Passwd: os.Getenv("DBPASS"), Net: "tcp", Addr: "127.0.0.1:3306", DBName: "emojis", } // Get a database handle. var err error db, err = sql.Open("mysql", cfg.FormatDSN()) if err != nil { log.Fatal(err) } pingErr := db.Ping() if pingErr != nil { log.Fatal(pingErr) } fmt.Println("Connected!") r := gin.Default() r.LoadHTMLGlob("templates/*") corsConfig := cors.DefaultConfig() corsConfig.AllowOrigins = []string{"*"} corsConfig.AllowHeaders = []string{"hx-current-url", "hx-request"} r.Use(cors.New(corsConfig)) r.GET("/forms/emoji", func(c *gin.Context) { c.HTML(http.StatusOK, "emoji_form.tmpl", gin.H{ "postId": c.Query("postId"), }) }) r.POST("/forms/emoji/post", func(c *gin.Context) { postID := c.PostForm("postId") emoji := c.PostForm("emojiInput") if postID == "" || emoji == "" { c.HTML(http.StatusOK, "emoji_form.tmpl", gin.H{"error": "missing parameters", "postId": postID}) return } _, err := db.Exec("INSERT INTO emoji_clicks (post_id, emoji) VALUES (?, ?)", postID, emoji) if err != nil { c.HTML(http.StatusOK, "emoji_form.tmpl", gin.H{"error": "error writing to database", "postId": postID}) return } var totalCount int err = db.QueryRow("SELECT COUNT(*) AS total_count FROM emoji_clicks WHERE post_id = ?;", postID).Scan(&totalCount) if err != nil { c.HTML(http.StatusOK, "emoji_form.tmpl", gin.H{"error": "error writing to database", "postId": postID}) return } c.HTML(http.StatusOK, "emoji_form.tmpl", gin.H{"postId": postID, "thumbsUpCount": totalCount}) }) r.Run(":8000") }