<?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
]));
}
}
}
}