user : User::findOrFail($userId); return $user->notifications()->paginate($request->query('per_page', 50)); } /** * Display a specific notification * * @param int $userId * @param int $notificationId * @return JsonResponse */ public function view(int $userId, $notificationId) { $discordUser = DiscordUser::find($userId); $user = $discordUser ? $discordUser->user : User::findOrFail($userId); $notification = $user->notifications()->where('id', $notificationId)->get()->first(); if (! $notification) { return response()->json(['message' => 'Notification not found.'], 404); } return $notification; } /** * Send a notification to an user. * * @param Request $request * @return JsonResponse * * @throws ValidationException */ public function send(Request $request) { $data = $request->validate([ 'via' => ['required', new Delimited('in:mail,database')], 'all' => 'required_without:users|boolean', 'users' => ['required_without:all'], 'title' => 'required|string|min:1', 'content' => 'required|string|min:1', ]); $via = explode(',', $data['via']); $mail = null; $database = null; if (in_array('database', $via)) { $database = [ 'title' => $data['title'], 'content' => $data['content'], ]; } if (in_array('mail', $via)) { $mail = (new MailMessage) ->subject($data['title']) ->line(new HtmlString($data['content'])); } $all = $data['all'] ?? false; if ($all) { $users = User::all(); } else { $userIds = explode(',', $data['users']); $users = User::query() ->whereIn('id', $userIds) ->orWhereHas('discordUser', function (Builder $builder) use ($userIds) { $builder->whereIn('id', $userIds); }) ->get(); } if ($users->count() == 0) { throw ValidationException::withMessages([ 'users' => ['No users found!'], ]); } Notification::send($users, new DynamicNotification($via, $database, $mail)); return response()->json(['message' => 'Notification successfully sent.', 'user_count' => $users->count()]); } /** * Delete all notifications from an user * * @param int $userId * @return JsonResponse */ public function delete(int $userId) { $discordUser = DiscordUser::find($userId); $user = $discordUser ? $discordUser->user : User::findOrFail($userId); $count = $user->notifications()->delete(); return response()->json(['message' => 'All notifications have been successfully deleted.', 'count' => $count]); } /** * Delete a specific notification * * @param int $userId * @param int $notificationId * @return JsonResponse */ public function deleteOne(int $userId, $notificationid) { $discordUser = DiscordUser::find($userId); $user = $discordUser ? $discordUser->user : User::findOrFail($userId); $notification = $user->notifications()->where('id', $notificationid)->get()->first(); if (! $notification) { return response()->json(['message' => 'Notification not found.'], 404); } $notification->delete(); return response()->json($notification); } }