auto migrazione gorm
This commit is contained in:
Binary file not shown.
78
main.go
78
main.go
@@ -118,72 +118,20 @@ func initDB(path string) (*gorm.DB, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
schema := `
|
models := []any{
|
||||||
CREATE TABLE IF NOT EXISTS subscribers (
|
&Subscriber{},
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
&User{},
|
||||||
email TEXT NOT NULL UNIQUE,
|
&Session{},
|
||||||
ip_address TEXT NOT NULL,
|
&PasswordResetToken{},
|
||||||
user_agent TEXT NOT NULL,
|
&EmailVerificationToken{},
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
for _, model := range models {
|
||||||
userSchema := `
|
if db.Migrator().HasTable(model) {
|
||||||
CREATE TABLE IF NOT EXISTS users (
|
continue
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
}
|
||||||
email TEXT NOT NULL UNIQUE,
|
if err := db.AutoMigrate(model); err != nil {
|
||||||
password_hash TEXT NOT NULL,
|
return nil, err
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return db, nil
|
return db, nil
|
||||||
|
|||||||
Reference in New Issue
Block a user