implement graphQL and init postgres

This commit is contained in:
Fran Jurmanović
2025-07-06 19:19:36 +02:00
parent 016728532c
commit 26a0d33592
25 changed files with 1713 additions and 314 deletions

View File

@@ -107,7 +107,7 @@ func DefaultPagination() PaginationRequest {
return PaginationRequest{
Page: 1,
Limit: 10,
Sort: "dateCreated",
Sort: "created_at",
Order: "desc",
}
}
@@ -121,7 +121,7 @@ func (p *PaginationRequest) Validate() {
p.Limit = 10
}
if p.Sort == "" {
p.Sort = "dateCreated"
p.Sort = "created_at"
}
if p.Order != "asc" && p.Order != "desc" {
p.Order = "desc"

View File

@@ -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()