-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #6 from coralsio/support-api
support api and laravel reverb
- Loading branch information
Showing
31 changed files
with
910 additions
and
55 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -42,5 +42,8 @@ | |
] | ||
} | ||
}, | ||
"minimum-stability": "dev" | ||
"minimum-stability": "dev", | ||
"require": { | ||
"laravel/reverb": "@beta" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
<?php | ||
|
||
namespace Corals\Modules\Messaging\DataTables\Scopes; | ||
|
||
use Illuminate\Database\Eloquent\Builder as EloquentBuilder; | ||
|
||
class DiscussionSearchScope | ||
{ | ||
/** | ||
* @param EloquentBuilder $query | ||
* @param $column | ||
* @param $value | ||
*/ | ||
public function apply(EloquentBuilder $query, $column, $value): void | ||
{ | ||
$query->whereHas('participations.participable', function (EloquentBuilder $q) use ($value) { | ||
$q->when(user(), fn(EloquentBuilder $q) => $q->where('users.id', '<>', user()->id)) | ||
->whereAny(['users.name', 'users.last_name', 'email'], 'like', "%$value%"); | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
<?php | ||
|
||
namespace Corals\Modules\Messaging\Events; | ||
|
||
use Corals\Modules\Messaging\Models\Message; | ||
use Corals\Modules\Messaging\Transformers\API\MessagePresenter; | ||
use Illuminate\Broadcasting\InteractsWithSockets; | ||
use Illuminate\Broadcasting\PrivateChannel; | ||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; | ||
use Illuminate\Foundation\Events\Dispatchable; | ||
use Illuminate\Queue\SerializesModels; | ||
|
||
class MessageReceived implements ShouldBroadcast | ||
{ | ||
|
||
use Dispatchable, InteractsWithSockets, SerializesModels; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
public $queue = 'messaging-queue'; | ||
|
||
/** | ||
* Create a new event instance. | ||
*/ | ||
public function __construct(protected Message $message) | ||
{ | ||
} | ||
|
||
/** | ||
* Get the channels the event should broadcast on. | ||
* | ||
* @return array<int, \Illuminate\Broadcasting\Channel> | ||
*/ | ||
public function broadcastOn(): array | ||
{ | ||
$channels = []; | ||
|
||
foreach ($this->message->recipients as $participation) { | ||
$channels[] = new PrivateChannel(sprintf( | ||
'messages.%s', | ||
$participation->participable->id | ||
)); | ||
} | ||
|
||
return $channels; | ||
} | ||
|
||
/** | ||
* @return array | ||
* @throws \Exception | ||
*/ | ||
public function broadcastWith(): array | ||
{ | ||
return (new MessagePresenter)->present($this->message)['data']; | ||
} | ||
|
||
/** | ||
* @return string | ||
*/ | ||
public function broadcastAs(): string | ||
{ | ||
return 'message.received'; | ||
} | ||
|
||
/** | ||
* @return bool | ||
*/ | ||
public function broadcastWhen(): bool | ||
{ | ||
return $this->message->status <> 'draft'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
<?php | ||
|
||
namespace Corals\Modules\Messaging\Http\Controllers\API; | ||
|
||
use Corals\Foundation\Http\Controllers\APIBaseController; | ||
use Corals\Foundation\Models\BaseModel; | ||
use Corals\Foundation\Search\Search; | ||
use Corals\Modules\Messaging\DataTables\DiscussionsDataTable; | ||
use Corals\Modules\Messaging\Http\Requests\DiscussionRequest; | ||
use Corals\Modules\Messaging\Models\Discussion; | ||
use Corals\Modules\Messaging\Models\Message; | ||
use Corals\Modules\Messaging\Services\DiscussionService; | ||
use Corals\Modules\Messaging\Transformers\API\DiscussionPresenter; | ||
use Corals\User\Models\User; | ||
use Illuminate\Database\Eloquent\Builder; | ||
use Illuminate\Http\Request; | ||
|
||
class DiscussionsController extends APIBaseController | ||
{ | ||
/** | ||
* DiscussionsController constructor. | ||
* @param DiscussionService $discussionService | ||
*/ | ||
public function __construct(protected DiscussionService $discussionService) | ||
{ | ||
$this->discussionService->setPresenter(new DiscussionPresenter); | ||
parent::__construct(); | ||
} | ||
|
||
/** | ||
* @param DiscussionRequest $request | ||
* @param DiscussionsDataTable $dataTable | ||
* @return mixed | ||
*/ | ||
public function index(DiscussionRequest $request, DiscussionsDataTable $dataTable) | ||
{ | ||
|
||
$query = $dataTable->query(new Discussion, $request->get('last_msg_created_at')); | ||
|
||
return $this->discussionService->index($query, $dataTable); | ||
} | ||
|
||
/** | ||
* @param DiscussionRequest $request | ||
* @param Discussion $discussion | ||
* @return \Illuminate\Http\JsonResponse | ||
*/ | ||
public function show(DiscussionRequest $request, Discussion $discussion) | ||
{ | ||
try { | ||
return apiResponse($this->discussionService->getModelDetails($discussion)); | ||
} catch (\Exception $e) { | ||
return apiExceptionResponse($e); | ||
} | ||
} | ||
|
||
/** | ||
* @param Request $request | ||
* @param Discussion $discussion | ||
* @return \Illuminate\Http\JsonResponse | ||
*/ | ||
public function markAsRead(Request $request, Discussion $discussion) | ||
{ | ||
try { | ||
return apiResponse($this->discussionService->markAsRead($discussion)); | ||
} catch (\Exception $e) { | ||
return apiExceptionResponse($e); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
<?php | ||
|
||
|
||
namespace Corals\Modules\Messaging\Http\Controllers\API; | ||
|
||
use Corals\Foundation\Http\Controllers\APIBaseController; | ||
use Corals\Modules\Messaging\Http\Requests\MessageRequest; | ||
use Corals\Modules\Messaging\Models\Message; | ||
use Corals\Modules\Messaging\Services\MessageService; | ||
use Corals\Modules\Messaging\Transformers\API\MessagePresenter; | ||
use Illuminate\Http\Request; | ||
|
||
class MessageController extends APIBaseController | ||
{ | ||
/** | ||
* MessageController constructor. | ||
* @param MessageService $messageService | ||
*/ | ||
public function __construct(protected MessageService $messageService) | ||
{ | ||
$this->messageService->setPresenter(new MessagePresenter); | ||
parent::__construct(); | ||
} | ||
|
||
/** | ||
* @param MessageRequest $request | ||
* @param Message $message | ||
* @return \Illuminate\Http\JsonResponse|mixed | ||
*/ | ||
public function fetchMoreMessages(MessageRequest $request, Message $message) | ||
{ | ||
try { | ||
return $this->messageService->fetchMoreMessages($message); | ||
} catch (\Exception $e) { | ||
return apiExceptionResponse($e); | ||
} | ||
} | ||
|
||
/** | ||
* @param MessageRequest $request | ||
* @return \Illuminate\Http\JsonResponse | ||
*/ | ||
public function store(MessageRequest $request) | ||
{ | ||
try { | ||
|
||
$message = $this->messageService->store($request, Message::class); | ||
|
||
return apiResponse($this->messageService->getModelDetails(), trans('Corals::messages.success.created', [ | ||
'item' => 'message' | ||
])); | ||
|
||
} catch (\Exception $exception) { | ||
return apiExceptionResponse($exception); | ||
} | ||
} | ||
|
||
/** | ||
* @param Request $request | ||
* @param Message $message | ||
* @return \Illuminate\Http\JsonResponse | ||
*/ | ||
public function broadcastMessage(Request $request, Message $message) | ||
{ | ||
try { | ||
return apiResponse($this->messageService->broadcastMessage($message)); | ||
} catch (\Exception $e) { | ||
return apiExceptionResponse($e); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.