• File: ArticleSeeder.php
  • Full Path: /var/www/html/back/database/seeders/ArticleSeeder.php
  • File size: 2.14 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

declare(strict_types=1);

namespace Database\Seeders;

use App\Domain\Article\Requests\CreateArticleGroupRequest;
use App\Domain\Article\Requests\CreateArticleRequest;
use App\Domain\Article\Services\ArticleGroupService;
use App\Domain\Article\Services\ArticleService;
use App\Domain\Article\Enums\ArticleTypeEnum;
use App\Enums\ModelsEnum;
use App\Models\Article;
use Illuminate\Database\Seeder;

class ArticleSeeder extends Seeder
{

    public function createInitialArticle(): void
    {
        Article::query()->create(([
            'name' => 'Приход по кассе',
            'model_id' => 1,
            'article_group_id' => null,
            'article_type' => ArticleTypeEnum::ARTICLE_TYPE_CREDIT->value
        ]));
    }

    public function run(): void
    {
        $groupService = app()->make(ArticleGroupService::class);
        $groups = [];
        foreach (ModelsEnum::cases() as $case) {
            for ($i = 0; $i < 10; $i++) {
                $group = $groupService->create($case->value, new CreateArticleGroupRequest([
                    'name' => 'Группа статьи ' . $case->value . '-' . ($i + 1) . '-' . $case->value
                ]));
                $groups[$case->value][] = $group->id;
            }
        }

        $this->createInitialArticle();
        $articleService = app()->make(ArticleService::class);
        foreach (ModelsEnum::cases() as $case) {
            for ($i = 0; $i < 10; $i++) {
                $groupID = fake()->randomElement(array_merge($groups[$case->value], [null]));
                $articleType = fake()->randomElement([
                    ArticleTypeEnum::ARTICLE_TYPE_CREDIT->value,
                    ArticleTypeEnum::ARTICLE_TYPE_DEBIT->value,
                ]);
                $typePrefix = $articleType == ArticleTypeEnum::ARTICLE_TYPE_CREDIT->value ? 'д' : 'р';
                $group = $articleService->create($case->value, new CreateArticleRequest([
                    'name' => $typePrefix . ' ' . $case->value . '-' . ($i + 1),
                    'article_group_id' => $groupID,
                    'article_type' => $articleType
                ]));
            }
        }
    }
}