# Hooks

### Cas d'utlisation

* Intégrer les profils utilisateur à un CRM tiers tel que Salesforce ou Hubspot
* Envoyer une copie des fichiers téléchargés vers Amazon S3 ou similaire
* Ajoutez automatiquement `lastModifiedBy`des données à un document pour suivre qui a modifié quoi au fil du temps
* Crypter les données d'un champ lors de leur enregistrement et les décrypter lors de leur lecture
* Envoyer des e-mails lorsque `ContactSubmission`des s sont créés à partir d'un site Web public
* Intégrez-vous à un fournisseur de paiement comme Stripe pour traiter automatiquement les paiements lors de leur `Order`création
* Recalculez en toute sécurité les prix des commandes sur le backend pour garantir que le prix total des `Order`commandes soumises par les utilisateurs est exact et valide
* Générer et stocker une `lastLoggedIn`date sur un utilisateur en ajoutant un `afterLogin`hook
* Ajoutez des données supplémentaires aux documents avant leur lecture, telles que des « scores moyens » ou des données similaires qui doivent être calculées à la volée

## Les types d'hooks

* beforeOperation
* beforeInsert
* afterInsert
* beforeDelete
* afterDelete
* beforeFind
* afterFind
* beforeUpdate
* afterUpdate
* beforeAggregate
* afterAggregate
* beforeCount
* afterCount

## Les configurations d'hooks

### beforeOperation

Elle permet de faire des controles sur les données avant d' entamer le cycle de vie d'action&#x20;

```javascript

import { define } from "@dnax/core";

export default define.Collection({
  slug: "clients",
  hooks: {
    beforeOperation: ({ data ,action}) => { // Logic before All action
        if(action=='insertOne'){
            // Set secondary Id based on month
            data.pk = '2024-01-01'+Math.random()
        }

    },
  },
});

```

### beforeInsert

```typescript
import { define } from "@dnax/core";

export default define.Collection({
  slug: "clients",
  hooks: {
    beforeInsert: async ({ data, action, sharedData, c }) => {
      // get Client IP
    //  let IP = c?.req.raw.headers.get("CF-Connecting-IP");
    //  let geoIp = await geoip.lookup(IP);

      // Provide user location information
     // data.geodata = geoIp;
    },
  },
});


```

### afterInsert

```javascript
import { define ,utils } from "@dnax/core";

export default define.Collection({
  slug: "clients",
  hooks: {
    afterInsert: async ({ data, action, sharedData, c }) => {
    
    // Send confirmation registered
    /*  utils.email.send({
            mailOptions:{
                from:'test@test.com',
                to:'jhon.doe@dnax.io',
                subject:'Confirmation',
                html:`<h1>Hello ${data?.fullname}</h1>`
            }
        }) */


    },
  },
});


```
