feat: add Post model, migration, and factory
Adds the Post model belonging to Site (required, cascade-deletes with the site) and SocialAccount (nullable, nulled out on account delete). Foundation for the Scheduled Posts feature; later tasks build the Livewire CRUD UI and API on top of this model. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
4293475ce1
commit
f746c5d6a0
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\Post;
|
||||
use App\Models\Site;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
class PostFactory extends Factory
|
||||
{
|
||||
protected $model = Post::class;
|
||||
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
'site_id' => Site::factory(),
|
||||
'social_account_id' => null,
|
||||
'type' => fake()->randomElement(Post::TYPES),
|
||||
'title' => fake()->optional()->sentence(),
|
||||
'body' => fake()->paragraph(),
|
||||
'status' => fake()->randomElement(Post::STATUSES),
|
||||
'scheduled_at' => fake()->optional()->dateTimeBetween('now', '+1 month'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('posts', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('site_id')->constrained()->cascadeOnDelete();
|
||||
$table->foreignId('social_account_id')->nullable()->constrained()->nullOnDelete();
|
||||
$table->enum('type', [
|
||||
'twitter', 'instagram', 'facebook', 'reddit',
|
||||
'tiktok', 'linkedin', 'youtube', 'blog', 'other',
|
||||
]);
|
||||
$table->string('title')->nullable();
|
||||
$table->text('body');
|
||||
$table->enum('status', ['draft', 'scheduled', 'published', 'failed'])->default('draft');
|
||||
$table->timestamp('scheduled_at')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('posts');
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user