first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:33:39 +03:00
commit 4362c3b83f
1991 changed files with 285411 additions and 0 deletions

165
database/migrate/migrate.go Normal file
View File

@@ -0,0 +1,165 @@
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
}