Files
aresv2/database/migrate/migrate.go
Beyhan Oğur 4362c3b83f first commit
2026-04-26 21:33:39 +03:00

166 lines
4.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package migrate
import (
configs "ares/config"
database "ares/database/config"
"ares/database/models"
"net/url"
"strings"
)
// Only run AutoMigrate if DB is initialized
func Migrate() {
if database.DB != nil {
if err := database.DB.AutoMigrate(
&models.User{},
&models.SocialAccount{},
&models.Profile{},
&models.Hero{},
&models.Setting{},
&models.CorsWhitelist{},
&models.CorsBlacklist{},
&models.RateLimitSetting{},
&models.RefreshToken{},
&models.Category{},
&models.Tag{},
&models.Post{},
&models.CategoryView{},
&models.Comment{},
&models.ProductCategory{},
&models.ProductTag{},
&models.Product{},
&models.ProductCategoryView{},
&models.ProductComment{},
&models.Cart{},
&models.CartItem{},
); err != nil {
configs.Logger.Sugar().Errorf("AutoMigrate Yapılamadı !!: %v", err)
}
seedSecurityDefaults()
configs.Logger.Info("AutoMigrate Yapıldı.")
} else {
configs.Logger.Info("DB not initialized: skipping AutoMigrate")
}
}
func MigratePg() {
if database.DBPg != nil {
if err := database.DBPg.AutoMigrate(
&models.User{},
&models.SocialAccount{},
&models.Profile{},
&models.Hero{},
&models.Setting{},
&models.CorsWhitelist{},
&models.CorsBlacklist{},
&models.RateLimitSetting{},
&models.RefreshToken{},
&models.Category{},
&models.Tag{},
&models.Post{},
&models.CategoryView{},
&models.Comment{},
&models.ProductCategory{},
&models.ProductTag{},
&models.Product{},
&models.ProductCategoryView{},
&models.ProductComment{},
&models.Cart{},
&models.CartItem{},
); err != nil {
configs.Logger.Sugar().Errorf("PG AutoMigrate Yapılamadı !!: %v", err)
}
seedSecurityDefaults()
configs.Logger.Info("PG AutoMigrate Yapıldı.")
} else {
configs.Logger.Info("PG DB not initialized: skipping AutoMigrate")
}
}
func seedSecurityDefaults() {
seedRateLimit("register", "Register endpoint default rate limit", 5, 60)
seedRateLimit("login", "Login endpoint default rate limit", 10, 60)
seedRateLimit("global", "Global endpoint default rate limit", 1000, 60)
for _, origin := range defaultWhitelistOrigins() {
seedCorsWhitelist(origin, "default seeded whitelist")
}
}
func seedRateLimit(name, description string, maxRequests int64, windowSeconds int) {
var existing models.RateLimitSetting
if err := database.DB.Where("name = ?", name).First(&existing).Error; err == nil {
return
}
item := models.RateLimitSetting{
Name: name,
Description: description,
MaxRequests: maxRequests,
WindowSeconds: windowSeconds,
IsActive: true,
UpdatedBy: "seed",
}
if err := database.DB.Create(&item).Error; err != nil {
configs.Logger.Sugar().Errorf("RateLimit seed failed (%s): %v", name, err)
return
}
configs.Logger.Sugar().Infof("RateLimit seed created: name=%s max=%d window=%ds", name, maxRequests, windowSeconds)
}
func seedCorsWhitelist(origin, description string) {
origin = strings.TrimSpace(origin)
if origin == "" {
return
}
var existing models.CorsWhitelist
if err := database.DB.Where("origin = ?", origin).First(&existing).Error; err == nil {
return
}
item := models.CorsWhitelist{
Origin: origin,
Description: description,
IsActive: true,
CreatedBy: "seed",
}
if err := database.DB.Create(&item).Error; err != nil {
configs.Logger.Sugar().Errorf("CorsWhitelist seed failed (%s): %v", origin, err)
return
}
configs.Logger.Sugar().Infof("CorsWhitelist seed created: origin=%s", origin)
}
func defaultWhitelistOrigins() []string {
origins := []string{
"http://localhost:3000",
"http://localhost:5173",
"http://localhost:8080",
"http://localhost:8000",
}
appURL := strings.TrimSpace(configs.AppConfig.AppURL)
if appURL != "" {
if parsed, err := url.Parse(appURL); err == nil && parsed.Scheme != "" && parsed.Host != "" {
origins = append(origins, parsed.Scheme+"://"+parsed.Host)
}
}
uniq := make(map[string]struct{})
out := make([]string, 0, len(origins))
for _, origin := range origins {
origin = strings.TrimSpace(origin)
if origin == "" {
continue
}
if _, ok := uniq[origin]; ok {
continue
}
uniq[origin] = struct{}{}
out = append(out, origin)
}
return out
}