get('page_size') ?? 10; $notifications = Notification::query() ->filter($request->all()) ->join("notification_records", "notifications.id", "=", "notification_records.notification_id") ->where("notification_records.user_id", Auth::id()) ->selectRaw("notifications.*,notification_records.read_at") ->orderByDesc("created_at") ->paginate($pageSize); make_display_id($notifications,$pageSize); return new NotificationCollection($notifications); } /** * 标记为已读 * * @param Request $request * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response */ public function markAsRead(Request $request) { $ids = $request->get("ids"); if (! $ids) { return $this->badRequest("Data is empty"); } NotificationRecord::query() ->where("user_id", Auth::id()) ->whereIn("notification_id", $ids) ->whereNull("read_at") ->update([ 'read_at' => Carbon::now(), ]); return $this->noContent(); } /** * 未读消息 * * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection */ public function unread(Request $request) { $pageSize=$request->get('page_size') ?? 10; $announcements = Notification::query() ->leftJoin("notification_records", "notifications.id", "=", "notification_records.notification_id") ->where("notification_records.user_id", Auth::id()) ->where("notifications.status", NotificationStatus::RELEASE) ->where("notifications.start_at", "<", Carbon::now()) ->where(fn($query) => $query->where("notifications.end_at", ">", Carbon::now())->orWhereNull("notifications.end_at")) ->whereNull("notification_records.id") ->selectRaw("notifications.id") ->get(); foreach ($announcements as $announcement) { NotificationRecord::query()->firstOrCreate([ 'notification_id' => $announcement->id, 'user_id' => Auth::id() ]); } $notifications = Notification::query() ->join("notification_records", "notifications.id", "=", "notification_records.notification_id") ->where("notification_records.user_id", Auth::id()) ->whereNull("notification_records.read_at") ->selectRaw("notifications.*,notification_records.read_at") ->orderByDesc("created_at") ->paginate($pageSize); return NotificationResource::collection($notifications); } }