feat: implemented mapspecial package for mapping dtos that are not possible to automap by default; initialized profile service; added dtos for profile and profileSettings
97 lines
3.5 KiB
SQL
97 lines
3.5 KiB
SQL
-- Copyright (c) 2025 Nikolai Papin
|
|
--
|
|
-- This file is part of Easywish
|
|
--
|
|
-- This program is free software: you can redistribute it and/or modify
|
|
-- it under the terms of the GNU General Public License as published by
|
|
-- the Free Software Foundation, either version 3 of the License, or
|
|
-- (at your option) any later version.
|
|
--
|
|
-- This program is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
|
|
-- the GNU General Public License for more details.
|
|
--
|
|
-- You should have received a copy of the GNU General Public License
|
|
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
;
|
|
|
|
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
|
|
|
CREATE TABLE IF NOT EXISTS "users" (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
username VARCHAR(20) UNIQUE NOT NULL,
|
|
verified BOOLEAN DEFAULT FALSE,
|
|
registration_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
role INTEGER NOT NULL DEFAULT 1, -- enum user
|
|
deleted BOOLEAN DEFAULT FALSE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "banned_users" (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
reason VARCHAR(512),
|
|
expires_at TIMESTAMP,
|
|
banned_by VARCHAR(20) DEFAULT 'system',
|
|
pardoned BOOLEAN DEFAULT FALSE,
|
|
pardoned_by VARCHAR(20)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "login_informations" (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
email VARCHAR(75) UNIQUE,
|
|
password_hash VARCHAR(512) NOT NULL,
|
|
totp_encrypted VARCHAR(512),
|
|
email_2fa_enabled BOOLEAN DEFAULT FALSE,
|
|
password_change_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "confirmation_codes" (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
code_type INTEGER NOT NULL CHECK (code_type IN (0, 1)),
|
|
code_hash VARCHAR(512) NOT NULL,
|
|
expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + INTERVAL '10 minutes',
|
|
used BOOLEAN DEFAULT FALSE,
|
|
deleted BOOLEAN DEFAULT FALSE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "sessions" (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
guid UUID NOT NULL DEFAULT gen_random_uuid(),
|
|
name VARCHAR(175),
|
|
platform VARCHAR(175),
|
|
latest_ip VARCHAR(16),
|
|
login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
last_refresh_exp_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + INTERVAL '10080 seconds',
|
|
last_seen_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
terminated BOOLEAN DEFAULT FALSE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "profiles" (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
name VARCHAR(75) NOT NULL,
|
|
bio VARCHAR(512) NOT NULL DEFAULT '',
|
|
avatar_url VARCHAR(255) NOT NULL DEFAULT '',
|
|
birthday TIMESTAMP,
|
|
color VARCHAR(7) NOT NULL DEFAULT '#254333',
|
|
color_grad VARCHAR(7) NOT NULL DEFAULT '#691E4D'
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "profile_settings" (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
profile_id BIGINT UNIQUE NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
hide_fulfilled BOOLEAN NOT NULL DEFAULT TRUE,
|
|
hide_profile_details BOOLEAN NOT NULL DEFAULT FALSE,
|
|
hide_for_unauthenticated BOOLEAN NOT NULL DEFAULT FALSE,
|
|
hide_birthday BOOLEAN NOT NULL DEFAULT FALSE,
|
|
hide_dates BOOLEAN NOT NULL DEFAULT FALSE,
|
|
captcha BOOLEAN NOT NULL DEFAULT FALSE,
|
|
followers_only_interaction BOOLEAN NOT NULL DEFAULT FALSE
|
|
)
|