just_for_fun/code/go/front_code/front.go
2025-06-18 00:00:08 +03:00

86 lines
2.1 KiB
Go

package main
import (
"database/sql"
"fmt"
"log"
"net/http"
"github.com/gin-gonic/gin"
_ "github.com/lib/pq" // Import the PostgreSQL driver
)
const (
dbHost = "localhost"
dbPort = 5432
dbUser = "postgres"
dbPassword = "123" // Замените на свой пароль
dbName = "auth"
)
func main() {
// Строка подключения к базе данных
connStr := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
dbHost, dbPort, dbUser, dbPassword, dbName)
// to-do: написать обращение в кеш Redis
// Подключение к базе данных
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Проверка подключения
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to the database!")
router := gin.Default()
router.LoadHTMLGlob("./templates/*")
// Обработчик для получения фрагмента кода
router.GET("/code/:id", func(c *gin.Context) {
id := c.Param("id")
var code string
err := db.QueryRow("SELECT json_text FROM task WHERE id = $1", id).Scan(&code)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"code": code})
})
// Обработчик для обновления фрагмента кода
router.POST("/code/:id", func(c *gin.Context) {
id := c.Param("id")
var requestBody struct {
Code string `json:"code" binding:"required"`
}
if err := c.BindJSON(&requestBody); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
_, err := db.Exec("UPDATE snippets SET code = $1 WHERE id = $2", requestBody.Code, id)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "Snippet updated successfully"})
})
router.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{})
})
// Запуск сервера
router.Run(":8080")
}