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") }