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