Add db module
This commit is contained in:
@@ -2,11 +2,13 @@ package config
|
||||
|
||||
import (
|
||||
logging "payouts/internal/log/config"
|
||||
database "payouts/internal/service/database/config"
|
||||
monitoring "payouts/internal/service/monitoring/config"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
Server Server
|
||||
Metrics monitoring.Metrics
|
||||
Log logging.Log
|
||||
Server Server
|
||||
Metrics monitoring.Metrics
|
||||
Database database.Database
|
||||
Log logging.Log
|
||||
}
|
||||
|
||||
7
internal/service/database/config/database.go
Normal file
7
internal/service/database/config/database.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package config
|
||||
|
||||
type Database struct {
|
||||
Type string
|
||||
Connection string
|
||||
LogLevel string
|
||||
}
|
||||
44
internal/service/database/db_service.go
Normal file
44
internal/service/database/db_service.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
slogGorm "github.com/orandin/slog-gorm"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type dbService struct {
|
||||
dbType string
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewDatabaseService(dbType, connection, logLevel string) (DatabaseService, error) {
|
||||
|
||||
var dialector gorm.Dialector
|
||||
switch dbType {
|
||||
case "sqlite":
|
||||
dialector = sqlite.Open(connection)
|
||||
case "postgres":
|
||||
dialector = postgres.Open(connection)
|
||||
default:
|
||||
return nil, errors.New("unknown dbType")
|
||||
}
|
||||
|
||||
db, err := gorm.Open(dialector, &gorm.Config{
|
||||
Logger: slogGorm.New(),
|
||||
})
|
||||
|
||||
if err == nil {
|
||||
db.DB()
|
||||
db.AutoMigrate()
|
||||
// db.LogMode(true)
|
||||
}
|
||||
result := &dbService{}
|
||||
result.dbType = dbType
|
||||
result.db = db
|
||||
|
||||
return result, err
|
||||
|
||||
}
|
||||
26
internal/service/database/module.go
Normal file
26
internal/service/database/module.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"payouts/internal/config"
|
||||
|
||||
"go.uber.org/fx"
|
||||
)
|
||||
|
||||
var Module = fx.Options(
|
||||
fx.Provide(New),
|
||||
)
|
||||
|
||||
type DatabaseService interface {
|
||||
}
|
||||
|
||||
// Params represents the module input params
|
||||
type Params struct {
|
||||
fx.In
|
||||
|
||||
AppConfig *config.App
|
||||
}
|
||||
|
||||
// NewPersistence instantiates the persistence module
|
||||
func New(p Params) (DatabaseService, error) {
|
||||
return NewDatabaseService(p.AppConfig.Database.Type, p.AppConfig.Database.Connection, p.AppConfig.Database.LogLevel)
|
||||
}
|
||||
Reference in New Issue
Block a user