# Como Criar um Novo Tipo de Entidade

#### Quando é necessário criar uma nova entidade?

Primeiro, verifique se uma entidade existente pode resolver o caso de uso necessário para evitar over engineering de uma solução. Se nenhum dos tipos de entidade existentes definidos em <https://github.com/decentraland/common-schemas/blob/main/src/platform/entity.ts#L13> satisfizer os requisitos, então pode ser necessário criar um novo tipo de entidade.

#### Primeira resposta:

* A nova entidade é uma NFT Collection?
* Como a propriedade será validada?
* Qual será o seu tamanho?
* Qual é a quantidade de entidades que serão criadas?

#### Passos

Primeiro crie um ADR em <https://github.com/decentraland/adr> onde você definirá o esquema e a data para começar a validar a nova entidade.

**Repositórios**

**@dcl/schemas**

1. Crie o novo tipo de entidade no enum: <https://github.com/decentraland/common-schemas/blob/main/src/platform/entity.ts#L19>
2. Crie a pasta e os arquivos em <https://github.com/decentraland/common-schemas/tree/main/src/platform> gerando o tipo e o JSON schema, por exemplo: <https://github.com/decentraland/common-schemas/blob/main/src/platform/profile/profile.ts#L20>

**@dcl/content-validator**

Implemente as validações definidas no ADR, levando em conta a data desse ADR em <https://github.com/decentraland/content-validator/blob/main/src/validations/timestamps.ts>. Por exemplo: <https://github.com/decentraland/content-validator/blob/main/src/validations/items/emotes.ts#L8>

1. Adicione o código para verificar a propriedade do novo tipo de entidade em <https://github.com/decentraland/content-validator/tree/main/src/validations/access-checker>
2. Implemente a validationForType para o novo tipo, por exemplo: <https://github.com/decentraland/content-validator/blob/main/src/validations/profile.ts#L112>
3. Aqui você precisará definir o tamanho máximo por entidade em <https://github.com/decentraland/content-validator/blob/main/src/validations/ADR51.ts>.

**@dcl/urn-resolver**

1. Se a nova entidade corresponder a uma Collection, então nada precisa ser adicionado.
2. Se não, então crie um novo urn correspondente à nova entidade e defina-o em <https://github.com/decentraland/urn-resolver> adicionando um resolver em <https://github.com/decentraland/urn-resolver/blob/main/src/resolvers.ts#L23>

**Catalyst: Content Server**

1. Nenhuma alteração no banco de dados é necessária.
2. Atualize todas as bibliotecas modificadas detalhadas acima.

**Catalyst: Lambdas Server**

1. Atualize todas as bibliotecas modificadas detalhadas acima.
2. Verifique se a sanitização de profile precisa ser atualizada (`/lambdas/profiles` endpoint)
3. Verifique se o endpoint de erc collections precisa ser atualizado (`/lambdas/collections` endpoint)
4. Crie um endpoint para mostrar essa entidade, por exemplo `/lambdas/wearables-by-owner`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.decentraland.org/contributor/contributor-pt/tutoriais/how-to-create-new-entity-type.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
