mirror of
https://github.com/HDInnovations/UNIT3D-Community-Edition.git
synced 2026-04-23 11:39:19 -05:00
refactor: inline some single-use chat repository methods into chat api
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
asciify
|
||||
dontBackupDatabases
|
||||
dontBackupFilesystem
|
||||
htmlify
|
||||
lexify
|
||||
swal
|
||||
swal
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace App\Http\Controllers\API;
|
||||
use App\Bots\NerdBot;
|
||||
use App\Bots\SystemBot;
|
||||
use App\Events\Chatter;
|
||||
use App\Events\MessageDeleted;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\BotResource;
|
||||
use App\Http\Resources\ChatMessageResource;
|
||||
@@ -26,6 +27,8 @@ use App\Http\Resources\ChatRoomResource;
|
||||
use App\Http\Resources\UserAudibleResource;
|
||||
use App\Http\Resources\UserEchoResource;
|
||||
use App\Models\Bot;
|
||||
use App\Models\Chatroom;
|
||||
use App\Models\ChatStatus;
|
||||
use App\Models\Message;
|
||||
use App\Models\User;
|
||||
use App\Models\UserAudible;
|
||||
@@ -49,55 +52,63 @@ class ChatController extends Controller
|
||||
/* STATUSES */
|
||||
public function statuses(): \Illuminate\Http\JsonResponse
|
||||
{
|
||||
return response()->json($this->chatRepository->statuses());
|
||||
return response()->json(ChatStatus::all());
|
||||
}
|
||||
|
||||
/* ECHOES */
|
||||
public function echoes(Request $request): \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
{
|
||||
$user = $request->user()->load(['echoes']);
|
||||
$echoes = UserEcho::query()
|
||||
->whereBelongsTo($request->user())
|
||||
->with(['bot', 'user', 'target', 'room'])
|
||||
->oldest('id')
|
||||
->get();
|
||||
|
||||
if ($user->echoes->isEmpty()) {
|
||||
$userEcho = new UserEcho();
|
||||
$userEcho->user_id = $request->user()->id;
|
||||
$userEcho->room_id = 1;
|
||||
$userEcho->save();
|
||||
if ($echoes->isEmpty()) {
|
||||
$echoes->push(UserEcho::create([
|
||||
'user_id' => $request->user()->id,
|
||||
'room_id' => 1,
|
||||
]));
|
||||
}
|
||||
|
||||
return UserEchoResource::collection($this->chatRepository->echoes($request->user()->id));
|
||||
return UserEchoResource::collection($echoes);
|
||||
}
|
||||
|
||||
/* AUDIBLES */
|
||||
public function audibles(Request $request): \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
{
|
||||
$user = $request->user()->load(['audibles']);
|
||||
$audibles = UserAudible::query()
|
||||
->whereBelongsTo($request->user())
|
||||
->with(['bot', 'user', 'target', 'room'])
|
||||
->latest()
|
||||
->get();
|
||||
|
||||
if ($user->audibles->isEmpty()) {
|
||||
$userAudible = new UserAudible();
|
||||
$userAudible->user_id = $request->user()->id;
|
||||
$userAudible->room_id = 1;
|
||||
$userAudible->status = true;
|
||||
$userAudible->save();
|
||||
if ($audibles->isEmpty()) {
|
||||
$audibles->prepend(UserAudible::create([
|
||||
'user_id' => $request->user()->id,
|
||||
'room_id' => 1,
|
||||
'status' => true,
|
||||
]));
|
||||
}
|
||||
|
||||
return UserAudibleResource::collection($this->chatRepository->audibles($request->user()->id));
|
||||
return UserAudibleResource::collection($audibles);
|
||||
}
|
||||
|
||||
/* BOTS */
|
||||
public function bots(): \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
{
|
||||
return BotResource::collection($this->chatRepository->bots());
|
||||
return BotResource::collection(Bot::all());
|
||||
}
|
||||
|
||||
/* ROOMS */
|
||||
public function rooms(): \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
{
|
||||
return ChatRoomResource::collection($this->chatRepository->rooms());
|
||||
return ChatRoomResource::collection(Chatroom::all());
|
||||
}
|
||||
|
||||
public function config(): \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
{
|
||||
return response($this->chatRepository->config());
|
||||
return response(config('chat'));
|
||||
}
|
||||
|
||||
/* MESSAGES */
|
||||
@@ -303,7 +314,9 @@ class ChatController extends Controller
|
||||
|
||||
abort_if($changedByStaff && !$request->user()->group->is_owner && $request->user()->group->level <= $message->user->group->level, 403);
|
||||
|
||||
$this->chatRepository->deleteMessage($id);
|
||||
broadcast(new MessageDeleted($message));
|
||||
|
||||
$message->delete();
|
||||
|
||||
return response('success');
|
||||
}
|
||||
@@ -311,10 +324,10 @@ class ChatController extends Controller
|
||||
public function deleteRoomEcho(Request $request): \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
{
|
||||
$user = $request->user();
|
||||
UserEcho::where('user_id', '=', $user->id)->where('room_id', '=', $request->input('room_id'))->delete();
|
||||
UserEcho::where('user_id', '=', $user->id)->where('room_id', '=', $request->integer('room_id'))->delete();
|
||||
|
||||
$user->load(['chatStatus', 'chatroom', 'group', 'echoes']);
|
||||
$room = $this->chatRepository->roomFindOrFail($request->input('room_id'));
|
||||
$room = Chatroom::findOrFail($request->integer('room_id'));
|
||||
|
||||
$user->chatroom()->dissociate();
|
||||
$user->chatroom()->associate($room);
|
||||
@@ -424,7 +437,7 @@ class ChatController extends Controller
|
||||
{
|
||||
$user = $request->user();
|
||||
$user->load(['chatStatus', 'chatroom', 'group', 'echoes']);
|
||||
$status = $this->chatRepository->statusFindOrFail($request->input('status_id'));
|
||||
$status = ChatStatus::findOrFail($request->integer('status_id'));
|
||||
|
||||
$this->chatRepository->systemMessage('[url=/users/'.$user->username.']'.$user->username.'[/url] has updated their status to [b]'.$status->name.'[/b]');
|
||||
|
||||
@@ -439,7 +452,7 @@ class ChatController extends Controller
|
||||
{
|
||||
$user = $request->user();
|
||||
$user->load(['chatStatus', 'chatroom', 'group', 'echoes']);
|
||||
$room = $this->chatRepository->roomFindOrFail($request->input('room_id'));
|
||||
$room = Chatroom::findOrFail($request->integer('room_id'));
|
||||
|
||||
$user->chatroom()->dissociate();
|
||||
$user->chatroom()->associate($room);
|
||||
|
||||
@@ -17,7 +17,6 @@ declare(strict_types=1);
|
||||
namespace App\Repositories;
|
||||
|
||||
use App\Events\Chatter;
|
||||
use App\Events\MessageDeleted;
|
||||
use App\Events\MessageSent;
|
||||
use App\Http\Resources\ChatMessageResource;
|
||||
use App\Models\Bot;
|
||||
@@ -25,8 +24,6 @@ use App\Models\Chatroom;
|
||||
use App\Models\ChatStatus;
|
||||
use App\Models\Message;
|
||||
use App\Models\User;
|
||||
use App\Models\UserAudible;
|
||||
use App\Models\UserEcho;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ChatRepository
|
||||
@@ -34,76 +31,16 @@ class ChatRepository
|
||||
/**
|
||||
* ChatRepository Constructor.
|
||||
*/
|
||||
public function __construct(private readonly Message $message, private readonly Chatroom $chatroom, private readonly ChatStatus $chatStatus, private readonly User $user, private readonly Bot $bot, private readonly UserEcho $userEcho, private readonly UserAudible $userAudible)
|
||||
public function __construct(private readonly Message $message, private readonly Chatroom $chatroom, private readonly ChatStatus $chatStatus, private readonly User $user)
|
||||
{
|
||||
}
|
||||
|
||||
public function config(): mixed
|
||||
{
|
||||
return config('chat');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Database\Eloquent\Collection<int, Bot>
|
||||
*/
|
||||
public function bots(): \Illuminate\Database\Eloquent\Collection
|
||||
{
|
||||
return $this->bot->all();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Database\Eloquent\Collection<int, UserEcho>
|
||||
*/
|
||||
public function echoes(int $userId): \Illuminate\Database\Eloquent\Collection
|
||||
{
|
||||
return $this->userEcho->with([
|
||||
'bot',
|
||||
'user',
|
||||
'target',
|
||||
'room',
|
||||
])
|
||||
->where('user_id', '=', $userId)
|
||||
->oldest('id')
|
||||
->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Database\Eloquent\Collection<int, UserAudible>
|
||||
*/
|
||||
public function audibles(int $userId): \Illuminate\Database\Eloquent\Collection
|
||||
{
|
||||
return $this->userAudible->with([
|
||||
'bot',
|
||||
'user',
|
||||
'target',
|
||||
'room',
|
||||
])
|
||||
->where('user_id', '=', $userId)
|
||||
->latest()
|
||||
->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Database\Eloquent\Collection<int, Chatroom>
|
||||
*/
|
||||
public function rooms(): \Illuminate\Database\Eloquent\Collection
|
||||
{
|
||||
return $this->chatroom->all();
|
||||
}
|
||||
|
||||
public function roomFindOrFail(int $id): Chatroom
|
||||
{
|
||||
return $this->chatroom->findOrFail($id);
|
||||
}
|
||||
|
||||
public function message(int $userId, int $roomId, string $message, ?int $receiver = null, ?int $bot = null): Message
|
||||
{
|
||||
if ($this->user->find($userId)->settings->censor) {
|
||||
$message = $this->censorMessage($message);
|
||||
}
|
||||
|
||||
$message = $this->htmlifyMessage($message);
|
||||
|
||||
$message = $this->message->create([
|
||||
'user_id' => $userId,
|
||||
'chatroom_id' => $roomId,
|
||||
@@ -127,7 +64,6 @@ class ChatRepository
|
||||
$message = $this->censorMessage($message);
|
||||
}
|
||||
|
||||
$message = $this->htmlifyMessage($message);
|
||||
$save = $this->message->create([
|
||||
'bot_id' => $botId,
|
||||
'user_id' => 1,
|
||||
@@ -155,8 +91,6 @@ class ChatRepository
|
||||
$message = $this->censorMessage($message);
|
||||
}
|
||||
|
||||
$message = $this->htmlifyMessage($message);
|
||||
|
||||
$save = $this->message->create([
|
||||
'user_id' => $userId,
|
||||
'chatroom_id' => 0,
|
||||
@@ -186,17 +120,6 @@ class ChatRepository
|
||||
return $message;
|
||||
}
|
||||
|
||||
public function deleteMessage(int $id): void
|
||||
{
|
||||
$message = $this->message->find($id);
|
||||
|
||||
if ($message) {
|
||||
broadcast(new MessageDeleted($message));
|
||||
|
||||
$message->delete();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Database\Eloquent\Collection<int, Message>
|
||||
*/
|
||||
@@ -315,14 +238,6 @@ class ChatRepository
|
||||
return $room;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Database\Eloquent\Collection<int, ChatStatus>
|
||||
*/
|
||||
public function statuses(): \Illuminate\Database\Eloquent\Collection
|
||||
{
|
||||
return $this->chatStatus->all();
|
||||
}
|
||||
|
||||
public function status(int|User $user): ?ChatStatus
|
||||
{
|
||||
$status = null;
|
||||
@@ -338,11 +253,6 @@ class ChatRepository
|
||||
return $status;
|
||||
}
|
||||
|
||||
public function statusFindOrFail(int $id): ChatStatus
|
||||
{
|
||||
return $this->chatStatus->findOrFail($id);
|
||||
}
|
||||
|
||||
protected function censorMessage(string $message): string
|
||||
{
|
||||
foreach (config('censor.redact') as $word) {
|
||||
@@ -359,9 +269,4 @@ class ChatRepository
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
protected function htmlifyMessage(string $message): string
|
||||
{
|
||||
return $message;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user