modified: main_dc/docker-compose.yml

modified:   main_dc/yalarba/api_es/.env
	modified:   main_dc/yalarba/api_es/cmd/main.go
	modified:   main_dc/yalarba/api_es/go.mod
	modified:   main_dc/yalarba/api_es/go.sum
	new file:   main_dc/yalarba/api_es/internal/config/config.go
	new file:   main_dc/yalarba/api_es/internal/database/psql_db.go
	new file:   main_dc/yalarba/api_es/pkg/logger/helpers.go
	new file:   main_dc/yalarba/api_es/pkg/logger/interface.go
	new file:   main_dc/yalarba/api_es/pkg/logger/logger.go
	new file:   main_dc/yalarba/api_es/pkg/logger/route_logger.go
add new User model for api_es
add global zapLogger api_es
add configs dotenv api_es
sipmplify main api_es
This commit is contained in:
2025-11-11 05:58:36 +05:00
parent 510d17fc25
commit ed355ee60d
11 changed files with 403 additions and 196 deletions
@@ -0,0 +1,42 @@
package config
import (
"os"
)
type Config struct {
DBHost string
DBPort string
DBUser string
DBPassword string
DBName string
JWTSecret string
ServerPort string
UploadPath string
LogLevel string
Environment string
AppPort string
}
func Load() *Config {
return &Config{
DBHost: getEnv("DB_HOST", "localhost"),
DBPort: getEnv("DB_PORT", "5432"),
DBUser: getEnv("DB_USER", "postgres"),
DBPassword: getEnv("DB_PASSWORD", "postgres"),
DBName: getEnv("DB_NAME", "mydb"),
JWTSecret: getEnv("JWT_SECRET", "secret"),
ServerPort: getEnv("SERVER_PORT", "8080"),
UploadPath: getEnv("UPLOAD_PATH", "./storage/uploads"),
LogLevel: getEnv("LOG_LEVEL", "debug"),
Environment: getEnv("ENVIRONMENT", "development"),
AppPort: getEnv("APP_PORT", "8081"),
}
}
func getEnv(key, defaultValue string) string {
if value := os.Getenv(key); value != "" {
return value
}
return defaultValue
}
@@ -0,0 +1,46 @@
package database
import (
"api_es/internal/config"
"api_es/internal/models"
"api_es/pkg/logger"
"fmt"
"log"
"go.uber.org/zap"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
func NewPostgresConnection(cfg *config.Config) (*gorm.DB, error) {
zapLogger := logger.Get()
zapLogger.Info("Start connect to Postgres DB")
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=UTC",
cfg.DBHost, cfg.DBUser, cfg.DBPassword, cfg.DBName, cfg.DBPort)
zapLogger.Info("dsn = %s", zap.String("dsn", dsn))
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
return nil, fmt.Errorf("failed to connect to database: %w", err)
}
zapLogger.Info("AutoMigrate models")
// Автомиграция
if err := autoMigrate(db); err != nil {
return nil, fmt.Errorf("can't migrate models, error = %s", err)
}
zapLogger.Info("Migrate complite successfully")
log.Println("Successfully connected to database")
return db, nil
}
func autoMigrate(db *gorm.DB) error {
// автоматические миграции GORM
return db.AutoMigrate(
&models.User{},
// другие модели...
)
}