98 lines
2.9 KiB
PHP
98 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App\Endpoint\Api\Http\Controllers;
|
|
|
|
use App\Endpoint\Api\Http\Resources\MessageResource;
|
|
use App\Exceptions\BizException;
|
|
use App\Helpers\Paginator as PaginatorHelper;
|
|
use App\Models\Message;
|
|
use App\Models\MessageReadLog;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Throwable;
|
|
|
|
class MessageController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$list = Message::userMessages($request->user())->with(['logs'=>function ($q) use ($request) {
|
|
return $q->where('user_id', '=', $request->user()->id);
|
|
}])->simplePaginate(PaginatorHelper::resolvePerPage('per_page', 20, 50));
|
|
return MessageResource::collection($list);
|
|
}
|
|
|
|
/**
|
|
* 确认消息
|
|
*
|
|
* @param Request $request
|
|
* @return void
|
|
*/
|
|
public function read($id, Request $request)
|
|
{
|
|
$message = Message::userMessages($request->user())->findOrFail($id);
|
|
if (MessageReadLog::where('message_id', $message->id)->exists()) {
|
|
throw new BizException('该消息已确认,无需重复操作');
|
|
}
|
|
|
|
MessageReadLog::create([
|
|
'user_id' => $request->user()->id,
|
|
'message_id' => $message->id,
|
|
]);
|
|
|
|
return response()->noContent();
|
|
}
|
|
|
|
/**
|
|
* 批量已读
|
|
* 只有系统消息才能批量已读
|
|
*
|
|
* @param Request $request
|
|
* @return void
|
|
*/
|
|
public function batchRead(Request $request)
|
|
{
|
|
$ids = Message::with('logs')->where('user_id', 0)->whereDoesntHave('logs', function ($q) use ($request) {
|
|
return $q->where('user_id', '=', $request->user()->id);
|
|
})->pluck('id')->toArray();
|
|
|
|
if (count($ids) > 0) {
|
|
try {
|
|
DB::beginTransaction();
|
|
MessageReadLog::insert(array_map(function ($value) use ($request) {
|
|
return [
|
|
'user_id' => $request->user()->id,
|
|
'message_id' => $value,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
];
|
|
}, $ids));
|
|
DB::commit();
|
|
} catch (Throwable $th) {
|
|
DB::rollBack();
|
|
report($th);
|
|
throw new BizException('操作失败,请稍后再试');
|
|
}
|
|
}
|
|
|
|
return response()->noContent();
|
|
}
|
|
|
|
/**
|
|
* 待读条数
|
|
*
|
|
* @param Request $request
|
|
* @return void
|
|
*/
|
|
public function waitReadNum(Request $request)
|
|
{
|
|
// $num = 0;
|
|
$num = Message::userMessages($request->user())->with('logs')
|
|
->whereDoesntHave('logs', function ($q) use ($request) {
|
|
return $q->where('user_id', '=', $request->user()->id);
|
|
})->count();
|
|
return response()->json([
|
|
'num' => $num,
|
|
]);
|
|
}
|
|
}
|