implement graphQL and init postgres
This commit is contained in:
@@ -1,23 +1,53 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"omega-server/local/model"
|
||||
"omega-server/local/utl/logging"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"go.uber.org/dig"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
func Start(di *dig.Container) {
|
||||
// PostgreSQL connection configuration
|
||||
host := os.Getenv("DB_HOST")
|
||||
if host == "" {
|
||||
host = "localhost"
|
||||
}
|
||||
|
||||
port := os.Getenv("DB_PORT")
|
||||
if port == "" {
|
||||
port = "5432"
|
||||
}
|
||||
|
||||
user := os.Getenv("DB_USER")
|
||||
if user == "" {
|
||||
user = "postgres"
|
||||
}
|
||||
|
||||
password := os.Getenv("DB_PASSWORD")
|
||||
if password == "" {
|
||||
password = "password"
|
||||
}
|
||||
|
||||
dbName := os.Getenv("DB_NAME")
|
||||
if dbName == "" {
|
||||
dbName = "app.db"
|
||||
dbName = "omega_db"
|
||||
}
|
||||
|
||||
sslMode := os.Getenv("DB_SSL_MODE")
|
||||
if sslMode == "" {
|
||||
sslMode = "disable"
|
||||
}
|
||||
|
||||
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=%s TimeZone=UTC",
|
||||
host, user, password, dbName, port, sslMode)
|
||||
|
||||
// Configure GORM logger
|
||||
gormLogger := logger.Default
|
||||
if os.Getenv("LOG_LEVEL") == "DEBUG" {
|
||||
@@ -26,10 +56,14 @@ func Start(di *dig.Container) {
|
||||
gormLogger = logger.Default.LogMode(logger.Silent)
|
||||
}
|
||||
|
||||
db, err := gorm.Open(sqlite.Open(dbName), &gorm.Config{
|
||||
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
|
||||
Logger: gormLogger,
|
||||
})
|
||||
if err != nil {
|
||||
logging.Error("Failed to connect to PostgreSQL database")
|
||||
logging.Error("Connection string: host=%s user=%s dbname=%s port=%s sslmode=%s", host, user, dbName, port, sslMode)
|
||||
logging.Error("Error: %v", err)
|
||||
logging.Error("Make sure PostgreSQL is running and the database exists")
|
||||
logging.Panic("failed to connect database: " + err.Error())
|
||||
}
|
||||
|
||||
@@ -62,6 +96,12 @@ func Migrate(db *gorm.DB) {
|
||||
&model.User{},
|
||||
&model.Role{},
|
||||
&model.Permission{},
|
||||
&model.Type{},
|
||||
&model.Project{},
|
||||
&model.Task{},
|
||||
&model.Integration{},
|
||||
&model.ProjectMember{},
|
||||
&model.TaskAssignee{},
|
||||
&model.SystemConfig{},
|
||||
&model.AuditLog{},
|
||||
&model.SecurityEvent{},
|
||||
@@ -87,6 +127,9 @@ func Seed(db *gorm.DB) error {
|
||||
if err := seedDefaultAdmin(db); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := seedDefaultTypes(db); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := seedSystemConfigs(db); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -193,6 +236,31 @@ func seedPermissions(db *gorm.DB) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func seedDefaultTypes(db *gorm.DB) error {
|
||||
defaultTypes := []model.Type{
|
||||
{Name: "Web Development", Description: "Standard web development project"},
|
||||
{Name: "Mobile App", Description: "Mobile application development"},
|
||||
{Name: "API Development", Description: "API and backend service development"},
|
||||
{Name: "Data Science", Description: "Data analysis and machine learning projects"},
|
||||
{Name: "DevOps", Description: "Infrastructure and deployment projects"},
|
||||
{Name: "Research", Description: "Research and documentation projects"},
|
||||
}
|
||||
|
||||
for _, projectType := range defaultTypes {
|
||||
var existingType model.Type
|
||||
err := db.Where("name = ? AND user_id IS NULL", projectType.Name).First(&existingType).Error
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
projectType.Init()
|
||||
if err := db.Create(&projectType).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
logging.Info("Created default project type: %s", projectType.Name)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func seedDefaultAdmin(db *gorm.DB) error {
|
||||
// Check if admin user already exists
|
||||
var existingAdmin model.User
|
||||
@@ -214,10 +282,9 @@ func seedDefaultAdmin(db *gorm.DB) error {
|
||||
}
|
||||
|
||||
admin := model.User{
|
||||
Email: "admin@example.com",
|
||||
Username: "admin",
|
||||
Name: "System Administrator",
|
||||
Active: true,
|
||||
Email: "admin@example.com",
|
||||
FullName: "System Administrator",
|
||||
PasswordHash: "",
|
||||
}
|
||||
admin.Init()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user