-- +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