belongsTo(User::class); } public function video() { return $this->belongsTo(Video::class)->withDefault(); } public function reactions() { return $this->hasMany(PostReaction::class); } public function postImages() { return $this->hasMany(PostImage::class)->orderBy('sort_order'); } public function postVideos() { return $this->hasMany(PostVideo::class)->with('video')->orderBy('sort_order'); } public function isLikedBy(?User $user): bool { if (! $user) return false; return $this->reactions()->where('user_id', $user->id)->exists(); } public function getReactionCountAttribute(): int { return $this->reactions()->count(); } public function getImageUrlAttribute(): ?string { return $this->image ? asset('storage/post_images/' . $this->image) : null; } }