Files
bj_power/bj_power_mes/internal/db/db.go
T

62 lines
1.3 KiB
Go

/*
* Copyright (c) 2025 Beijing Hardman Automation Equipment Co., LTD. All rights reserved.
*
* Project: adapter
* File: db.go
* Last: 2025-05-16 16:13:58
* Author: wangcheng@bj-hardman.com
*/
package db
import (
"database/sql"
"fmt"
"log/slog"
xlog "bj_power_mes/common/logx"
"bj_power_mes/ent"
"entgo.io/ent/dialect"
entsql "entgo.io/ent/dialect/sql"
_ "github.com/jackc/pgx/v5/stdlib"
"github.com/zeromicro/go-zero/core/logx"
)
func MustNewDB(c DatabaseConf) (*ent.Client, *sql.DB) {
ec, db, err := NewDB(c)
logx.Must(err)
return ec, db
}
func NewDB(c DatabaseConf) (*ent.Client, *sql.DB, error) {
return NewDBWithParams(c.User, c.Password, c.Host, c.Port, c.Dbname, c.Debug)
}
func NewDBWithParams(username, password, host string, port int, dbname string, debug bool) (*ent.Client, *sql.DB, error) {
dsn := fmt.Sprintf("postgresql://%s:%s@%s:%d/%s",
username,
password,
host,
port,
dbname,
)
db, err := sql.Open("pgx", dsn)
if err != nil {
return nil, nil, err
}
_, err = db.Query("select 1")
if err != nil {
return nil, nil, err
}
drv := entsql.OpenDB(dialect.Postgres, db)
if debug {
logger := &xlog.EntLogger{Logger: slog.Default()}
return ent.NewClient(ent.Driver(dialect.DebugWithContext(drv, logger.DebugWithContext))), db, nil
}
return ent.NewClient(ent.Driver(drv)), db, nil
}