## Teste Tecnico: Desenvolvimento de uma Aplicação de Chat em Tempo Real com PHP e Laravel (ou qualquer outra lang) ### Introdução Neste desafio, você será responsável por desenvolver uma aplicação de chat em tempo real utilizando PHP e o framework Laravel. A aplicação deve oferecer funcionalidades básicas similares às encontradas em plataformas de chat como o Discord. O foco principal é a criação de um backend robusto e escalável, utilizando as abstrações e boas práticas do Laravel. ### Requisitos do Projeto #### Funcionalidades Principais 1. **Autenticação de Usuários** - Cadastro e login de usuários com autenticação em Laravel Sanctum. - **Entidades**: User 2. **Criação de Servidores** - Usuários podem criar servidores de chat. - **Entidades**: Guild 3. **Canais de Texto** - Cada servidor pode ter múltiplos canais de texto. - Mensagens podem ser enviadas e recebidas em tempo real. - **Entidades:** Channel 4. **Mensagens em Tempo Real** - Implementação de mensagens em tempo real utilizando Laravel Echo e websockets. - **Entidades:** Message 5. **Perfis de Usuários** - Cada usuário possui um perfil. - Exibição de informações básicas do perfil, como: - nome de usuário - quantidade de servidores que ele possui - quantidade de mensagens enviadas - data de criação ### Rotas da aplicação | Método | Rota | Descrição | |---------|--------------------------------------------------------|----------------------------------------------| | GET | /login | Página de Login/Senha | | GET | /register | Página de Registro | | POST | /auth/register | Cria um usuário | | POST | /auth/login | Faz login de um usuário | | GET | /user | Retorna o usuário autenticado | | GET | /guilds | Retorna todos os servidores disponíveis | | POST | /guilds | Cria um novo servidor | | DELETE | /guilds/{guildId} | Deleta um servidor | | GET | /guilds/{guildId} | Lista as salas de um servidor | | POST | /guilds/{guildId}/channels | Cria um novo canal dentro de um servidor | | GET | /guilds/{guildId}/channels/{channelId} | Entra em um canal e começa a escutar as mensagens | | POST | /guilds/{guildId}/channels/{channelId}/messages | Envia uma mensagem para um canal específico | | DELETE | /guilds/{guildId}/channels/{channelId}/messages/{messageId} | Deleta uma mensagem em um canal específico | ### Requisitos Técnicos 1. **Backend** - PHP 8.3 - Laravel 11 - Banco de dados: SQLite - Pacotes: Laravel Sanctum (Bonus: Laravel Reverb) 2. **Frontend** - Laravel Blade + TailwindCSS. 4. **Documentação e Testes** - Documentação da API utilizando Swagger ou outro framework de documentação. - **BONUS:** Testes de Integração ### Critérios de Avaliação 1. **Qualidade do Código** - Estrutura e organização do código. - Uso de abstrações: - Service - Repositories - Jobs/Broadcast 2. **Funcionalidade** - Implementação completa das funcionalidades descritas. 3. **Documentação** - Clareza e completude da documentação. - Instruções claras para configuração e execução do projeto. 4. **Inovação** - Funcionalidades adicionais ou melhorias que não foram especificadas, mas agregam valor ao projeto. ### Entrega Assim que iniciar o projeto, faça um commit com a base do projeto (framework) e crie uma nova branch pro seu desafio. Abra um Pull Request com o desafio e mande o link no e-mail abaixo. - **Repositório Git**: O código deve estar disponível em um repositório Git (GitHub, GitLab, etc.) e publico. - **Instruções**: Um arquivo README.md com instruções detalhadas sobre como configurar e executar o projeto. - **Entrega**: Envie o código para [danielhe4rt@gmail.com](mailto:danielhe4rt@gmail.com) com o assunto "Teste Tecnico: Discord por (seu nome)" - **Prazo**: indefinido! . Boa sorte e bom desenvolvimento!! :D ### Materiais de Apoio - [Artigo: Como o Discord migrou TRILHOES de Mensagens](https://discord.com/blog/how-discord-stores-trillions-of-messages) - [Curso: Laravel4Noobs](https://udemy.com/laravel4noobs) - [Doc: SOLID4Noobs](https://github.com/danielhe4rt/solid4noobs) - [Artigo: Criando Exceptions para impressionar no teste técnico](https://dev.to/he4rt/criando-exceptions-para-impressionar-no-teste-tecnico-2nie) - [Artigo: Era SOLID o que me faltava!](https://dev.to/clintonrocha98/era-solid-o-que-me-faltava-bhp)