package main
import (
"context"
"fmt"
"os"
"github.com/jackc/pgx/v4"
)
// Структура бд
//CREATE EXTENSION ltree;
//CREATE TABLE IF NOT EXISTS "objects" (
// id SERIAL PRIMARY KEY,
// name TEXT NOT NULL,
// path ltree
//);
type DBData struct {
ID int64 `json:"id"`
Name string `json:"name" validate:"required,max=50"`
Path string `json:"path"`
}
type Tree struct {
ID int64 `json:"id"`
Name string `json:"name" validate:"required,max=50"`
Path string `json:"path"`
Childrens []Folder `json:"childrens"`
}
func GetDBData() []DBData {
conn, _ := pgx.Connect(context.Background(), os.Getenv("DATABASE_URL"))
defer conn.Close(context.Background())
// например получаю деревья с 3 уровнями вложенности, но может быть больше
query := `select * from objects where path ~ '*{1,3}'`
rows, _ := conn.Query(ctx, query, userID)
defer rows.Close()
var data []DBData
for rows.Next() {
var d DBData
_ = rows.Scan(&d.ID, &d.Name, &d.Path);
data = append(data, d)
}
return data
}
func main() {
// data := GetDBData()
// В результате этого запроса получаю
data := []DBData{
{ID: 1, Name: "Беларусь", Path: "1"},
{ID: 2, Name: "Россия", Path: "2"},
{ID: 3, Name: "Минск", Path: "1.3"},
{ID: 4, Name: "Москва", Path: "2.4"},
{ID: 5, Name: "Санкт-Петербург", Path: "2.5"},
{ID: 6, Name: "Приморский р-н", Path: "2.5.6"},
}
}