diff --git a/data/subscribers.db b/data/subscribers.db index 8b0a9a1..54f9bf9 100644 Binary files a/data/subscribers.db and b/data/subscribers.db differ diff --git a/main.go b/main.go index 657c145..05e60d9 100644 --- a/main.go +++ b/main.go @@ -118,72 +118,20 @@ func initDB(path string) (*gorm.DB, error) { return nil, err } - schema := ` - CREATE TABLE IF NOT EXISTS subscribers ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - email TEXT NOT NULL UNIQUE, - ip_address TEXT NOT NULL, - user_agent TEXT NOT NULL, - accept_language TEXT, - browser_data TEXT, - created_at TEXT NOT NULL DEFAULT (datetime('now')) - );` - if err := db.Exec(schema).Error; err != nil { - return nil, err + models := []any{ + &Subscriber{}, + &User{}, + &Session{}, + &PasswordResetToken{}, + &EmailVerificationToken{}, } - - userSchema := ` - CREATE TABLE IF NOT EXISTS users ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - email TEXT NOT NULL UNIQUE, - password_hash TEXT NOT NULL, - email_verified INTEGER NOT NULL DEFAULT 0, - created_at TEXT NOT NULL DEFAULT (datetime('now')), - updated_at TEXT NOT NULL DEFAULT (datetime('now')) - );` - if err := db.Exec(userSchema).Error; err != nil { - return nil, err - } - - sessionSchema := ` - CREATE TABLE IF NOT EXISTS sessions ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - user_id INTEGER NOT NULL, - token_hash TEXT NOT NULL UNIQUE, - expires_at INTEGER NOT NULL, - created_at TEXT NOT NULL DEFAULT (datetime('now')), - FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE - );` - if err := db.Exec(sessionSchema).Error; err != nil { - return nil, err - } - - resetSchema := ` - CREATE TABLE IF NOT EXISTS password_reset_tokens ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - user_id INTEGER NOT NULL, - token_hash TEXT NOT NULL UNIQUE, - expires_at INTEGER NOT NULL, - used_at INTEGER, - created_at TEXT NOT NULL DEFAULT (datetime('now')), - FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE - );` - if err := db.Exec(resetSchema).Error; err != nil { - return nil, err - } - - verifySchema := ` - CREATE TABLE IF NOT EXISTS email_verification_tokens ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - user_id INTEGER NOT NULL, - token_hash TEXT NOT NULL UNIQUE, - expires_at INTEGER NOT NULL, - used_at INTEGER, - created_at TEXT NOT NULL DEFAULT (datetime('now')), - FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE - );` - if err := db.Exec(verifySchema).Error; err != nil { - return nil, err + for _, model := range models { + if db.Migrator().HasTable(model) { + continue + } + if err := db.AutoMigrate(model); err != nil { + return nil, err + } } return db, nil