You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pixelfed/app/Http/Controllers/LikeController.php

75 lines
2.3 KiB
PHTML

<?php
namespace App\Http\Controllers;
use App\Jobs\LikePipeline\LikePipeline;
use App\Jobs\LikePipeline\UnlikePipeline;
use App\Models\Like;
use App\Models\Status;
9 months ago
use App\Services\StatusService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cache;
class LikeController extends Controller
{
9 months ago
public function __construct()
{
$this->middleware('auth');
}
9 months ago
public function store(Request $request)
{
$this->validate($request, [
'item' => 'required|integer|min:1',
]);
9 months ago
abort(422, 'Deprecated API Endpoint');
9 months ago
$user = Auth::user();
$profile = $user->profile;
$status = Status::findOrFail($request->input('item'));
9 months ago
if (Like::whereStatusId($status->id)->whereProfileId($profile->id)->exists()) {
$like = Like::whereProfileId($profile->id)->whereStatusId($status->id)->firstOrFail();
UnlikePipeline::dispatch($like)->onQueue('feed');
} else {
abort_if(
Like::whereProfileId($user->profile_id)
->where('created_at', '>', now()->subDay())
->count() >= Like::MAX_PER_DAY,
429
);
$count = $status->likes_count > 4 ? $status->likes_count : $status->likes()->count();
$like = Like::firstOrCreate([
'profile_id' => $user->profile_id,
'status_id' => $status->id,
]);
if ($like->wasRecentlyCreated == true) {
$count++;
$status->likes_count = $count;
$like->status_profile_id = $status->profile_id;
$like->is_comment = in_array($status->type, [
'photo',
'photo:album',
'video',
'video:album',
'photo:video:album',
6 days ago
]) === false;
9 months ago
$like->save();
$status->save();
LikePipeline::dispatch($like)->onQueue('feed');
}
}
9 months ago
Cache::forget('status:'.$status->id.':likedby:userid:'.$user->id);
StatusService::refresh($status->id);
9 months ago
if ($request->ajax()) {
6 days ago
return ['code' => 200, 'msg' => 'Like saved', 'count' => 0];
9 months ago
}
8 years ago
6 days ago
return redirect($status->url());
9 months ago
}
}