initial commit

This commit is contained in:
2025-11-29 00:28:21 +05:00
parent 46229acc82
commit ec3b03a935
76 changed files with 13492 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
-- +goose Up
-- +goose StatementBegin
-- =========================================
-- ENUM: moderator_action_type - Типы действий модератора
-- =========================================
CREATE TYPE moderator_action_type AS ENUM (
'approve_request', -- Одобрение заявки
'reject_request', -- Отклонение заявки
'block_user', -- Блокировка пользователя
'unblock_user', -- Разблокировка пользователя
'resolve_complaint', -- Разрешение жалобы
'reject_complaint', -- Отклонение жалобы
'edit_request', -- Редактирование заявки
'delete_request' -- Удаление заявки
);
COMMENT ON TYPE moderator_action_type IS 'Типы действий модераторов для аудита';
-- =========================================
-- ТАБЛИЦА: moderator_actions - Логи действий модераторов
-- =========================================
CREATE TABLE moderator_actions (
id BIGSERIAL PRIMARY KEY,
-- Модератор
moderator_id BIGINT NOT NULL REFERENCES users(id),
action_type moderator_action_type NOT NULL,
-- Целевые объекты (опционально, зависит от типа действия)
target_user_id BIGINT REFERENCES users(id),
target_request_id BIGINT REFERENCES requests(id),
target_complaint_id BIGINT REFERENCES complaints(id),
-- Детали действия
comment TEXT,
metadata JSONB, -- Дополнительные данные в формате JSON
-- Аудит
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Комментарии
COMMENT ON TABLE moderator_actions IS 'Полный аудит всех действий модераторов в системе';
COMMENT ON COLUMN moderator_actions.metadata IS 'Дополнительные данные в JSON (изменённые поля, причины и т.д.)';
-- Индексы
CREATE INDEX idx_moderator_actions_moderator_id ON moderator_actions(moderator_id);
CREATE INDEX idx_moderator_actions_action_type ON moderator_actions(action_type);
CREATE INDEX idx_moderator_actions_created_at ON moderator_actions(created_at DESC);
CREATE INDEX idx_moderator_actions_target_user_id ON moderator_actions(target_user_id) WHERE target_user_id IS NOT NULL;
CREATE INDEX idx_moderator_actions_target_request_id ON moderator_actions(target_request_id) WHERE target_request_id IS NOT NULL;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS moderator_actions CASCADE;
DROP TYPE IF EXISTS moderator_action_type CASCADE;
-- +goose StatementEnd