first commit

This commit is contained in:
amikhaylov
2026-05-27 10:57:53 +03:00
commit 4ebf4ec35f
66 changed files with 11269 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
namespace Database\Seeders;
use App\Models\ORM\Category;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class CategorySeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// Список ваших категорий
$categories = [
'Выставки',
'Детям',
'Квесты',
'Концерты и шоу',
'Лекции',
'Кинопоказы',
'Спорт',
'Мастер-классы',
'Спектакли',
'Прогулки',
'Экскурсии',
];
foreach ($categories as $name) {
// updateOrCreate предотвратит дублирование при повторном запуске
Category::updateOrCreate(
['slug' => Str::slug($name)], // Уникальный идентификатор (например, "koncerty-i-sou")
['name' => $name]
);
}
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents;
/**
* Seed the application's database.
*/
public function run(): void
{
// User::factory(10)->create();
// 1. Создаем фиксированного пользователя для тестирования API
$user = User::updateOrCreate(
['email' => 'test@example.com'],
[
'name' => 'Test API User',
'password' => Hash::make('password'), // Пароль для входа, если понадобится
]
);
// 2. Генерируем для него постоянный токен
// Сначала удаляем старые токены этого пользователя, чтобы не плодить дубликаты при повторном сидинге
$user->tokens()->delete();
// Создаем новый токен
$token = $user->createToken('postman-api-token');
// 3. Выводим токен прямо в консоль при запуске сидера, чтобы его можно было скопировать
$this->command->newLine();
$this->command->info('==================================================');
$this->command->info(' TEST USER BEARER TOKEN FOR POSTMAN / CURL: ');
$this->command->comment(' ' . $token->plainTextToken);
$this->command->info('==================================================');
$this->command->newLine();
$this->call([
CategorySeeder::class,
GigSeeder::class,
]);
}
}
+51
View File
@@ -0,0 +1,51 @@
<?php
declare(strict_types=1);
namespace Database\Seeders;
use App\Models\ORM\Category;
use App\Models\ORM\Gig;
use Illuminate\Database\Seeder;
class GigSeeder extends Seeder
{
public function run(): void
{
// 1. Получаем все существующие категории из базы
$categories = Category::all();
if ($categories->isEmpty()) {
$this->command->error('Категории не найдены. Сначала запустите CategorySeeder!');
return;
}
// 2. Генерируем 10 ПРОШЕДШИХ событий
$pastGigs = Gig::factory()
->count(10)
->past() // Используем состояние из фабрики
->create();
// 3. Генерируем 30 БУДУЩИХ событий
$futureGigs = Gig::factory()
->count(30)
->create();
// Объединяем коллекции для привязки категорий
$allGigs = $pastGigs->concat($futureGigs);
// 4. Привязываем категории, выполняя условия ТЗ
foreach ($allGigs as $index => $gig) {
// Чтобы ГАРАНТИРОВАННО задействовать ВСЕ категории:
// Первые 11 событий получат строго по одной уникальной категории из списка
if ($index < $categories->count()) {
$gig->categories()->attach($categories[$index]->id);
continue;
}
// Для всех остальных событий выбираем случайное количество случайных категорий (от 1 до 3)
$randomCategories = $categories->random(rand(1, 3))->pluck('id')->toArray();
$gig->categories()->attach($randomCategories);
}
}
}