From e34d49b3f497edc0b8ffcee5e9360e648f4dd138 Mon Sep 17 00:00:00 2001 From: F4ilji Date: Mon, 11 Aug 2025 22:25:25 +0500 Subject: [PATCH] add SlideFactory to Slide model and update DatabaseSeeder to include SlideSeeder for improved data seeding --- .../Widget/Data/Factories/SlideFactory.php | 44 +++++++++ .../Widget/Data/Seeders/SlideSeeder.php | 33 +++++++ app/Containers/Widget/Models/Slide.php | 6 ++ app/Ship/Seeders/ContactWidgetSeeder.php | 96 +++++++++++++++++++ app/Ship/Seeders/PageReferenceListSeeder.php | 38 ++++++++ app/Ship/Seeders/SliderSeeder.php | 26 +++++ database/seeders/DatabaseSeeder.php | 32 +++++-- 7 files changed, 266 insertions(+), 9 deletions(-) create mode 100644 app/Containers/Widget/Data/Factories/SlideFactory.php create mode 100644 app/Containers/Widget/Data/Seeders/SlideSeeder.php create mode 100644 app/Ship/Seeders/ContactWidgetSeeder.php create mode 100644 app/Ship/Seeders/PageReferenceListSeeder.php create mode 100644 app/Ship/Seeders/SliderSeeder.php diff --git a/app/Containers/Widget/Data/Factories/SlideFactory.php b/app/Containers/Widget/Data/Factories/SlideFactory.php new file mode 100644 index 0000000..91b679c --- /dev/null +++ b/app/Containers/Widget/Data/Factories/SlideFactory.php @@ -0,0 +1,44 @@ + + */ +class SlideFactory extends Factory +{ + + protected $model = Slide::class; + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'title' => $this->faker->sentence(3), + 'content' => $this->faker->paragraph(2), + 'image' => json_encode([ + 'url' => '/public/img/thumbnail-1.png', + 'shading' => $this->faker->randomFloat(1, 0, 1) + ]), + 'link' => '/news/' . $this->faker->slug, + 'settings' => json_encode([ + 'text_position' => $this->faker->randomElement(['center', 'left', 'right']), + 'link_text' => $this->faker->word, + ]), + 'color_theme' => $this->faker->safeColorName, + 'is_active' => $this->faker->boolean(80), // 80% шанс, что будет true + 'start_time' => $this->faker->dateTimeBetween('-1 week', '+1 week'), + 'end_time' => $this->faker->dateTimeBetween('+1 week', '+2 weeks'), + 'sort' => $this->faker->numberBetween(1, 10), + // slider_id будет установлен в сидере + 'slidable_id' => null, + 'slidable_type' => null, + ]; + } +} diff --git a/app/Containers/Widget/Data/Seeders/SlideSeeder.php b/app/Containers/Widget/Data/Seeders/SlideSeeder.php new file mode 100644 index 0000000..382921e --- /dev/null +++ b/app/Containers/Widget/Data/Seeders/SlideSeeder.php @@ -0,0 +1,33 @@ +id)->delete(); + + // Создаем 5 случайных слайдов, используя фабрику + Slide::factory() + ->count(5) + ->for($slider) // Устанавливаем связь с родительской моделью Slider + ->create(); } +} diff --git a/app/Containers/Widget/Models/Slide.php b/app/Containers/Widget/Models/Slide.php index 51846c4..e1913f4 100644 --- a/app/Containers/Widget/Models/Slide.php +++ b/app/Containers/Widget/Models/Slide.php @@ -2,6 +2,7 @@ namespace App\Containers\Widget\Models; +use App\Containers\Widget\Data\Factories\SlideFactory; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -26,4 +27,9 @@ class Slide extends Model { return $this->morphTo(); } + + protected static function newFactory() + { + return SlideFactory::new(); + } } diff --git a/app/Ship/Seeders/ContactWidgetSeeder.php b/app/Ship/Seeders/ContactWidgetSeeder.php new file mode 100644 index 0000000..8a31598 --- /dev/null +++ b/app/Ship/Seeders/ContactWidgetSeeder.php @@ -0,0 +1,96 @@ + 1, + 'title' => 'Главная страница контакты', + 'slug' => 'glavnaia-stranica-kontakty', + 'content' => [ + [ + "title" => "Контакты", + "items" => [ + [ + "header" => "Главный корпус", + "details" => [ + [ + "content" => "622031, Свердловская обл. Нижний Тагил ул. Красногвардейская, 57", + "url" => null + ] + ] + ], + [ + "header" => "Свяжитесь с нами", + "details" => [ + [ + "content" => "(3435) 25-48-00", + "url" => null + ], + [ + "content" => "office@ntspi.ru", + "url" => null + ] + ] + ] + ] + ], + [ + "title" => "Приемная комиссия", + "items" => [ + [ + "header" => "Расписание", + "details" => [ + [ + "content" => "Понедельник - Пятница с 08.30 до 17.00", + "url" => null + ] + ] + ] + ] + ], + [ + "title" => "Полезное", + "items" => [ + [ + "header" => "Главный корпус", + "details" => [ + [ + "content" => "Виртуальный тур", + "url" => "https://ntspi.ru/panorama/tour.html" + ] + ] + ], + [ + "header" => "Корпус ФХО", + "details" => [ + [ + "content" => "Проспект Мира, 25", + "url" => null + ] + ] + ] + ] + ] + ], + 'is_active' => 1, + 'created_at' => '2025-01-09 12:50:17', + 'updated_at' => '2025-05-20 09:18:46', + ]; + + ContactWidget::create($data); + } +} \ No newline at end of file diff --git a/app/Ship/Seeders/PageReferenceListSeeder.php b/app/Ship/Seeders/PageReferenceListSeeder.php new file mode 100644 index 0000000..8bca69c --- /dev/null +++ b/app/Ship/Seeders/PageReferenceListSeeder.php @@ -0,0 +1,38 @@ + 1, + 'title' => 'Главная страница ресурс', + 'slug' => 'glavnaia-stranica-resurs', + 'content' => array( + ['model_select' => null, 'title' => 'Система Moodle НТГСПИ', 'image' => [], 'icon' => 'heroicon-o-academic-cap', 'link' => 'https://do.ntspi.ru/', 'link_text' => 'Перейти'], + ['model_select' => null, 'title' => 'ЭИОС', 'image' => [], 'icon' => 'heroicon-o-computer-desktop', 'link' => 'https://eios.rsvpu.ru/', 'link_text' => 'Перейти'], + ['model_select' => 'Custom', 'title' => 'Группа Вконтакте', 'image' => [], 'icon' => 'heroicon-c-user-group', 'link' => 'https://vk.com/ntspi', 'link_text' => 'Читать', 'content' => null], + ['model_select' => 'Custom', 'title' => 'Книга почёта', 'image' => [], 'link' => 'http://book.ntspi.ru/', 'link_text' => 'Смотреть', 'content' => null, 'icon' => 'heroicon-o-book-open'], + ['model_select' => 'Custom', 'title' => 'Поступление в ВУЗ онлайн', 'image' => [], 'link' => 'https://minobrnauki.gov.ru/press-center/news/novosti-ministerstva/50667/', 'link_text' => 'Читать', 'content' => null, 'icon' => 'heroicon-o-globe-alt'], + ['model_select' => 'Custom', 'title' => 'Интернет олимпиады', 'image' => [], 'link' => 'https://olymp.i-exam.ru/', 'link_text' => 'Читать', 'content' => null, 'icon' => 'heroicon-o-cursor-arrow-rays'], + ['model_select' => 'Custom', 'title' => 'РЕЕСТР рекомендуемых образовательных цифровых сервисов для использования в программах подготовки педагогических кадров', 'image' => [], 'link' => 'https://new.ntspi.ru/storage/files/reestr.pdf', 'link_text' => 'Смотреть', 'content' => null, 'icon' => 'heroicon-o-table-cells'] + ), + 'is_active' => 1, + 'created_at' => '2025-01-09 09:37:27', + 'updated_at' => '2025-05-23 18:57:38', + ]; + + PageReferenceList::create($data); + } +} diff --git a/app/Ship/Seeders/SliderSeeder.php b/app/Ship/Seeders/SliderSeeder.php new file mode 100644 index 0000000..03eaef4 --- /dev/null +++ b/app/Ship/Seeders/SliderSeeder.php @@ -0,0 +1,26 @@ + 1, + 'title' => 'quos-velit-quisquam', + 'slug' => 'quos-velit-quisquam', + 'is_active' => 1, + 'created_at' => '2025-04-02 22:08:34', + 'updated_at' => '2025-04-02 22:08:34', + ]); } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index b468eba..6c27ba2 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -6,6 +6,10 @@ use App\Containers\InstituteStructure\Models\Faculty; use App\Containers\Article\Models\Post; use App\Containers\Schedule\Models\EducationalGroup; use App\Containers\Schedule\Models\Schedule; +use App\Containers\Widget\Data\Seeders\SlideSeeder; +use App\Ship\Seeders\ContactWidgetSeeder; +use App\Ship\Seeders\PageReferenceListSeeder; +use App\Ship\Seeders\SliderSeeder; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder @@ -14,6 +18,16 @@ class DatabaseSeeder extends Seeder public function run(): void { + + $this->call([ + ContactWidgetSeeder::class, + PageReferenceListSeeder::class, + SliderSeeder::class, + SlideSeeder::class, + ]); + + + // $faker = Factory::create(); // User::create([ // 'name' => 'Failj', @@ -24,18 +38,18 @@ class DatabaseSeeder extends Seeder // User::factory()->count(50)->has(UserDetail::factory())->create(); // EventCategory::factory()->count(10)->create(); // Category::factory()->count(80)->create(); - Post::factory()->count(1000)->create(); +// Post::factory()->count(1000)->create(); // Event::factory()->count(200)->create(); - $faculties = Faculty::factory()->count(6)->create(); +// $faculties = Faculty::factory()->count(6)->create(); // Затем создаем 40 групп, распределяя их по созданным факультетам - EducationalGroup::factory() - ->count(40) - ->sequence(fn () => [ - 'faculty_id' => $faculties->random()->id - ]) - ->has(Schedule::factory()->count(90 / 40)) // Распределяем 90 расписаний по 40 группам - ->create(); +// EducationalGroup::factory() +// ->count(40) +// ->sequence(fn () => [ +// 'faculty_id' => $faculties->random()->id +// ]) +// ->has(Schedule::factory()->count(90 / 40)) // Распределяем 90 расписаний по 40 группам +// ->create(); // Department::factory()->count(12)->create(); // // for ($i = 0; $i < 20; $i++) {