61 lines
2.8 KiB
SQL
61 lines
2.8 KiB
SQL
-- +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
|