Feed de Notificações¶
O Feed de notificações são notificações que a principio são mostrado em uma área especifica do App, sendo notificações de avisos e etc.
Arquivos relacionados a essa feature estão em:
domain/notification-feed/*
Resumo do fluxo¶
Temos uma collection onde ficam todas as notificações que são criadas. O modelo inicial foi feito um modelamento de dados para evoluir até para notificações de user-to-user, mas todas as notificações são enviadas a partir da plataforma admin.

Estrutura de dados¶
Abaixo segue a estrutura dos dados salvo por notificação no MongoDB.
interface NotificationFeedData {
_id: string;
sender: string | null; // Notification creator
receiver: string[]; // Ids of the receivers of the notification
message: {
title: string;
description: string;
link: string; // Deeplink
icon: string; // nome ou atalho do ícone
iconType: string | 'material' | 'url' | 'custom';
actions?: { label: string; link: string }[]; // Array de botões adicionais para o usuário
sender?: {
name: string;
photoURL: string;
};
};
audience: null | string | 'all' | 'premium' | 'freemium' | 'b2c' | 'b2b';
entity?: number; // desafio, simulado, questões, objetivos
entityType?: number;
interact?: { userId: string; createdAt: Date }[];
read?: { userId: string; createdAt: Date }[];
displayed?: { userId: string; createdAt: Date }[];
hide?: { userId: string; createdAt: Date }[];
createdAt?: Date;
updatedAt?: Date;
}
Aplicativo¶
Como fica um exemplo das notificações?
Perfil do usuário¶
Agora usuário irá ver na sua tela de configurações uma badge indicando que tem alguma novidade na tela.

Configurações¶
Novo item na tela e também tem o badge indicando que tem novas notificações.

Notificações¶
Tela de notificações com todos status presentes.
- Notificação que o usuário já interagiu;
- Notificação que o usuário não interagiu;
- Notificação que o usuário com actions adicionais;

Novo usuário - Agendamento¶
Um Fluxo que acontece após o confirmar o cadastro de um novo usuário, é o agendamento da sua primeira notificação dando as boas-vindas.
domain/user/*
Resolver confirmarCadastro
const service = new UserServices(user, customClaims)
await service.afterCreateAccount()

Unseen Notifications¶
Uma Query para retornar o total de notificações que o usuário ainda não viu.
Exemplo da utilização no app adicionado um badge informando que tem notificação.
domain/notification-feed/feed.service.ts
getUnseenNotificationFeed()
{
unseenNotifications {
totalUnseen: number
}
}

Regras¶
Para buscar as notificações são aplicados algumas regras.
Classe para as funções estão em:
domain/notification-feed/feed.service.ts
Nos pontos abaixo será explicado o que está sendo feito aqui nessa parte.
generateMatchAggregate()
{
// Período de datas
createdAt: {
$gte: twoMonthsAgo,
$lte: new Date(),
},
$and: [
{
$or: [
// Audience
{ audience: { $in: audiences } },
// Receiver
{ $expr: { $in: [uid, '$receiver'] } },
],
},
{
// Hide (Delete)
$expr: { $not: { $in: [uid, '$hide.userId'] } },
},
]
}
Período de datas¶
Evitar de ter um grande volume de notificações a serem retornadas para o usuário, temos as seguintes regras,
- Busca somente as notificações dos últimos 2 meses;
- Filtro dos 2 meses só muda para novos usuários, onde o GET fica a partir da data de cadastro até o a data atual;
Audience¶
Seguindo o modelo de campanhas, usamos também esse recurso nas notificações para facilitar o filtro de usuários.
Temos as seguintes opções:
- Audience fixas;
- Audience por plano ou parceiro
enum NotificationFeedAudience {
All = 'all', // Todos os usuários;
Premium = 'premium', // Todos os usuários que acesso premium B2C e B2B;
Freemium = 'freemium', // Todos os usuários com acesso limitado;
B2C = 'b2c', // Usuários premium assinantes ;
B2B = 'b2b' // Usuários premium de parceiros
}
Além das opções acima também podemos definir um parceiro ou plano para receber uma notificação, como Farias Brito ou SUPERMED.
Usando essas audiencias facilita o filtro aplicado e trazendo mais rapidez na busca.
Receiver¶
Esse campo recebe um um array de UID de usuários que devem receber essa notificação. Então, além de audience, temos a opção de enviar notificações para UM usuário especifico.
...
receiver: string['UID']; // Ids of the receivers of the notification
...
Hide (Delete)¶
O usuário pode "deletar" as notificação. Para isso adicionamos um campo com array de UID de usuários que não desejam mais visualizar essa notificação.