alpha version
This commit is contained in:
48
database/database.go
Normal file
48
database/database.go
Normal file
@ -0,0 +1,48 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"log/slog"
|
||||
|
||||
"github.com/alex-savin/go-receipt-tracker/config"
|
||||
"github.com/alex-savin/go-receipt-tracker/models"
|
||||
"github.com/uptrace/bun"
|
||||
"github.com/uptrace/bun/dialect/pgdialect"
|
||||
"github.com/uptrace/bun/driver/pgdriver"
|
||||
"github.com/uptrace/bun/extra/bundebug"
|
||||
)
|
||||
|
||||
func NewDB(cfg *config.DataBase, log *slog.Logger) (*bun.DB, error) {
|
||||
ctx := context.Background()
|
||||
|
||||
// dsn := "postgres://bun:bun@localhost:5432/bun?sslmode=disable"
|
||||
sqldb := sql.OpenDB(pgdriver.NewConnector(pgdriver.WithDSN(cfg.DSN)))
|
||||
|
||||
db := bun.NewDB(sqldb, pgdialect.New())
|
||||
db.AddQueryHook(bundebug.NewQueryHook(bundebug.WithVerbose(true)))
|
||||
|
||||
// Register models before loading fixtures.
|
||||
db.RegisterModel((*models.GroupToUser)(nil), (*models.User)(nil), (*models.Group)(nil), (*models.Receipt)(nil), (*models.Merchant)(nil), (*models.CreditCard)(nil), (*models.Item)(nil), (*models.WhiteList)(nil), (*models.BlackList)(nil))
|
||||
|
||||
models := []interface{}{
|
||||
(*models.User)(nil),
|
||||
(*models.Group)(nil),
|
||||
(*models.GroupToUser)(nil),
|
||||
(*models.Receipt)(nil),
|
||||
(*models.Merchant)(nil),
|
||||
(*models.CreditCard)(nil),
|
||||
(*models.Item)(nil),
|
||||
(*models.WhiteList)(nil),
|
||||
(*models.BlackList)(nil),
|
||||
// (*models.Settings)(nil),
|
||||
}
|
||||
|
||||
for _, model := range models {
|
||||
if _, err := db.NewCreateTable().Model(model).Exec(ctx); err != nil {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
return db, nil
|
||||
}
|
Reference in New Issue
Block a user