> ## Documentation Index
> Fetch the complete documentation index at: https://docs.analytics.synapside.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Estrutura do Projeto e Pastas

Toda função desenvolvida para o Analytics Lab segue uma estrutura limpa e padronizada. Esta estrutura garante que o CLI `sanalytics` consiga identificar as configurações da função e que o ambiente serverless execute o handler corretamente.

***

## 📁 Layout de Arquivos

Uma pasta de função no Analytics Lab deve conter os seguintes arquivos:

### Para Node.js (`node22` / JavaScript / TypeScript):

```text theme={null}
meu-projeto-lab/
├── sanalytics.json     # Manifesto com metadados da função no Lab
├── package.json        # Declaração de dependências e tipo de módulo ESM
├── index.js            # Ponto de entrada exportando a função handler
└── .gitignore          # Arquivos e pastas ignorados no deploy/teste
```

### Para Python (`python3.12`):

```text theme={null}
meu-projeto-lab/
├── sanalytics.json     # Manifesto com metadados da função no Lab
├── requirements.txt    # Dependências do Python (pip)
├── main.py             # Ponto de entrada exportando a função handler
└── .gitignore          # Arquivos e pastas ignorados no deploy/teste
```

***

## ⚙️ Manifesto `sanalytics.json`

O arquivo `sanalytics.json` conecta a sua pasta local à função registrada no Analytics Lab. Ele é gerado automaticamente pelo comando `sanalytics create`.

```json theme={null}
{
  "function_id": "01a001fa-dfb4-7337-94f8-90c70ffd5140",
  "name": "Google Ads Ingestion",
  "slug": "google-ads-ingestion",
  "runtime": "node22",
  "entrypoint": "index.js:handler"
}
```

### Campos:

* `function_id`: Identificador UUID v7 da função no Analytics Lab.
* `name`: Nome legível da função.
* `slug`: Slug da função.
* `runtime`: Ambiente de execução (`node22` ou `python3.12`).
* `entrypoint`: Arquivo e nome da função exportada no formato `arquivo.extensão:funcao`.

***

## 🧩 Contrato da Função `handler`

Toda função executada no Analytics Lab deve exportar uma função assíncrona chamada `handler` (ou o nome configurado no `entrypoint`).

### Exemplo em JavaScript (Node.js ESM)

```javascript theme={null}
export async function handler(event, context) {
  // event: Objeto contendo os parâmetros passados na invocação
  // context: Metadados da execução no Lab (quando aplicável)

  return {
    status: 'success',
    data: {
      message: 'Execução finalizada com sucesso'
    }
  };
}
```

### Exemplo em Python

```python theme={null}
def handler(event, context):
    # event: Dicionário com parâmetros da requisição
    # context: Metadados da execução
    
    return {
        "status": "success",
        "data": {
            "message": "Execução finalizada com sucesso"
        }
    }
```

***

## 🚫 Arquivos Ignorados (`.gitignore`)

O CLI `sanalytics` ignora automaticamente pastas de dependências locais e arquivos temporários ao compactar e enviar a função para teste ou deploy:

```text theme={null}
node_modules/
.venv/
__pycache__/
*.log
.env
```

<Note>
  **Importante:** Nunca envie a pasta `node_modules/` ou `.venv/`. O Analytics Lab cuida da instalação e otimização das dependências automaticamente no ambiente sandbox.
</Note>
