initial commit

This commit is contained in:
2025-11-29 00:28:21 +05:00
parent 46229acc82
commit ec3b03a935
76 changed files with 13492 additions and 0 deletions

View File

@@ -0,0 +1,187 @@
-- +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