Forum: - TipTap WYSIWYG editor with full toolbar - @emoji-mart/react emoji picker (consistent with tweets) - @mention autocomplete with user search API - Fix PHP 8.4 parse errors in Blade templates - Fix thread data display (paginator items) - Align forum page widths to max-w-5xl Discover: - Extract shared _nav.blade.php partial - Add missing nav links to for-you page - Add Following link for authenticated users Feed/Posts: - Post model, controllers, policies, migrations - Feed page components (PostComposer, FeedCard, etc) - Post reactions, comments, saves, reports, sharing - Scheduled publishing support - Link preview controller Profile: - Profile page components (ProfileHero, ProfileTabs) - Profile API controller Uploads: - Upload wizard enhancements - Scheduled publish picker - Studio status bar and readiness checklist
69 lines
1.8 KiB
PHP
69 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Posts;
|
|
|
|
use App\Models\Post;
|
|
use App\Models\PostComment;
|
|
use App\Models\PostReaction;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
/**
|
|
* Maintains cached counter columns on the posts table.
|
|
* Called from controllers when reactions/comments are created or deleted.
|
|
*/
|
|
class PostCountersService
|
|
{
|
|
public function incrementReactions(Post $post): void
|
|
{
|
|
$post->increment('reactions_count');
|
|
}
|
|
|
|
public function decrementReactions(Post $post): void
|
|
{
|
|
DB::table('posts')
|
|
->where('id', $post->id)
|
|
->where('reactions_count', '>', 0)
|
|
->decrement('reactions_count');
|
|
}
|
|
|
|
public function incrementComments(Post $post): void
|
|
{
|
|
$post->increment('comments_count');
|
|
}
|
|
|
|
public function decrementComments(Post $post): void
|
|
{
|
|
DB::table('posts')
|
|
->where('id', $post->id)
|
|
->where('comments_count', '>', 0)
|
|
->decrement('comments_count');
|
|
}
|
|
|
|
/**
|
|
* Recompute both counters from scratch (repair tool).
|
|
*/
|
|
public function recompute(Post $post): void
|
|
{
|
|
Post::withoutTimestamps(function () use ($post) {
|
|
$post->update([
|
|
'reactions_count' => PostReaction::where('post_id', $post->id)->count(),
|
|
'comments_count' => PostComment::where('post_id', $post->id)->whereNull('deleted_at')->count(),
|
|
'saves_count' => \App\Models\PostSave::where('post_id', $post->id)->count(),
|
|
]);
|
|
});
|
|
}
|
|
|
|
public function incrementSaves(Post $post): void
|
|
{
|
|
$post->increment('saves_count');
|
|
}
|
|
|
|
public function decrementSaves(Post $post): void
|
|
{
|
|
DB::table('posts')
|
|
->where('id', $post->id)
|
|
->where('saves_count', '>', 0)
|
|
->decrement('saves_count');
|
|
}
|
|
}
|