refactor: improved table structure

This commit is contained in:
2025-06-15 10:48:31 +03:00
parent abeaabbae0
commit c6a6aa6b91
2 changed files with 21 additions and 20 deletions

View File

@@ -19,13 +19,14 @@ type ConfirmationCode struct {
} }
type LoginInformation struct { type LoginInformation struct {
ID int64 ID int64
UserID int64 UserID int64
Email pgtype.Text Email pgtype.Text
PasswordHash string PasswordHash string
TotpEncrypted pgtype.Text TotpEncrypted pgtype.Text
Email2faEnabled pgtype.Bool Email2faEnabled pgtype.Bool
PasswordChangeTime pgtype.Timestamp PasswordChangeDate pgtype.Timestamp
PasswordTimesChanged pgtype.Int4
} }
type Profile struct { type Profile struct {

View File

@@ -1,20 +1,20 @@
-- TODO: login information must exist too
CREATE TABLE IF NOT EXISTS "users" ( CREATE TABLE IF NOT EXISTS "users" (
id BIGSERIAL PRIMARY KEY, id BIGSERIAL PRIMARY KEY,
username VARCHAR(20) UNIQUE NOT NULL, username VARCHAR(20) UNIQUE NOT NULL,
verified BOOLEAN, verified BOOLEAN DEFAULT FALSE,
banned BOOLEAN, banned BOOLEAN DEFAULT FALSE,
registration_date TIMESTAMP NOT NULL registration_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
); );
CREATE TABLE IF NOT EXISTS "login_informations" ( CREATE TABLE IF NOT EXISTS "login_informations" (
id BIGSERIAL PRIMARY KEY, id BIGSERIAL PRIMARY KEY,
user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE, user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE,
email VARCHAR(75), email VARCHAR(75) UNIQUE,
password_hash VARCHAR(512) NOT NULL, password_hash VARCHAR(512) NOT NULL,
totp_encrypted VARCHAR(512), totp_encrypted VARCHAR(512),
email_2fa_enabled BOOLEAN, email_2fa_enabled BOOLEAN DEFAULT FALSE,
password_change_time TIMESTAMP password_change_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
password_times_changed INTEGER DEFAULT 0
); );
CREATE TABLE IF NOT EXISTS "confirmation_codes" ( CREATE TABLE IF NOT EXISTS "confirmation_codes" (
@@ -22,9 +22,9 @@ CREATE TABLE IF NOT EXISTS "confirmation_codes" (
user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE, user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE,
type INTEGER NOT NULL, type INTEGER NOT NULL,
code VARCHAR(36) NOT NULL, code VARCHAR(36) NOT NULL,
expires_at TIMESTAMP NOT NULL, expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + INTERVAL '10 minutes',
used BOOLEAN, used BOOLEAN DEFAULT FALSE,
deleted BOOLEAN deleted BOOLEAN DEFAULT FALSE
); );
CREATE TABLE IF NOT EXISTS "sessions" ( CREATE TABLE IF NOT EXISTS "sessions" (
@@ -34,9 +34,9 @@ CREATE TABLE IF NOT EXISTS "sessions" (
name VARCHAR(100), name VARCHAR(100),
platform VARCHAR(32), platform VARCHAR(32),
latest_ip VARCHAR(16), latest_ip VARCHAR(16),
login_time TIMESTAMP NOT NULL, login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_seen_date TIMESTAMP NOT NULL, last_seen_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
terminated BOOLEAN terminated BOOLEAN DEFAULT FALSE
); );
CREATE TABLE IF NOT EXISTS "profiles" ( CREATE TABLE IF NOT EXISTS "profiles" (