/* * 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 }