medol-be/app/database/index.database.go

117 lines
2.7 KiB
Go
Raw Normal View History

2024-03-05 19:15:53 +00:00
package database
import (
"github.com/rs/zerolog"
"go-humas-be/app/database/entity"
2025-01-20 09:30:39 +00:00
"go-humas-be/app/database/entity/article_category_details"
2024-03-05 19:15:53 +00:00
"go-humas-be/config/config"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
// Database setup database with gorm
type Database struct {
DB *gorm.DB
Log zerolog.Logger
Cfg *config.Config
}
type Seeder interface {
Seed(*gorm.DB) error
Count(*gorm.DB) (int, error)
}
func NewDatabase(cfg *config.Config, log zerolog.Logger) *Database {
db := &Database{
Cfg: cfg,
Log: log,
}
return db
}
// ConnectDatabase connect database
func (_db *Database) ConnectDatabase() {
conn, err := gorm.Open(postgres.Open(_db.Cfg.DB.Postgres.DSN), &gorm.Config{})
if err != nil {
_db.Log.Error().Err(err).Msg("An unknown error occurred when to connect the database!")
} else {
_db.Log.Info().Msg("Connected the database succesfully!")
}
_db.DB = conn
}
// ShutdownDatabase shutdown database
func (_db *Database) ShutdownDatabase() {
sqlDB, err := _db.DB.DB()
if err != nil {
_db.Log.Error().Err(err).Msg("An unknown error occurred when to shutdown the database!")
} else {
_db.Log.Info().Msg("Shutdown the database succesfully!")
}
sqlDB.Close()
}
// MigrateModels migrate models
func (_db *Database) MigrateModels() {
err := _db.DB.AutoMigrate(
Models()...,
)
if err != nil {
_db.Log.Error().Err(err).Msg("An unknown error occurred when to migrate the database!")
} else {
_db.Log.Info().Msg("Migrate the database entity succesfully!")
}
}
// Models list of models for migration
func Models() []interface{} {
return []interface{}{
2024-03-29 16:33:52 +00:00
entity.Articles{},
2024-03-05 19:15:53 +00:00
entity.ArticleCategories{},
2025-01-20 09:30:39 +00:00
article_category_details.ArticleCategoryDetails{},
2024-03-05 19:15:53 +00:00
entity.ArticleFiles{},
2024-11-22 15:58:15 +00:00
entity.ArticleNulisAI{},
2024-03-05 19:15:53 +00:00
entity.Cities{},
2024-11-22 04:14:14 +00:00
entity.CustomStaticPages{},
2024-03-05 19:15:53 +00:00
entity.Districts{},
entity.Magazines{},
entity.MagazineFiles{},
entity.MasterMenus{},
entity.MasterModules{},
entity.MasterStatuses{},
2024-05-05 14:55:06 +00:00
entity.MasterApprovalStatuses{},
2024-03-05 19:15:53 +00:00
entity.Provinces{},
entity.ForgotPasswords{},
entity.RegistrationOtps{},
2024-03-05 19:15:53 +00:00
entity.UserLevels{},
entity.UserRoles{},
entity.UserRoleAccesses{},
entity.Users{},
entity.UserRoleLevelDetails{},
2024-03-05 19:15:53 +00:00
}
}
// SeedModels seed data
func (_db *Database) SeedModels(seeder []Seeder) {
for _, seed := range seeder {
count, err := seed.Count(_db.DB)
if err != nil {
_db.Log.Error().Err(err).Msg("An unknown error occurred when to seed the database!")
}
if count == 0 {
if err := seed.Seed(_db.DB); err != nil {
_db.Log.Error().Err(err).Msg("An unknown error occurred when to seed the database!")
}
_db.Log.Info().Msg("Seeded the database successfully!")
} else {
_db.Log.Info().Msg("Database is already seeded!")
}
}
_db.Log.Info().Msg("Seeded the database succesfully!")
}