This commit is contained in:
2026-04-06 18:44:02 +05:00
commit d775fbb9ba
431 changed files with 31234 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Brand;
use App\Models\Product;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\DB;
class BrandSeeder extends Seeder
{
public function run(): void
{
$this->cleanTables();
$brands = [
[
'name' => 'Royal Canin',
'slug' => 'royal-canin',
'description' => 'Премиальные корма для кошек и собак',
'country' => 'Франция',
'website' => 'https://www.royalcanin.com',
],
[
'name' => 'ABBA',
'slug' => 'abba',
'description' => 'Качественные корма для домашних животных',
'country' => 'Россия',
'website' => 'https://abba.ru',
],
[
'name' => 'RURRI',
'slug' => 'rurri',
'description' => 'Одежда и амуниция для собак',
'country' => 'Россия',
],
[
'name' => 'Ownat',
'slug' => 'ownat',
'description' => 'Натуральные корма премиум-класса',
'country' => 'Испания',
'website' => 'https://www.ownat.com',
],
[
'name' => 'Grandin',
'slug' => 'grandin',
'description' => 'Корма и лакомства для собак',
'country' => 'Россия',
],
];
foreach ($brands as $brandData) {
Brand::create($brandData);
}
$this->command->info('✅ Бренды созданы: ' . Brand::count());
}
private function cleanTables()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0');
DB::table('products')->truncate();
DB::table('brands')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS=1');
}
}

View File

@@ -0,0 +1,421 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Category;
use App\Models\Product;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\DB;
class CategorySeeder extends Seeder
{
public function run(): void
{
$this->cleanTables();
$categories = [
// ============================================
// ДЛЯ СОБАК
// ============================================
[
'name' => 'Для собак',
'slug' => 'dlya-sobak',
'sort_order' => 10,
'children' => [
// Корма для собак
[
'name' => 'Корма',
'slug' => 'korma-dlya-sobak',
'sort_order' => 10,
'children' => [
[
'name' => 'Сухие корма',
'slug' => 'suhie-korma',
'sort_order' => 10
],
[
'name' => 'Влажные корма',
'slug' => 'vlazhnye-korma',
'sort_order' => 20
],
[
'name' => 'Диетическое питание',
'slug' => 'dieticheskoe-pitanie',
'sort_order' => 30
],
]
],
// Амуниция для собак
[
'name' => 'Амуниция',
'slug' => 'amunitsiya',
'sort_order' => 20,
'children' => [
[
'name' => 'Ошейники и поводки',
'slug' => 'osheyniki-i-povodki',
'sort_order' => 10
],
[
'name' => 'Намордники',
'slug' => 'namordniki',
'sort_order' => 20
],
[
'name' => 'Шлейки',
'slug' => 'shleyki',
'sort_order' => 30
],
]
],
// Игрушки для собак
[
'name' => 'Игрушки',
'slug' => 'igrushki',
'sort_order' => 30,
'children' => [
[
'name' => 'Мячики и фрисби',
'slug' => 'myachiki-i-frisbi',
'sort_order' => 10
],
[
'name' => 'Канаты и кости',
'slug' => 'kanaty-i-kosti',
'sort_order' => 20
],
]
],
// Лежанки и домики
[
'name' => 'Лежанки и домики',
'slug' => 'lezhanki-i-domiki',
'sort_order' => 40,
'children' => [
[
'name' => 'Лежанки',
'slug' => 'lezhanki',
'sort_order' => 10
],
[
'name' => 'Домики',
'slug' => 'domiki',
'sort_order' => 20
],
]
],
// Миски и кормушки
[
'name' => 'Миски и кормушки',
'slug' => 'miski-i-kormushki',
'sort_order' => 50,
'children' => [
[
'name' => 'Миски',
'slug' => 'miski',
'sort_order' => 10
],
[
'name' => 'Автокормушки',
'slug' => 'avtokormushki',
'sort_order' => 20
],
]
],
]
],
// ============================================
// ДЛЯ КОШЕК
// ============================================
[
'name' => 'Для кошек',
'slug' => 'dlya-koshek',
'sort_order' => 20,
'children' => [
// Корма для кошек
[
'name' => 'Корма',
'slug' => 'korma-dlya-koshek',
'sort_order' => 10,
'children' => [
[
'name' => 'Сухие корма',
'slug' => 'suhie-korma-dlya-koshek',
'sort_order' => 10
],
[
'name' => 'Паучи и консервы',
'slug' => 'pauchi-i-konservy',
'sort_order' => 20
],
[
'name' => 'Лакомства',
'slug' => 'lakomstva-dlya-koshek',
'sort_order' => 30
],
]
],
// Наполнители
[
'name' => 'Наполнители',
'slug' => 'napolniteli',
'sort_order' => 20,
'children' => [
[
'name' => 'Древесные',
'slug' => 'drevesnye',
'sort_order' => 10
],
[
'name' => 'Силикагелевые',
'slug' => 'silikagelevye',
'sort_order' => 20
],
[
'name' => 'Комкующиеся',
'slug' => 'komkuyuschiesya',
'sort_order' => 30
],
]
],
// Когтеточки и домики
[
'name' => 'Когтеточки и домики',
'slug' => 'kogtetochki-i-domiki',
'sort_order' => 30,
'children' => [
[
'name' => 'Когтеточки',
'slug' => 'kogtetochki',
'sort_order' => 10
],
[
'name' => 'Лежанки для кошек',
'slug' => 'lezhanki-dlya-koshek',
'sort_order' => 20
],
[
'name' => 'Игровые комплексы',
'slug' => 'igrovye-kompleksy',
'sort_order' => 30
],
]
],
]
],
// ============================================
// ДЛЯ ГРЫЗУНОВ
// ============================================
[
'name' => 'Для грызунов',
'slug' => 'dlya-gryzunov',
'sort_order' => 30,
'children' => [
[
'name' => 'Корма',
'slug' => 'korma-dlya-gryzunov',
'sort_order' => 10,
'children' => [
[
'name' => 'Зерновые смеси',
'slug' => 'zernovye-smesi',
'sort_order' => 10
],
[
'name' => 'Сено и травы',
'slug' => 'seno-i-travy',
'sort_order' => 20
],
[
'name' => 'Лакомства',
'slug' => 'lakomstva-dlya-gryzunov',
'sort_order' => 30
],
]
],
[
'name' => 'Клетки и аксессуары',
'slug' => 'kletki-i-aksessuary',
'sort_order' => 20,
'children' => [
[
'name' => 'Клетки',
'slug' => 'kletki',
'sort_order' => 10
],
[
'name' => 'Поилки и миски',
'slug' => 'poilki-i-miski',
'sort_order' => 20
],
[
'name' => 'Наполнители',
'slug' => 'napolniteli-dlya-gryzunov',
'sort_order' => 30
],
]
],
]
],
// ============================================
// ДЛЯ ПТИЦ
// ============================================
[
'name' => 'Для птиц',
'slug' => 'dlya-ptic',
'sort_order' => 40,
'children' => [
[
'name' => 'Корма',
'slug' => 'korma-dlya-ptic',
'sort_order' => 10,
'children' => [
[
'name' => 'Корма для попугаев',
'slug' => 'korma-dlya-popugaev',
'sort_order' => 10
],
[
'name' => 'Корма для канареек',
'slug' => 'korma-dlya-kanareek',
'sort_order' => 20
],
[
'name' => 'Минеральные камни',
'slug' => 'mineralnye-kamni',
'sort_order' => 30
],
]
],
[
'name' => 'Аксессуары',
'slug' => 'aksessuary-dlya-ptic',
'sort_order' => 20,
'children' => [
[
'name' => 'Клетки и жердочки',
'slug' => 'kletki-i-zherdochki',
'sort_order' => 10
],
[
'name' => 'Игрушки для птиц',
'slug' => 'igrushki-dlya-ptic',
'sort_order' => 20
],
]
],
]
],
// ============================================
// ДЛЯ РЫБ
// ============================================
[
'name' => 'Для рыб',
'slug' => 'dlya-ryb',
'sort_order' => 50,
'children' => [
[
'name' => 'Корма для рыб',
'slug' => 'korma-dlya-ryb',
'sort_order' => 10
],
[
'name' => 'Аквариумы',
'slug' => 'akvariumy',
'sort_order' => 20
],
[
'name' => 'Фильтрация и помпы',
'slug' => 'filtratsiya-i-pompy',
'sort_order' => 30
],
[
'name' => 'Освещение',
'slug' => 'osveschenie',
'sort_order' => 40
],
[
'name' => 'Грунт и декор',
'slug' => 'grunt-i-dekor',
'sort_order' => 50
],
]
],
// ============================================
// ЗДОРОВЬЕ И УХОД
// ============================================
[
'name' => 'Здоровье и уход',
'slug' => 'zdorovie-i-uhod',
'sort_order' => 60,
'children' => [
[
'name' => 'Шампуни и косметика',
'slug' => 'shampuni-i-kosmetika',
'sort_order' => 10
],
[
'name' => 'Витамины и добавки',
'slug' => 'vitaminy-i-dobavki',
'sort_order' => 20
],
[
'name' => 'Средства от паразитов',
'slug' => 'sredstva-ot-parazitov',
'sort_order' => 30
],
[
'name' => 'Аптечка',
'slug' => 'aptechka',
'sort_order' => 40
],
[
'name' => 'Груминг',
'slug' => 'gruming',
'sort_order' => 50
],
]
],
];
foreach ($categories as $categoryData) {
$this->createCategoryWithChildren($categoryData);
}
$this->command->info('✅ Категории успешно созданы!');
$this->command->info('📊 Всего категорий: ' . Category::count());
}
private function cleanTables()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0');
DB::table('products')->truncate();
DB::table('categories')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS=1');
}
private function createCategoryWithChildren($data, $parentId = null)
{
$children = $data['children'] ?? [];
unset($data['children']);
$data['parent_id'] = $parentId;
$data['is_active'] = true;
$data['icon'] = $data['slug'] . '.svg';
$data['image'] = $data['slug'] . '.jpg';
$category = Category::create($data);
foreach ($children as $childData) {
$this->createCategoryWithChildren($childData, $category->id);
}
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call([
RolesAndPermissionsSeeder::class,
CategorySeeder::class,
BrandSeeder::class,
]);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,279 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Role;
use App\Models\Permission;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use function Symfony\Component\String\s;
class RolesAndPermissionsSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void {
$this->cleanTables();
$this->createPermissions();
$this->createRoles();
$this->assignPermissionsToRoles();
}
private function cleanTables()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0');
DB::table('permission_role')->truncate();
DB::table('role_user')->truncate();
DB::table('permissions')->truncate();
DB::table('roles')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS=1');
}
private function createPermissions()
{
$permissions = [
// ========== ЛИЧНЫЙ КАБИНЕТ ==========
[
'name' => 'Доступ в личный кабинет',
'slug' => 'cabinet_access',
'group' => 'cabinet',
'description' => 'Возможность входить в личный кабинет и просматривать свои данные'
],
// ========== ЗАКАЗЫ ==========
[
'name' => 'Просматривать заказы',
'slug' => 'view_orders',
'group' => 'orders',
'description' => 'Просмотр списка заказов'
],
[
'name' => 'Редактировать заказы',
'slug' => 'edit_orders',
'group' => 'orders',
'description' => 'Редактирование заказов (статус, удаление, подтверждение)'
],
[
'name' => 'Оформлять заказы',
'slug' => 'checkout',
'group' => 'orders',
'description' => 'Оформление заказов на сайте'
],
// ========== КОРЗИНА ==========
[
'name' => 'Управлять корзиной',
'slug' => 'manage_cart',
'group' => 'cart',
'description' => 'Добавление/удаление товаров из корзины'
],
// ========== ТОВАРЫ ==========
[
'name' => 'Добавлять товары',
'slug' => 'create_products',
'group' => 'products',
'description' => 'Создание новых товаров'
],
[
'name' => 'Редактировать товары',
'slug' => 'edit_products',
'group' => 'products',
'description' => 'Редактирование товаров'
],
[
'name' => 'Управлять количеством товара',
'slug' => 'manage_stock',
'group' => 'products',
'description' => 'Изменение остатков товаров на складе'
],
// ========== ПОЛЬЗОВАТЕЛИ ==========
[
'name' => 'Просматривать пользователей',
'slug' => 'view_users',
'group' => 'users',
'description' => 'Просмотр списка пользователей'
],
[
'name' => 'Создавать пользователей',
'slug' => 'create_users',
'group' => 'users',
'description' => 'Создание новых пользователей'
],
// ========== РОЛИ И ПРАВА ==========
[
'name' => 'Управлять ролями',
'slug' => 'manage_roles',
'group' => 'rbac',
'description' => 'Создание/редактирование ролей'
],
[
'name' => 'Управлять правами',
'slug' => 'manage_permissions',
'group' => 'rbac',
'description' => 'Создание/редактирование прав доступа'
],
// ========== МАГАЗИН ==========
[
'name' => 'Редактировать данные магазина',
'slug' => 'edit_shop_settings',
'group' => 'shop',
'description' => 'Изменение настроек магазина'
],
// ========== ДОСТУП В АДМИНКУ ==========
[
'name' => 'Доступ в админ-панель',
'slug' => 'admin_access',
'group' => 'admin',
'description' => 'Возможность входить в административную панель'
],
];
foreach ($permissions as $permission) {
Permission::firstOrCreate(
['slug' => $permission['slug']],
$permission
);
$this->command->info("✓ Создано право: {$permission['name']}");
}
}
private function createRoles()
{
$roles = [
[
'name' => 'Супер администратор',
'slug' => 'super_admin',
'description' => 'Полный доступ ко всем функциям системы (обходит все проверки прав)'
],
[
'name' => 'Администратор магазина',
'slug' => 'shop_admin',
'description' => 'Полное управление магазином, товарами и заказами'
],
[
'name' => 'Менеджер по товарам',
'slug' => 'product_manager',
'description' => 'Управление каталогом товаров'
],
[
'name' => 'Менеджер по заказам',
'slug' => 'order_manager',
'description' => 'Обработка заказов'
],
[
'name' => 'Кладовщик',
'slug' => 'warehouse_manager',
'description' => 'Управление остатками товаров'
],
[
'name' => 'Зарегистрированный пользователь',
'slug' => 'registered_user',
'description' => 'Обычный пользователь сайта'
],
];
foreach ($roles as $roleData) {
Role::firstOrCreate(
['slug' => $roleData['slug']],
$roleData
);
$this->command->info("✓ Создана роль: {$roleData['name']}");
}
}
private function assignPermissionsToRoles()
{
// ============================================
// АДМИНИСТРАТОР МАГАЗИНА
// ============================================
$shopAdmin = Role::where('slug', 'shop_admin')->first();
$shopAdmin->permissions()->sync(
Permission::whereIn('slug', [
'admin_access',
'cabinet_access',
'view_orders',
'edit_orders',
'checkout',
'manage_cart',
'create_products',
'edit_products',
'manage_stock',
'view_users',
'create_users',
'manage_roles',
'manage_permissions',
'edit_shop_settings',
])->pluck('id')
);
$this->command->info('✓ Назначены права для Администратора магазина');
// ============================================
// МЕНЕДЖЕР ПО ТОВАРАМ
// ============================================
$productManager = Role::where('slug', 'product_manager')->first();
$productManager->permissions()->sync(
Permission::whereIn('slug', [
'admin_access',
'cabinet_access',
'create_products',
'edit_products',
'view_orders',
])->pluck('id')
);
$this->command->info('✓ Назначены права для Менеджера по товарам');
// ============================================
// МЕНЕДЖЕР ПО ЗАКАЗАМ
// ============================================
$orderManager = Role::where('slug', 'order_manager')->first();
$orderManager->permissions()->sync(
Permission::whereIn('slug', [
'admin_access',
'cabinet_access',
'view_orders',
'edit_orders',
'checkout',
'view_users',
])->pluck('id')
);
$this->command->info('✓ Назначены права для Менеджера по заказам');
// ============================================
// КЛАДОВЩИК
// ============================================
$warehouseManager = Role::where('slug', 'warehouse_manager')->first();
$warehouseManager->permissions()->sync(
Permission::whereIn('slug', [
'admin_access',
'cabinet_access',
'manage_stock',
'view_orders',
])->pluck('id')
);
$this->command->info('✓ Назначены права для Кладовщика');
// ============================================
// ЗАРЕГИСТРИРОВАННЫЙ ПОЛЬЗОВАТЕЛЬ
// ============================================
$registeredUser = Role::where('slug', 'registered_user')->first();
$registeredUser->permissions()->sync(
Permission::whereIn('slug', [
'cabinet_access',
'manage_cart',
'checkout',
])->pluck('id')
);
$this->command->info('✓ Назначены права для Зарегистрированного пользователя');
}
}