Skip to content

Notificações — Endpoints

Base URL: /api/notifications

Permissões: todos os perfis autenticados


GET /api/notifications

Lista notificações do usuário atual.

Query params:

ParâmetroTipoDescrição
pageintegerPágina (padrão: 1)
pageSizeintegerItens por página (padrão: 20)
unreadOnlybooleanRetornar apenas não lidas

Resposta 200:

json
{
  "data": [
    {
      "id": "j1k2l3m4-...",
      "type": "ContractExpiry",
      "title": "Contrato prestes a vencer",
      "message": "O contrato AP-001 / João da Silva vence em 28 dias.",
      "isRead": false,
      "resourceType": "Contract",
      "resourceId": "d1e2f3a4-...",
      "createdAt": "2026-05-19T08:00:00Z"
    },
    {
      "id": "k1l2m3n4-...",
      "type": "PaymentDefault",
      "title": "Pagamento em atraso",
      "message": "Aluguel de maio/2026 do imóvel CS-010 está em atraso.",
      "isRead": true,
      "resourceType": "Payment",
      "resourceId": "e1f2a3b4-...",
      "createdAt": "2026-05-06T09:00:00Z"
    }
  ],
  "page": 1,
  "pageSize": 20,
  "total": 7,
  "totalPages": 1,
  "hasNext": false,
  "hasPrevious": false,
  "unreadCount": 3
}

Tipos de notificação (type)

TipoDescrição
ContractExpiryContrato vencendo em 30 dias
PaymentDefaultPagamento em atraso
NewProposalNova proposta criada
ProposalApprovedProposta aprovada
VisitConfirmedVisita confirmada
CommissionApprovedComissão aprovada
CommissionPaidComissão paga
GeneralNotificação genérica

PATCH /api/notifications/:id/read

Marca uma notificação como lida.

Body: (vazio)

Resposta 200:

json
{
  "id": "j1k2l3m4-...",
  "isRead": true,
  "readAt": "2026-05-19T10:05:00Z"
}

PATCH /api/notifications/read-all

Marca todas as notificações do usuário como lidas.

Resposta 200:

json
{
  "markedAsRead": 3
}

POST /api/notifications/check-alerts

Dispara verificação manual de alertas automáticos (contratos vencendo, inadimplência).

Permissões: Admin

Body: (vazio)

Resposta 200:

json
{
  "contractsExpiring": 2,
  "paymentsDefaulted": 1,
  "notificationsCreated": 3
}

Este endpoint é executado automaticamente pelo sistema de forma agendada. O endpoint manual é fornecido para triggering on-demand e testes.


Notificações em tempo real (Firestore)

As notificações são sincronizadas em tempo real via Firestore no frontend. O notification.service.ts mantém uma subscription ativa:

typescript
// notification.service.ts
getRealtimeNotifications(): Observable<Notification[]> {
  const q = query(
    collection(this.firestore, `notifications/${userId}/items`),
    where('isRead', '==', false),
    orderBy('createdAt', 'desc')
  );
  return collectionData(q) as Observable<Notification[]>;
}

O badge no ícone de notificações é atualizado automaticamente sem polling.

Documentação do FastGivr SystemImob