Receba novidades do Hedhog no seu e-mail
Novos lançamentos, receitas e breaking changes — sem spam.
Submódulo inbox
drafts
Rascunhos de composição autônomos e salvos automaticamente (inbox_draft) — não vinculados a uma thread ou mensagem até serem explicitamente enviados.
Caminho de origem: libraries/inbox/src/draft
Arquivo do módulo: draft.module.ts
Introdução
O submódulo Drafts gerencia `inbox_draft`, uma tabela intencionalmente desacoplada de `inbox_thread` e `inbox_message`: um rascunho não tem chave estrangeira `thread_id` ou `message_id`, apenas um `account_id` e um `created_by_user_id`. Isso significa que compor e salvar automaticamente um rascunho nunca toca nas tabelas de thread/mensagem, e enviar uma mensagem (via `POST /inbox/messages/send` do submódulo Messages) não consome, converte ou exclui um rascunho automaticamente — os dois são relacionados apenas por convenção na UI do cliente, não por um relacionamento de banco de dados. Um rascunho que o usuário posteriormente envia manualmente ainda precisa ser excluído separadamente se o cliente quiser removê-lo da lista de rascunhos.
Toda chamada de criação e atualização carimba `last_saved_at` com a hora atual do servidor, que é o campo pelo qual o endpoint de lista ordena (`orderBy: last_saved_at desc`) — é isso que dá à lista de rascunhos sua ordenação favorável ao autosave, em que o rascunho editado mais recentemente (não necessariamente o criado mais recentemente) sempre aparece primeiro. Os campos de destinatário (`to`, `cc`, `bcc`, `replyTo`) reutilizam o mesmo formato `RecipientDto` do endpoint de envio do submódulo Messages, e `attachmentsSnapshot` é um blob JSON sem tipagem destinado a guardar um snapshot no lado do cliente de arquivos anexados mas ainda não enviados entre um autosave e outro; o serviço não faz nenhuma validação sobre seu formato.
O controle de acesso segue o mesmo padrão por conta de Threads e Messages: `create` valida o acesso à `accountId` de destino de antemão, e `update` só revalida o acesso se a requisição estiver de fato movendo o rascunho para uma conta diferente (`body.accountId !== existing.account_id`), evitando uma verificação de acesso redundante em cada autosave disparado por digitação. A exclusão é suave (`deleted_at`), consistente com o restante das entidades do módulo.
Endpoints HTTP
5 endpoints
Lista paginada de rascunhos entre as contas acessíveis ao chamador, ordenada pelos salvos mais recentemente.
- Query
- page, pageSize, search, accountId?
Obtém um único rascunho por ID.
- Params
- id (int)
Cria um novo rascunho. Define last_saved_at com a hora atual.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
| accountId | int | yes | — |
| to | RecipientDto[] ({ email, name? }) | yes | — |
| cc | RecipientDto[] ({ email, name? }) | no | — |
| bcc | RecipientDto[] ({ email, name? }) | no | — |
| replyTo | RecipientDto[] ({ email, name? }) | no | — |
| subject | string (max 255) | no | — |
| textBody | string | no | — |
| htmlBody | string | no | — |
| attachmentsSnapshot | unknown (JSON) | no | Client-side snapshot of pending attachments |
Atualiza um rascunho (atualização parcial, com os mesmos campos da criação). Revalida o acesso à conta apenas se accountId estiver mudando. Atualiza last_saved_at.
- Params
- id (int)
Faz soft delete de um rascunho.
- Params
- id (int)