Commit bd046fc0 by dliangx

change connectdb() to db

parent 1cbfa985
package db
import (
"database/sql"
_ "github.com/lib/pq"
)
var DB *sql.DB
const connStr = "postgres://liang:postgres@localhost/xpolt?sslmode=disable"
func init() {
db, err := sql.Open("postgres", connStr)
if err != nil {
panic("failed to connect database")
}
DB = db
}
......@@ -9,20 +9,14 @@ import (
"strings"
"time"
"com.dliangx.xplot/appserver/db"
"com.dliangx.xplot/appserver/model"
"com.dliangx.xplot/appserver/util"
)
func SaveRoute(line model.GeoJson) (model.OptRoute, error) {
// 连接数据库
db, err := connectDB()
if err != nil {
return model.OptRoute{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
// 开启事务
tx, err := db.Begin()
tx, err := db.DB.Begin()
if err != nil {
return model.OptRoute{}, fmt.Errorf("begin transaction failed: %w", err)
}
......@@ -66,13 +60,8 @@ func SaveRoute(line model.GeoJson) (model.OptRoute, error) {
}
func SaveOptArea(optArea model.GeoJson) (model.OptArea, error) {
db, err := connectDB()
if err != nil {
return model.OptArea{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
tx, err := db.Begin()
tx, err := db.DB.Begin()
if err != nil {
return model.OptArea{}, fmt.Errorf("begin transaction failed: %w", err)
}
......@@ -112,13 +101,8 @@ func SaveOptArea(optArea model.GeoJson) (model.OptArea, error) {
}
func UpdateRoute(line model.GeoJson) (model.OptRoute, error) {
db, err := connectDB()
if err != nil {
return model.OptRoute{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
tx, err := db.Begin()
tx, err := db.DB.Begin()
if err != nil {
return model.OptRoute{}, fmt.Errorf("begin transaction failed: %w", err)
}
......@@ -162,13 +146,8 @@ func UpdateRoute(line model.GeoJson) (model.OptRoute, error) {
}
func UpdateOptArea(optArea model.GeoJson) (model.OptArea, error) {
db, err := connectDB()
if err != nil {
return model.OptArea{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
tx, err := db.Begin()
tx, err := db.DB.Begin()
if err != nil {
return model.OptArea{}, fmt.Errorf("begin transaction failed: %w", err)
}
......@@ -209,11 +188,6 @@ func UpdateOptArea(optArea model.GeoJson) (model.OptArea, error) {
}
func GetRoute(id int, opt_type int) (model.OptRoute, error) {
db, err := connectDB()
if err != nil {
return model.OptRoute{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
var route model.OptRoute
var query string
......@@ -228,7 +202,7 @@ func GetRoute(id int, opt_type int) (model.OptRoute, error) {
FROM opt_fly_routes WHERE id = $1`
}
err = db.QueryRow(query, id).Scan(
err := db.DB.QueryRow(query, id).Scan(
&route.ID, &route.Type, &jsonb_data, &route.OptTime, &route.Geometry,
)
if err != nil {
......@@ -244,15 +218,10 @@ func GetRoute(id int, opt_type int) (model.OptRoute, error) {
}
func GetOptArea(id int, opt_type int) (model.OptArea, error) {
db, err := connectDB()
if err != nil {
return model.OptArea{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
var area model.OptArea
var jsonb_data []byte
err = db.QueryRow(`
err := db.DB.QueryRow(`
SELECT id, type, JSON(properties), opt_time, ST_AsGeoJSON(geometry) as geometry
FROM opt_areas WHERE id = $1
`, id).Scan(
......@@ -271,17 +240,12 @@ func GetOptArea(id int, opt_type int) (model.OptArea, error) {
}
func DeleteRoute(id int, opt_type int) (bool, error) {
db, err := connectDB()
if err != nil {
return false, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
var err error
var result sql.Result
if opt_type == 1 {
result, err = db.Exec(`DELETE FROM opt_routes WHERE id = $1`, id)
result, err = db.DB.Exec(`DELETE FROM opt_routes WHERE id = $1`, id)
} else if opt_type == 2 {
result, err = db.Exec(`DELETE FROM opt_fly_routes WHERE id = $1`, id)
result, err = db.DB.Exec(`DELETE FROM opt_fly_routes WHERE id = $1`, id)
}
if err != nil {
......@@ -297,14 +261,9 @@ func DeleteRoute(id int, opt_type int) (bool, error) {
}
func DeleteOptArea(id int, opt_type int) (bool, error) {
db, err := connectDB()
if err != nil {
return false, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
var err error
var result sql.Result
result, err = db.Exec(`DELETE FROM opt_areas WHERE id = $1`, id)
result, err = db.DB.Exec(`DELETE FROM opt_areas WHERE id = $1`, id)
if err != nil {
return false, fmt.Errorf("delete route failed: %w", err)
......@@ -319,11 +278,6 @@ func DeleteOptArea(id int, opt_type int) (bool, error) {
}
func GetRelatedRoute(obj model.GeoJson) ([]model.OptRoute, error) {
db, err := connectDB()
if err != nil {
return []model.OptRoute{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
jsonstr, _ := json.Marshal(obj.Geometry)
wkt, err := util.TransGeoToWKT(string(jsonstr))
......@@ -340,7 +294,7 @@ func GetRelatedRoute(obj model.GeoJson) ([]model.OptRoute, error) {
query = `SELECT id, type, properties, opt_time, ST_AsGeoJSON(geometry) as geometry FROM opt_fly_routes WHERE ST_Intersects(ST_SetSRID($1::geometry,4326), geometry)`
}
rows, err := db.Query(query, wkt)
rows, err := db.DB.Query(query, wkt)
if err != nil {
return []model.OptRoute{}, err
}
......@@ -367,11 +321,6 @@ func GetRelatedRoute(obj model.GeoJson) ([]model.OptRoute, error) {
}
func GetRelatedOptArea(obj model.GeoJson) ([]model.OptArea, error) {
db, err := connectDB()
if err != nil {
return []model.OptArea{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
jsonstr, _ := json.Marshal(obj.Geometry)
wkt, err := util.TransGeoToWKT(string(jsonstr))
......@@ -386,7 +335,7 @@ func GetRelatedOptArea(obj model.GeoJson) ([]model.OptArea, error) {
query = `SELECT id, type, properties, opt_time as geometry FROM opt_areas WHERE ST_Intersects(ST_SetSRID($1::geometry,4326), geometry)`
}
rows, err := db.Query(query, wkt)
rows, err := db.DB.Query(query, wkt)
if err != nil {
return []model.OptArea{}, err
}
......@@ -412,11 +361,6 @@ func GetRelatedOptArea(obj model.GeoJson) ([]model.OptArea, error) {
}
func GetRelatedAdmArea(obj model.GeoJson) ([]model.GeoJson, error) {
db, err := connectDB()
if err != nil {
return []model.GeoJson{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
jsonstr, _ := json.Marshal(obj.Geometry)
wkt, err := util.TransGeoToWKT(string(jsonstr))
......@@ -431,7 +375,7 @@ func GetRelatedAdmArea(obj model.GeoJson) ([]model.GeoJson, error) {
query = `SELECT id, type, properties as geometry FROM geojson_data WHERE ST_Intersects(ST_SetSRID($1::geometry,4326), geom)`
}
rows, err := db.Query(query, wkt)
rows, err := db.DB.Query(query, wkt)
if err != nil {
return []model.GeoJson{}, err
}
......@@ -457,15 +401,11 @@ func GetRelatedAdmArea(obj model.GeoJson) ([]model.GeoJson, error) {
}
func CalcAreasCenter(ids []string, opt int) (float64, float64, error) {
db, err := connectDB()
if err != nil {
return 0, 0, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
// Convert string slice to comma separated string for SQL IN clause
idList := strings.Join(ids, ",")
var err error
var wktPoint string
var query string
......@@ -489,7 +429,7 @@ func CalcAreasCenter(ids []string, opt int) (float64, float64, error) {
return 0, 0, errors.New("opt value is not allow! ")
}
err = db.QueryRow(query).Scan(&wktPoint)
err = db.DB.QueryRow(query).Scan(&wktPoint)
if wktPoint == "" {
return 0, 0, fmt.Errorf("no areas found")
}
......@@ -523,12 +463,6 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) {
return false, fmt.Errorf("invalid geometry: geometry cannot be nil")
}
db, err := connectDB()
if err != nil {
return false, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
// 将两个 GeoJSON 转换为 WKT
geom1, err := json.Marshal(obj1.Geometry)
if err != nil {
......@@ -541,7 +475,7 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) {
}
var intersects bool
err = db.QueryRow(`
err = db.DB.QueryRow(`
SELECT ST_Intersects(
ST_GeomFromGeoJSON($1),
ST_GeomFromGeoJSON($2)
......@@ -557,12 +491,6 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) {
func Get90CrossOptArea(obj model.Geometrys) (string, error) {
db, err := connectDB()
if err != nil {
return "", fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
jsonstr, _ := json.Marshal(obj.Geometry)
wkt, err := util.TransGeoToWKT(string(jsonstr))
if err != nil {
......@@ -574,7 +502,7 @@ func Get90CrossOptArea(obj model.Geometrys) (string, error) {
SELECT p.id from opt_areas p WHERE st_area(ST_Intersection(ST_GeomFromText($1, 4326), p.geometry))/st_area(p.geometry) > 0.9;
`
rows, err := db.Query(query, wkt)
rows, err := db.DB.Query(query, wkt)
if err != nil {
return "", err
}
......
......@@ -8,10 +8,10 @@ import (
"log"
"os"
"com.dliangx.xplot/appserver/db"
"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/common/utils"
"github.com/cloudwego/hertz/pkg/protocol/consts"
_ "github.com/lib/pq"
)
// Feature GeoJSON特征结构体
......@@ -24,31 +24,20 @@ type Feature struct {
// ProcessGeoJSONFile 处理GeoJSON文件的主函数
func ProcessGeoJSONFile(filename string) error {
// 连接数据库
db, err := connectDB()
if err != nil {
return fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
// 创建表
if err := createTable(db); err != nil {
if err := createTable(db.DB); err != nil {
return fmt.Errorf("table creation failed: %v", err)
}
// 处理文件
if err := processFile(filename, db); err != nil {
if err := processFile(filename, db.DB); err != nil {
return fmt.Errorf("file processing failed: %v", err)
}
return nil
}
func connectDB() (*sql.DB, error) {
connStr := "postgres://postgres:postgres@localhost/xpolt?sslmode=disable"
return sql.Open("postgres", connStr)
}
func createTable(db *sql.DB) error {
// _, err := db.Exec(`
// CREATE TABLE IF NOT EXISTS geojson_data (
......
......@@ -8,6 +8,7 @@ import (
"github.com/cloudwego/hertz/pkg/common/utils"
"github.com/cloudwego/hertz/pkg/protocol/consts"
"com.dliangx.xplot/appserver/db"
"com.dliangx.xplot/appserver/geo"
"com.dliangx.xplot/appserver/route"
)
......@@ -18,7 +19,7 @@ func main() {
h := server.Default(
server.WithHostPorts(":8686"),
)
defer db.DB.Close()
h.GET("/ping", func(ctx context.Context, c *app.RequestContext) {
c.JSON(consts.StatusOK, utils.H{"message": "pong"})
})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment