buhapp-backend/migrations/0001_init.up.sql
ga 8d754f9834 Sprint 1: scaffold backend (Go + Fiber + PG + Redis + MinIO)
- POST /api/v1/auth/register with mandatory consents
- POST /api/v1/auth/login
- GET  /api/v1/me (protected)
- GET  /api/v1/legal/{terms,privacy,disclaimer}
- Migrations for users, consent_log, audit_log
- bcrypt + JWT (access + refresh)
- Docker Compose stack
2026-08-20 15:41:05 +00:00

57 lines
2.0 KiB
SQL

-- BuhApp database schema
-- Sprint 1: users, consents, audit
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
-- USERS
CREATE TABLE IF NOT EXISTS users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
email TEXT UNIQUE,
phone TEXT UNIQUE,
password_hash TEXT NOT NULL,
name TEXT NOT NULL,
birthdate DATE,
gender TEXT CHECK (gender IN ('m','f','o')),
city TEXT,
bio TEXT,
photo_url TEXT,
is_verified BOOLEAN DEFAULT FALSE,
is_blocked BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
last_seen_at TIMESTAMPTZ
);
CREATE INDEX IF NOT EXISTS idx_users_last_seen ON users(last_seen_at);
-- CONSENT LOG (юр. документы, согласия при регистрации)
CREATE TABLE IF NOT EXISTS consent_log (
id BIGSERIAL PRIMARY KEY,
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
doc_type TEXT NOT NULL CHECK (doc_type IN ('terms','privacy','disclaimer','adult')),
doc_version TEXT NOT NULL,
ip INET,
user_agent TEXT,
accepted_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_consent_user ON consent_log(user_id);
-- AUDIT LOG (журнал действий для разборов)
CREATE TABLE IF NOT EXISTS audit_log (
id BIGSERIAL PRIMARY KEY,
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
action TEXT NOT NULL,
target_type TEXT,
target_id TEXT,
metadata JSONB,
ip INET,
user_agent TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_audit_user ON audit_log(user_id);
CREATE INDEX IF NOT EXISTS idx_audit_action ON audit_log(action);
CREATE INDEX IF NOT EXISTS idx_audit_created ON audit_log(created_at);