O projeto se concentra na recriação do Jellyfish Backend, um componente crítico do aplicativo de mensagens Jellyfish projetado para plataformas Android e iOS. O back-end é meticulosamente desenvolvido seguindo os princípios de design orientado a domínio e arquitetura limpa. A comunicação dentro do sistema é orquestrada usando a biblioteca Meditr, enfatizando a separação comando-consulta (CQS) para maior clareza do código e separação de preocupações.
Embora a implantação atual opere como um monólito, a arquitetura é inerentemente flexível. Ele pode se adaptar rapidamente a um paradigma de microsserviços com a incorporação de ferramentas como gateways de API (por exemplo, Ocelot, YARP), segregação de responsabilidade de consulta de comando (CQRS) e processos de sincronização de banco de dados em segundo plano. Este último emprega bloqueio otimista com controle de versão de linha para garantir consistência entre bancos de dados de leitura e gravação.
Antecipando melhorias futuras, a arquitetura prevê a implementação de comunicação assíncrona por meio de AMQP sobre RabbitMQ. Isso capacitará o sistema a lidar com eventos de maneira eficiente por meio de filas, estabelecendo as bases para comportamentos robustos de publicação/assinatura.
Pilha de tecnologia
Back-end
Front-end da Web
Aplicativo Móvel
C#/NET 7
C#/NET 7
C#/NET 7
REDE ASP
Servidor Blazor
.NET MAUI
MySQL 8.0.35
Componentes de navalha
SinalR
Componentes da interface do usuário do Mudblazor (https://mudblazor.com/)
Docker
Núcleo EF
Teste
Abordagem de teste unitário:
O teste unitário é uma prática fundamental aplicada neste projeto para verificar a correção e funcionalidade de métodos e fluxos de processos. Embora se reconheça que nem todos os métodos são testados individualmente, é adotada uma abordagem equilibrada. O princípio é evitar o excesso de engenharia e de testes, encontrando um meio-termo que garanta que os processos e métodos críticos sejam exaustivamente testados.
O comportamento do teste unitário segue a metodologia padrão arrange, act, assertion , que é uma abordagem comum e eficaz em testes de software. Esta metodologia fornece uma estrutura estruturada para configurar as condições de teste, executar a ação específica e validar os resultados esperados.
Teste ponta a ponta com Postman:
Os testes ponta a ponta são conduzidos usando o Postman, aproveitando a documentação da API Swagger gerada e importada. Postman serve como uma ferramenta poderosa para testes abrangentes de API, permitindo a verificação de toda a funcionalidade do sistema. A integração da documentação da API Swagger aumenta a eficiência do processo de teste, fornecendo uma interface clara e interativa para explorar e validar endpoints de API.
Documentação
Documentação extensa:
O projeto coloca uma forte ênfase na documentação abrangente para facilitar a facilidade de uso e compreensão para todas as partes interessadas. Atualmente, a documentação inclui:
Documentação do Diagrama Entidade-Relacionamento (EER):
Uma documentação EER detalhada foi preparada para fornecer insights sobre o modelo de dados e os relacionamentos dentro do sistema. Esta documentação serve como um recurso valioso para desenvolvedores, auxiliando na compreensão clara da estrutura subjacente do banco de dados.
Documentação do Swagger:
O projeto aproveita a documentação do Swagger para garantir documentação de API detalhada e interativa. Swagger fornece uma interface intuitiva e fácil de usar para explorar e compreender os endpoints, parâmetros e respostas da API disponíveis. Esta documentação é essencial para desenvolvedores, permitindo integração e interação perfeitas com as APIs fornecidas.
Implantação
Legado sobre binário ou com contêiner docker.
Motivação e objetivos do projeto
Testando NET MAUI em várias plataformas móveis:
A principal motivação por trás do início deste projeto é testar rigorosamente o NET MAUI em várias plataformas móveis. Isso envolve testes e otimização abrangentes para garantir desempenho e compatibilidade perfeitos nas plataformas especificadas, contribuindo com insights valiosos para a comunidade NET MAUI.
Capacitando os usuários a hospedar sua própria infraestrutura de mensagens:
Um dos principais objetivos deste projeto é capacitar os usuários, proporcionando-lhes a oportunidade de hospedar sua infraestrutura de mensagens de forma independente. O objetivo é democratizar a acessibilidade dos serviços de mensagens, permitindo que os usuários assumam o controle do seu ambiente de comunicação.
Utilização ideal de recursos:
Um efeito colateral digno de nota desta iniciativa é o foco em permitir a hospedagem de infraestrutura de mensagens com recursos mínimos de hardware. Especificamente, o projeto visa a utilização eficiente, permitindo que os usuários executem a infraestrutura em hardware acessível como Raspberry Pi. Esta ênfase na eficiência dos recursos está alinhada com o compromisso do projeto com a acessibilidade e a sustentabilidade.
Segurança e recursos futuros
Criptografia ponta a ponta e proteção de privacidade:
Garantir a segurança dos dados do usuário é fundamental. As próximas etapas antes do lançamento da primeira versão de produção incluirão a implementação meticulosa da criptografia ponta a ponta. Isso fornecerá uma camada robusta de proteção para informações confidenciais do usuário. Além disso, a adoção do padrão de carga útil esquecível aumentará ainda mais a privacidade, minimizando a retenção de dados, alinhando-se às melhores práticas de privacidade.
Bots de suporte de IA:
Abraçando o futuro da interação do usuário, há planos para integrar bots de suporte de inteligência artificial (IA) ao sistema. É considerada a utilização de tecnologias avançadas de IA, como Google Llama ou ChatGPT. Esses bots orientados por IA aumentarão o envolvimento do usuário, simplificarão os processos de suporte e contribuirão para uma experiência de usuário inteligente e responsiva.
Infraestrutura Blockchain:
Explorando tecnologias de ponta, há uma visão prospectiva para investigar a viabilidade de hospedar a infraestrutura do sistema no blockchain. Os benefícios da tecnologia blockchain, incluindo maior segurança, descentralização e transparência, serão avaliados. Esta abordagem inovadora visa preparar o sistema para o futuro e alinhá-lo com as tendências emergentes em arquiteturas seguras e descentralizadas.
Pendência
Back-end:
Docker.compose para JellyfishBackend, PostgreSql
RateLimiter para ações específicas
IModelBinder+IModelBinderProvider para HttpQuery e HttpBody para resolver e validar dados que estão dentro de 'ApiDataTransferObject'
CRUD + Filtro de pesquisa (transição de solicitação http (json) para modelo de filtro dto para expressão linq para sql)
Expressões Linq para sql: substituir/criar operadores em objetos de valor e modelos de domínio e traduzi-los em expressões linq
Funcionalidade de cache (atualmente IMemoryCache)
Endpoint de redefinição de senha: Habilite a redefinição de senha por meio do recurso "Editar usuário"; mudança de lógica de domínio: UpdateUser, comando updateuser + atualização do manipulador.
Criptografia de senha no banco de dados com método de criptografia de melhores práticas
Autenticação/Autorização: Combine dados Jwt (reivindicações etc.) com o banco de dados
Acione eventos se as declarações de token não corresponderem às funções do banco de dados ou se a localização do IP (Geo IP para IPv4+v6 ou User-Agent diferente da criação do token) for muito diferente. Notifique os usuários por e-mail.
Upload de arquivos/fotos de perfil de usuário/anexos de mensagens ou mídia de água-viva/estratégia de armazenamento: Evite armazenar no banco de dados por motivos de desempenho. Implemente a estratégia de cache, crie cache durante o início do back-end. Realize verificações de vírus usando conteúdo e um serviço externo de IA (Azure= link, AWS) para detectar uploads de mídia/pornografia violenta.
Cadeia de responsabilidade por vírus e conteúdo inadmissível/violento (abstração implementada)
Domínio: implemente verificações de lógica de negócios de bate-papo.
GDPR: Módulo para GDPR para disponibilizar todas as ações do GDPR (relatórios, exclusão etc.)
Implementação de solicitações de apresentação/infraestrutura/aplicação de bate-papo/mensagem/amizade de entidade de domínio: Utilize SignalR para notificar usuários alvo, etc.
Carga útil esquecível -> GDPR (alemão: DSGVO).
Criptografia ponta a ponta para usuários do Jellyfish. Sequência: Os usuários que irão interagir entre si compartilharão as Chaves Públicas. Quando uma mensagem for criada pelo Usuário-A, a mensagem será criptografada com a chave pública do Usuário-B. A mensagem será enviada para o backend e será armazenada (criptografada) no banco de dados. O usuário B recebeu a mensagem pelo sinalizador ou pesquisa todas as mensagens não reconhecidas do backend (pesquisa por reconexão, quando a conexão termina, por exemplo, conexão perdida com a célula de rádio). O usuário B confirma a mensagem para o backend (o rake recebido será mostrado no aplicativo do usuário A). O usuário B descriptografa a mensagem com a chave privada.
Excluir mensagens que foram entregues com sucesso ao destino
Criptografia SSL para back-end.
Documentação do Swagger
Reescreva algumas mensagens de resposta padrão do ASP.NET Core com um filtro: por exemplo, erro HTTP 422 ou resposta não autorizada -> reescreva para resposta de erro JSONAPI ----------> Presentation.Extension.JsonApiResultExtension.
FluentValidation: Prepare validadores com tratamento de resposta para resposta de erro JSONAPI devido a erros de validação. CommandHandlerValidators já implementados: ValidationPipelineBehavior; apenas a regra de validação precisa de definição nos construtores de cada CommandValidation.
Implementações de contexto delimitador de bate-papo:
POST: /api/v1/chat, Criar chat (somente com amigos, os requisitos de lógica de domínio definiram a regra de que um chat precisa de pelo menos uma mensagem para existir)
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio (estado de conclusão removido devido à regra de Novo Negócio)
Implementação
Teste (teste unitário)
GET: /api/v1/chat/{chatId}, obtém o bate-papo
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
PUT: /api/v1/chat/{chatId}, Atualizar informações do chat, como descrição, nome
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
DELETE: /api/v1/chat/{chatId}, Excluir bate-papo
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
PUT: /api/v1/chat/{chatId}/picture/{messageId}, Define a imagem do chat
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
PUT: /api/v1/chat/{chatId}/member/{userId}, Adicionar usuário ao chat (novo membro)
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
DELETE: /api/v1/chat/{chatId}/member/{userId}, Remover membro do chat
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
PUT: /api/v1/chat/{chatId}/admin/{userId}, Atribuir ação administrativa
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
DELETE: /api/v1/chat/{chatId}/admin/{userId}, revogar ação do administrador
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
POST: /api/v1/chat/{chatId}/message, ação de criação de mensagem
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
PUT: /api/v1/chat/{chatId}/message/{messageId}, ação de atualização de mensagem
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
DELETE: /api/v1/chat/{chatId}/message/{messageId}, ação de exclusão de mensagem
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
Implementações de contexto de limite de usuário:
POST: /api/v1/user/register, Registrar usuário
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
POST: /api/v1/user/password/reset/request, Cria solicitações de redefinição de senha
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
POST: /api/v1/user/password/change/{id?}, Alterar endpoint de senha para interface de administração
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
POST: /api/v1/user/password/reset/{base64Token}, redefine a senha com o URL de redefinição de senha recebido pelo usuário (link do e-mail)
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
POST: /api/v1/user/activation/{base64Token}, Ative o usuário com o URL de ativação recebido (link do e-mail)
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
GET: /api/v1/user/user-types, obtém todos os tipos de usuários disponíveis
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
GET: /api/v1/user/messenger/{guid}, obtém o perfil do messenger do usuário (menos informações que o perfil de usuário padrão)
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
POST: /api/v1/user/friend/request, Criar solicitação de amizade
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
DELETE: /api/v1/user/friend/request, Remover solicitação de amizade
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
GET: /api/v1/user/friend/request, Obtenha solicitações de amizade
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
POST: /api/v1/user/friend/request/accept, Aceitar solicitação de amizade
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
OBTER: /api/v1/user/friend, Obter amigos
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
DELETE: /api/v1/user/friend, Remover amigo
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
PUT: /api/v1/user/{id}/profile-picture, Adicionar foto de perfil
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
DELETE: /api/v1/user/{id}/profile-picture, Remover foto do perfil
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
PATCH: /api/v1/user/{id}/role, Atribuir função ao usuário
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
DELETE: /api/v1/user/{id}/role, Revogar função do usuário
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
POST: /api/v1/user/, Crie um usuário
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
GET: /api/v1/user/{id}, Obtenha um usuário
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
PUT: /api/v1/user/{id}, Atualizar um usuário
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
DELETE: /api/v1/user/{id}, Excluir um usuário
Apresentação
Implementação
Teste (teste de caixa cinza)
Infraestrutura
Implementação
Teste (teste de caixa cinza)
Aplicativo
Comando/Consulta
Validação (validação fluente)
Manipulador
Tratamento de eventos
Domínio
Implementação
Teste (teste unitário)
Front-end da Web:
Verifique todas as solicitações http para back-end e capture todos os estados acima de todos os erros, portanto, códigos http 4xx e 5xx
Ícones: Ícones MudBlazor.
Barra de navegação:
Características
Privacidade
Seção de Ajuda:
NavBar como barra lateral com pontos de ajuda
Corpo com pontos de pesquisa de ajuda
Artigos populares
Guias de ajuda do Android e iOS em pontos de ajuda
Blogue:
Últimas informações sobre água-viva
Download:
Link para lojas de aplicativos
Rodapé:
Ícone de água-viva
Direitos autorais
Termos de Uso e Política de Privacidade
Ícones de mídia social com canais
Recursos (do Web-Fronend):
Snackbar para notificações (qualquer ação como editar usuário, receber notificação de serviço x/y, etc.) => https://mudblazor.com/components/snackbar#5ac08464-80c3-4c34-8cac-24f0947275e7
Página de login com função de recuperação de senha
Impressão
GDPR:
Isenção de responsabilidade de cookies
Painel.razor:
Gráficos:
E-mails enviados
Usuários registrados em comparação com o mês anterior
Fundo do gráfico ligeiramente cinza
_Host.cshtml: Mudança de mensagens padrão
App.razor:
Página NotFound
Signup.razor (Login + Cadastro):
Arranjo de componentes
Página de sucesso após registro
Usuários.razor:
CRUD+Search (pesquisa talvez com pesquisa elástica)
Ação de redefinição de senha separadamente
Ver foto do perfil do usuário (imagem MudBlazor)
Carregar imagem do perfil do usuário (MudBlazor FileUpload)
Registro de auditoria/exclusão do usuário (todos os eventos em uma tabela separada)
Ver solicitações de amizade/amigos dos usuários recebidas
Saúde.navalha:
Embelezar a visualização da verificação de integridade (atualmente visualização de verificação de integridade padrão como apresentação)
Blogue:
Postagens CRUD
Mídia incorporada
Blog: Carregar postagens verticalmente com a barra de progresso vertical do MudBlazor (animado)
Blog: as postagens são visualizadas com a linha do tempo na ordem esquerda e direita
Autenticação: Temporizador em segundo plano que ficará visível na UI quando o token tiver apenas 5 minutos de validade, então o rastreamento de ativação será iniciado. Quando o usuário aciona ações na UI, o token será atualizado automaticamente no backend.
Armazenamento de sessão: armazena o último URL visitado
Perfil próprio
Visualizar
Editar/Gerenciar
Aplicativo móvel:
Remova a estrutura antiga do DTO e do modelo e os namespaces antigos
Reescrever para nova estrutura
Cache de mensagens/usuários em SQLite, adapte-se à nova estrutura
Adicionar novos WebApiClient e SignalRClient (cliente WebAPI do WebFrontend em compartilhado, novo cliente SignalR (cliente digitado) em compartilhado para reutilização)
Interceptador de mensagens: mantém a cadeia de invocadores para procedimentos de mensagens/notificações (funcionalidade principal de mensagens)
Reescrever URLs de endpoint de destino para back-end para nova estrutura de back-end
Bate-papo: Mensagens (IU + back-end do aplicativo)
Chat+Lista de amigos: Ver perfil
Bate-papo: Mensagens (enviar anexos)
Características autônomas opostas ao WhatsApp etc.:
Marcar mensagens como incapazes de captura de tela: essas mensagens são desfocadas pela criação da captura de tela. O mesmo pela foto do perfil.
Calendários de grupo: Planejando atividades privadas juntos em um calendário de chat de grupo.
Preocupando-se com o compartilhamento: marque as mensagens como não compartilháveis, para não se preocupar com o compartilhamento não permitido :)
Capacidade de hospedar a infraestrutura de mensagens por conta própria. Sem dependência de outros!
Contra a violência: Os bate-papos privados de hoje, como o Telegramm, são abusados por pessoas por violência e conteúdo adulto. Portanto, a água-viva traz a capacidade de evitar o compartilhamento desse tipo de conteúdo. Algoritmo de Machine Learning avalia a mídia que será compartilhada no messenger. Quando for reconhecido conteúdo violento a mensagem enviada será evitada. ** Requer Azure AI Vision ou algoritmo de ML semelhante **
Compartilhamento de localização com trilha ao vivo: desnecessário se estiver em grupos ou chats privados, seus movimentos serão transmitidos ao vivo para os membros do chat quando o modo espectador estiver ativado (disponível apenas no mapa de trilha ao vivo).
Esquecimento: O direito de esquecer é a pedra angular do GDPR atual. Ao remover a conta, todos os dados (incluindo mensagens de bate-papo compartilhadas com amigos) serão removidos. Claro que a mídia também. Estou ciente de que a exclusão de mídia enviada aos membros do chat não é a prática atual, mas todo ser humano tem o direito de que seus dados criados possam ser esquecidos.
Enquetes/Votos: Por exemplo para WhatsApp: Os votos também estarão disponíveis em águas-vivas.
Em geral:
DNS Preconf, nomes iguais de arquivos hosts do Windows como Docker
Definição de licença
Termos de uso
Doação
Manual de instalação e execução
Fique atento .
Painel de administração Alfa 0.1
Painel
Gerenciamento de usuários (Users.razor) com paginação e pesquisa
Gerenciamento de usuários (Users.razor) - Adicionar/Editar
Gerenciamento de usuários (Users.razor) - Excluir
VÍDEO: Pré-visualização do filtro de transição da solicitação Http para a expressão Linq e, finalmente, para a consulta MySql via ORM (dinamicamente) / THUMBNAIL PNG ABAIXO (HREF)
Diagrama de relação de entidade aprimorado
Análise codemétrica após adicionar MobileApp à solução
Fluxo de trabalho de integração contínua com Github Action