Files
backend/migrations/00016_seed_initial_data.sql
2025-12-13 22:34:01 +05:00

188 lines
8.2 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- +goose Up
-- +goose StatementBegin
-- =========================================
-- НАЧАЛЬНЫЕ ДАННЫЕ: Роли
-- =========================================
INSERT INTO roles (name, description) VALUES
('requester', 'Маломобильный гражданин - может создавать заявки на помощь'),
('volunteer', 'Волонтёр - может откликаться на заявки и оказывать помощь'),
('moderator', 'Модератор - управляет системой, модерирует заявки и жалобы'),
('admin', 'Администратор - полный доступ ко всем функциям системы')
ON CONFLICT (name) DO NOTHING;
-- =========================================
-- НАЧАЛЬНЫЕ ДАННЫЕ: Разрешения
-- =========================================
-- Разрешения для заявок
INSERT INTO permissions (name, resource, action, description) VALUES
('request.create', 'request', 'create', 'Создание заявок на помощь'),
('request.read', 'request', 'read', 'Просмотр заявок'),
('request.read_all', 'request', 'read', 'Просмотр всех заявок (включая чужие)'),
('request.update_own', 'request', 'update', 'Редактирование своих заявок'),
('request.delete_own', 'request', 'delete', 'Удаление своих заявок'),
('request.moderate', 'request', 'moderate', 'Модерация заявок (одобрение/отклонение)'),
('request.delete_any', 'request', 'delete', 'Удаление любых заявок')
ON CONFLICT (name) DO NOTHING;
-- Разрешения для откликов волонтёров
INSERT INTO permissions (name, resource, action, description) VALUES
('volunteer_response.create', 'volunteer_response', 'create', 'Отклик на заявки'),
('volunteer_response.read', 'volunteer_response', 'read', 'Просмотр откликов'),
('volunteer_response.cancel', 'volunteer_response', 'delete', 'Отмена своего отклика')
ON CONFLICT (name) DO NOTHING;
-- Разрешения для рейтингов
INSERT INTO permissions (name, resource, action, description) VALUES
('rating.create', 'rating', 'create', 'Оставление рейтинга волонтёру'),
('rating.read', 'rating', 'read', 'Просмотр рейтингов'),
('rating.read_all', 'rating', 'read', 'Просмотр всех рейтингов')
ON CONFLICT (name) DO NOTHING;
-- Разрешения для жалоб
INSERT INTO permissions (name, resource, action, description) VALUES
('complaint.create', 'complaint', 'create', 'Подача жалобы на пользователя'),
('complaint.read_own', 'complaint', 'read', 'Просмотр своих жалоб'),
('complaint.moderate', 'complaint', 'moderate', 'Обработка жалоб модератором'),
('complaint.read_all', 'complaint', 'read', 'Просмотр всех жалоб')
ON CONFLICT (name) DO NOTHING;
-- Разрешения для пользователей
INSERT INTO permissions (name, resource, action, description) VALUES
('user.read_own', 'user', 'read', 'Просмотр своего профиля'),
('user.update_own', 'user', 'update', 'Редактирование своего профиля'),
('user.read_all', 'user', 'read', 'Просмотр всех пользователей'),
('user.block', 'user', 'block', 'Блокировка пользователей'),
('user.unblock', 'user', 'unblock', 'Разблокировка пользователей')
ON CONFLICT (name) DO NOTHING;
-- Разрешения для модераторских функций
INSERT INTO permissions (name, resource, action, description) VALUES
('moderator.view_logs', 'moderator_action', 'read', 'Просмотр логов модераторов'),
('moderator.view_statistics', 'statistics', 'read', 'Просмотр статистики системы')
ON CONFLICT (name) DO NOTHING;
-- =========================================
-- СВЯЗИ: Роли и Разрешения
-- =========================================
-- Разрешения для роли "requester" (маломобильный гражданин)
INSERT INTO role_permissions (role_id, permission_id)
SELECT
(SELECT id FROM roles WHERE name = 'requester'),
p.id
FROM permissions p
WHERE p.name IN (
'request.create',
'request.read',
'request.update_own',
'request.delete_own',
'rating.create',
'rating.read',
'complaint.create',
'complaint.read_own',
'user.read_own',
'user.update_own'
)
ON CONFLICT DO NOTHING;
-- Разрешения для роли "volunteer" (волонтёр)
INSERT INTO role_permissions (role_id, permission_id)
SELECT
(SELECT id FROM roles WHERE name = 'volunteer'),
p.id
FROM permissions p
WHERE p.name IN (
'request.read',
'volunteer_response.create',
'volunteer_response.read',
'volunteer_response.cancel',
'rating.read',
'complaint.create',
'complaint.read_own',
'user.read_own',
'user.update_own'
)
ON CONFLICT DO NOTHING;
-- Разрешения для роли "moderator" (модератор)
INSERT INTO role_permissions (role_id, permission_id)
SELECT
(SELECT id FROM roles WHERE name = 'moderator'),
p.id
FROM permissions p
WHERE p.name IN (
'request.read_all',
'request.moderate',
'request.delete_any',
'volunteer_response.read',
'rating.read_all',
'complaint.moderate',
'complaint.read_all',
'user.read_all',
'user.block',
'user.unblock',
'moderator.view_logs',
'moderator.view_statistics'
)
ON CONFLICT DO NOTHING;
-- Разрешения для роли "admin" (администратор) - все разрешения
INSERT INTO role_permissions (role_id, permission_id)
SELECT
(SELECT id FROM roles WHERE name = 'admin'),
p.id
FROM permissions p
ON CONFLICT DO NOTHING;
-- =========================================
-- НАЧАЛЬНЫЕ ДАННЫЕ: Типы заявок
-- =========================================
INSERT INTO request_types (name, description, icon, is_active) VALUES
('groceries', 'Покупка продуктов питания', 'shopping-cart', TRUE),
('medicine', 'Покупка медикаментов и средств гигиены', 'medical', TRUE),
('tech_help', 'Помощь с техникой и электроникой', 'laptop', TRUE),
('household', 'Помощь по хозяйству', 'home', TRUE),
('documents', 'Помощь с документами', 'file-text', TRUE),
('other', 'Другая помощь', 'help-circle', TRUE)
ON CONFLICT (name) DO NOTHING;
-- =========================================
-- ВЫВОД ИНФОРМАЦИИ О СОЗДАННЫХ ДАННЫХ
-- =========================================
DO $$
DECLARE
roles_count INTEGER;
permissions_count INTEGER;
role_permissions_count INTEGER;
request_types_count INTEGER;
BEGIN
SELECT COUNT(*) INTO roles_count FROM roles;
SELECT COUNT(*) INTO permissions_count FROM permissions;
SELECT COUNT(*) INTO role_permissions_count FROM role_permissions;
SELECT COUNT(*) INTO request_types_count FROM request_types;
RAISE NOTICE '===========================================';
RAISE NOTICE 'Начальные данные успешно загружены:';
RAISE NOTICE '===========================================';
RAISE NOTICE 'Ролей: %', roles_count;
RAISE NOTICE 'Разрешений: %', permissions_count;
RAISE NOTICE 'Связей роли-разрешения: %', role_permissions_count;
RAISE NOTICE 'Типов заявок: %', request_types_count;
RAISE NOTICE '===========================================';
END $$;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
-- Удаляем начальные данные (в обратном порядке из-за внешних ключей)
DELETE FROM role_permissions;
DELETE FROM request_types;
DELETE FROM permissions;
DELETE FROM roles;
-- +goose StatementEnd