# Como Criar um Novo Tipo de Entity

#### 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`
