82 lines
2.3 KiB
PHP
82 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace Database\Factories;
|
|
|
|
use App\Models\Article;
|
|
use App\Models\Feed;
|
|
use App\Models\PlatformChannel;
|
|
use App\Models\Route;
|
|
use App\Models\RouteArticle;
|
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
|
|
|
class RouteArticleFactory extends Factory
|
|
{
|
|
protected $model = RouteArticle::class;
|
|
|
|
public function definition(): array
|
|
{
|
|
return [
|
|
'feed_id' => Feed::factory(),
|
|
'platform_channel_id' => PlatformChannel::factory(),
|
|
'article_id' => Article::factory(),
|
|
'approval_status' => 'pending',
|
|
'validated_at' => null,
|
|
];
|
|
}
|
|
|
|
public function configure(): static
|
|
{
|
|
return $this->afterMaking(function (RouteArticle $routeArticle) {
|
|
// Ensure a route exists for this feed+channel combination
|
|
Route::firstOrCreate(
|
|
[
|
|
'feed_id' => $routeArticle->feed_id,
|
|
'platform_channel_id' => $routeArticle->platform_channel_id,
|
|
],
|
|
[
|
|
'is_active' => true,
|
|
'priority' => 50,
|
|
]
|
|
);
|
|
|
|
// Ensure the article belongs to the same feed
|
|
if ($routeArticle->article_id) {
|
|
$article = Article::find($routeArticle->article_id);
|
|
if ($article && $article->feed_id !== $routeArticle->feed_id) {
|
|
$article->update(['feed_id' => $routeArticle->feed_id]);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
public function forRoute(Route $route): static
|
|
{
|
|
return $this->state(fn (array $attributes) => [
|
|
'feed_id' => $route->feed_id,
|
|
'platform_channel_id' => $route->platform_channel_id,
|
|
]);
|
|
}
|
|
|
|
public function pending(): static
|
|
{
|
|
return $this->state(fn (array $attributes) => [
|
|
'approval_status' => 'pending',
|
|
]);
|
|
}
|
|
|
|
public function approved(): static
|
|
{
|
|
return $this->state(fn (array $attributes) => [
|
|
'approval_status' => 'approved',
|
|
'validated_at' => now(),
|
|
]);
|
|
}
|
|
|
|
public function rejected(): static
|
|
{
|
|
return $this->state(fn (array $attributes) => [
|
|
'approval_status' => 'rejected',
|
|
'validated_at' => now(),
|
|
]);
|
|
}
|
|
}
|