# Websockets: Overview

---

- [Introdução](#introducao)
- [Implementação](#implementacao)

<a name="introducao"></a>
## Introdução

O sistema e-Silobag utiliza do poder dos `websockets` através do Laravel Reverb para realizar comunicações em tempo real. A princípio utilizamos de forma centrada em notificações do sistema. Sendo essas notificações separadas em: globais; por empresa; por usuário.

<a name="implementacao"></a>
## Implementação

Conforme mencionado, a implementação dos websockets no sistema é feita através do pacote [Laravel Reverb](https://laravel.com/docs/11.x/reverb), que está otimizado para escalabilidade horizontal, caso seja necessário expandir a infraestrutura no futuro.

No que diz respeito à lógica de negócios, utilizamos o padrão de design Strategy para gerenciar as diferentes abordagens de envio de notificações. Foi criado um contrato chamado `NotificationStrategy`, que define o método ***handle*** para as estratégias de envio. As classes que implementam esse contrato são responsáveis por definir seu próprio método de envio de notificações.

A ação `CreateNotification` foi projetada para ser altamente flexível, permitindo a alternância entre diferentes estratégias de envio, com base nas necessidades específicas do sistema. Dessa forma, o envio de notificações se torna mais modular e facilmente adaptável a novos cenários ou alterações nos requisitos do sistema.

||CreateNotification|Exemplo de Uso|
||||
|<img src="{{ config('app.url').URL::signedRoute('private-storage', config('larecipe.url.create_notification.params'), null, false) }}" width="100%" />|<img src="{{ config('app.url').URL::signedRoute('private-storage', config('larecipe.url.create_notification_example.params'), null, false) }}" width="100%" />|