116 lines
3.1 KiB
Go
116 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
_ "github.com/lib/pq" // Import the PostgreSQL driver
|
|
"github.com/redis/go-redis/v9"
|
|
)
|
|
|
|
const (
|
|
dbHost = "localhost"
|
|
dbPort = 5432
|
|
dbUser = "postgres"
|
|
dbPassword = "123" // Замените на свой пароль
|
|
dbName = "auth"
|
|
)
|
|
|
|
func main() {
|
|
|
|
// Создание клиента Redis
|
|
rdb := redis.NewClient(&redis.Options{
|
|
Addr: "localhost:6379", // Адрес Redis сервера
|
|
Password: "", // Пароль, если требуется
|
|
DB: 0, // Номер базы данных
|
|
})
|
|
|
|
// Проверка подключения
|
|
ctx := context.Background()
|
|
pong, err := rdb.Ping(ctx).Result()
|
|
if err != nil {
|
|
fmt.Println("Ошибка подключения к Redis:", err)
|
|
return
|
|
}
|
|
|
|
fmt.Println("Успешное подключение к Redis! Ответ:", pong)
|
|
|
|
// Строка подключения к базе данных
|
|
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("/task/:id", func(c *gin.Context) {
|
|
var code string
|
|
|
|
id := c.Param("id")
|
|
code, err := rdb.Get(ctx, id).Result()
|
|
if err != nil {
|
|
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
|
|
}
|
|
// Пример использования: установка и получение значения
|
|
err = rdb.Set(ctx, id, code, 0).Err()
|
|
if err != nil {
|
|
fmt.Println("Ошибка при установке значения:", err)
|
|
return
|
|
}
|
|
fmt.Println("Установили значение по ключу:", err)
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"code": code})
|
|
})
|
|
|
|
// Обработчик для обновления фрагмента кода
|
|
router.POST("/task/: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")
|
|
}
|