initial commit
This commit is contained in:
60
migrations/00009_create_moderator_actions_table.sql
Normal file
60
migrations/00009_create_moderator_actions_table.sql
Normal 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
|
||||
Reference in New Issue
Block a user