42 lines
1.5 KiB
PHP
42 lines
1.5 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace Database\Factories;
|
||
|
|
|
||
|
|
use App\Models\Deal;
|
||
|
|
use App\Models\Project;
|
||
|
|
use App\Models\Tenant;
|
||
|
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
||
|
|
use Illuminate\Support\Carbon;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @extends Factory<Deal>
|
||
|
|
*/
|
||
|
|
class DealFactory extends Factory
|
||
|
|
{
|
||
|
|
public function definition(): array
|
||
|
|
{
|
||
|
|
// received_at в текущем месяце — попадает в стартовую партицию deals_2026_05.
|
||
|
|
// В тестах при выходе за границы существующих партиций нужно явно
|
||
|
|
// указывать ->state(['received_at' => ...]).
|
||
|
|
// tenant_id и project_id создаются независимыми factories (deals НЕ имеет
|
||
|
|
// FK на tenants/projects из-за партиционирования). Тесты, требующие
|
||
|
|
// согласованности, передают tenant_id и project_id явно.
|
||
|
|
return [
|
||
|
|
'tenant_id' => Tenant::factory(),
|
||
|
|
'project_id' => Project::factory(),
|
||
|
|
'source_crm_id' => fake()->unique()->numberBetween(100_000_000, 999_999_999),
|
||
|
|
'phone' => '7'.fake()->numerify('##########'),
|
||
|
|
'phones' => null,
|
||
|
|
'status' => 'new',
|
||
|
|
'contact_name' => fake()->firstName(),
|
||
|
|
'comment' => null,
|
||
|
|
'manager_id' => null,
|
||
|
|
'escalated_count' => 0,
|
||
|
|
'is_test' => false,
|
||
|
|
'received_at' => Carbon::now(),
|
||
|
|
];
|
||
|
|
}
|
||
|
|
}
|