# Notificaciones

Habilita las notificaciones dentro de la aplicación para los usuarios de tu aplicación.

### Sintaxis

```
$ vela enable notifications
```

El módulo de notificaciones crea una colección `notifications`, un desplegable de campana en la cabecera de la aplicación y una página `/notifications`. Antes hay que habilitar la autenticación.

### Qué obtienes

- Una campana en la cabecera del layout `(app)` con el número de no leídas. Al abrirla se muestran las cinco notificaciones no leídas más recientes.
- Consulta cada 30 segundos mientras la pestaña esté visible, además de una actualización cada vez que la pestaña recupera el foco. Las notificaciones nuevas también aparecen como toasts.
- Una página `/notifications` con todas las notificaciones del usuario autenticado, con "Marcar como leída" por elemento y "Marcar todas como leídas".
- Una función `notify` en `$lib/server/notifications` para crear notificaciones desde el código del servidor.

El `+layout.server.ts` del layout `(app)` se amplía para cargar las notificaciones no leídas y registrar la dependencia `app:notifications`, de modo que llamar a `invalidate('app:notifications')` desde cualquier sitio actualiza la campana.

### Enviar una notificación

Las notificaciones se crean en el servidor. Importa `notify` en una acción de formulario, un hook o una ruta de API y pásale el id del usuario:

```ts
import { notify } from '$lib/server/notifications';

export const actions = {
  invite: async ({ locals }) => {
    await notify(locals.admin, invitedUserId, {
      title: 'Te han añadido a Acme',
      body: 'Abre la página del equipo para empezar.'
    });
  }
};
```

Los usuarios solo pueden leer y eliminar sus propias notificaciones, y solo pueden cambiar el indicador `read`. Crear una notificación o editar su título y cuerpo requiere el cliente superusuario, así que pasa `locals.admin` en lugar de `locals.pb`.

### Tablas de la base de datos

Habilitar `notifications` crea las siguientes tablas de base de datos:

```
notifications
```

Cada registro contiene una relación `user`, `title`, `body` y un indicador `read`, indexados por usuario, estado de lectura y fecha de creación.