Описание изменений

This commit is contained in:
2025-03-03 20:43:58 +03:00
parent 13e240f871
commit 8650456fc0
58 changed files with 4451 additions and 3390 deletions

View File

@@ -0,0 +1,7 @@
-- Добавляем поле для роли в таблицу users
ALTER TABLE users
ADD COLUMN role VARCHAR(20) DEFAULT NULL,
ADD COLUMN token_id INTEGER DEFAULT NULL;
-- Индекс для быстрого поиска по роли
CREATE INDEX idx_users_role ON users(role);

View File

@@ -0,0 +1,44 @@
-- Создание таблицы для связи идентификаторов пользователей
CREATE TABLE IF NOT EXISTS user_identities (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
identity_type VARCHAR(20) NOT NULL, -- 'ethereum', 'telegram', 'email'
identity_value VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE(identity_type, identity_value)
);
-- Создание таблицы для предпочтений пользователей
CREATE TABLE IF NOT EXISTS user_preferences (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
preference_key VARCHAR(50) NOT NULL,
preference_value TEXT,
updated_at TIMESTAMP DEFAULT NOW(),
UNIQUE(user_id, preference_key)
);
-- Создание таблицы для взаимодействий пользователей
CREATE TABLE IF NOT EXISTS user_interactions (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
interaction_type VARCHAR(50) NOT NULL,
interaction_data JSONB,
created_at TIMESTAMP DEFAULT NOW()
);
-- Создание таблицы для тем пользователей
CREATE TABLE IF NOT EXISTS user_topics (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
topic VARCHAR(100) NOT NULL,
relevance_score FLOAT DEFAULT 1.0,
updated_at TIMESTAMP DEFAULT NOW(),
UNIQUE(user_id, topic)
);
-- Индексы для оптимизации запросов
CREATE INDEX IF NOT EXISTS idx_user_identities_user_id ON user_identities(user_id);
CREATE INDEX IF NOT EXISTS idx_user_preferences_user_id ON user_preferences(user_id);
CREATE INDEX IF NOT EXISTS idx_user_interactions_user_id ON user_interactions(user_id);
CREATE INDEX IF NOT EXISTS idx_user_topics_user_id ON user_topics(user_id);

View File

@@ -0,0 +1,64 @@
-- Таблица для Канбан-досок
CREATE TABLE IF NOT EXISTS kanban_boards (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
description TEXT,
owner_id INTEGER REFERENCES users(id),
is_public BOOLEAN DEFAULT false,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Таблица для колонок Канбан-доски
CREATE TABLE IF NOT EXISTS kanban_columns (
id SERIAL PRIMARY KEY,
board_id INTEGER REFERENCES kanban_boards(id) ON DELETE CASCADE,
title VARCHAR(100) NOT NULL,
position INTEGER NOT NULL,
wip_limit INTEGER DEFAULT NULL, -- Лимит задач в работе (Work In Progress)
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Таблица для карточек (задач) Канбан-доски
CREATE TABLE IF NOT EXISTS kanban_cards (
id SERIAL PRIMARY KEY,
column_id INTEGER REFERENCES kanban_columns(id) ON DELETE CASCADE,
title VARCHAR(200) NOT NULL,
description TEXT,
position INTEGER NOT NULL,
assigned_to INTEGER REFERENCES users(id),
due_date TIMESTAMP,
labels JSONB DEFAULT '[]',
created_by INTEGER REFERENCES users(id),
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Таблица для комментариев к карточкам
CREATE TABLE IF NOT EXISTS kanban_comments (
id SERIAL PRIMARY KEY,
card_id INTEGER REFERENCES kanban_cards(id) ON DELETE CASCADE,
user_id INTEGER REFERENCES users(id),
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Таблица для доступа к доскам
CREATE TABLE IF NOT EXISTS kanban_board_access (
id SERIAL PRIMARY KEY,
board_id INTEGER REFERENCES kanban_boards(id) ON DELETE CASCADE,
user_id INTEGER REFERENCES users(id),
access_level VARCHAR(20) NOT NULL, -- 'read', 'write', 'admin'
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
UNIQUE(board_id, user_id)
);
-- Индексы для оптимизации запросов
CREATE INDEX IF NOT EXISTS idx_kanban_columns_board_id ON kanban_columns(board_id);
CREATE INDEX IF NOT EXISTS idx_kanban_cards_column_id ON kanban_cards(column_id);
CREATE INDEX IF NOT EXISTS idx_kanban_comments_card_id ON kanban_comments(card_id);
CREATE INDEX IF NOT EXISTS idx_kanban_board_access_board_id ON kanban_board_access(board_id);
CREATE INDEX IF NOT EXISTS idx_kanban_board_access_user_id ON kanban_board_access(user_id);

View File

@@ -1,21 +0,0 @@
-- Создаем временную таблицу для уникальных адресов
CREATE TEMP TABLE unique_users AS
SELECT DISTINCT ON (LOWER(address))
id,
LOWER(address) as address,
created_at
FROM users
ORDER BY LOWER(address), created_at ASC;
-- Удаляем все записи из users
TRUNCATE users CASCADE;
-- Восстанавливаем уникальные записи
INSERT INTO users (id, address, created_at)
SELECT id, address, created_at FROM unique_users;
-- Обновляем последовательность id
SELECT setval('users_id_seq', (SELECT MAX(id) FROM users));
-- Удаляем временную таблицу
DROP TABLE unique_users;

View File

@@ -1,44 +0,0 @@
-- Создаем расширение для векторов
CREATE EXTENSION IF NOT EXISTS vector;
-- Создаем таблицу пользователей
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
address VARCHAR(42) UNIQUE NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Создаем таблицу документов
DROP TABLE IF EXISTS documents;
CREATE TABLE documents (
id bigserial PRIMARY KEY,
content text NOT NULL,
metadata jsonb,
embedding vector(4096)
);
-- Создаем таблицу истории чата
CREATE TABLE IF NOT EXISTS chat_history (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
message TEXT NOT NULL,
response TEXT NOT NULL,
context_docs INTEGER[],
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
is_approved BOOLEAN DEFAULT false
);
-- Даем права пользователю
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO postgres;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO postgres;
-- Обновляем существующие адреса
UPDATE users SET address = LOWER(address);
-- Удаляем дубликаты
DELETE FROM users a USING users b
WHERE a.id > b.id
AND LOWER(a.address) = LOWER(b.address);
ALTER TABLE chat_history
ADD COLUMN IF NOT EXISTS is_approved BOOLEAN DEFAULT false;