# Cómo crear un nuevo tipo de Entity

#### ¿Cuándo es necesario crear una nueva entidad?

Primero, comprueba si una entidad existente puede resolver el caso de uso necesario para evitar sobreingeniería en la solución. Si ninguno de los tipos de entidad existentes definidos en <https://github.com/decentraland/common-schemas/blob/main/src/platform/entity.ts#L13> satisface los requisitos, entonces puede que necesites crear un nuevo tipo de entidad.

#### Primera respuesta:

* ¿La nueva entidad es una NFT Collection?
* ¿Cómo se validará la propiedad?
* ¿Cuál será su tamaño?
* ¿Cuál es la cantidad de entidades que se crearán?

#### Pasos

Primero crea un ADR en <https://github.com/decentraland/adr> donde definirás el esquema y la fecha para comenzar a validar la nueva entidad.

**Repositorios**

**@dcl/schemas**

1. Crea el nuevo tipo de entidad en el enum: <https://github.com/decentraland/common-schemas/blob/main/src/platform/entity.ts#L19>
2. Crea la carpeta y los archivos en <https://github.com/decentraland/common-schemas/tree/main/src/platform> generando el tipo y el esquema JSON, por ejemplo: <https://github.com/decentraland/common-schemas/blob/main/src/platform/profile/profile.ts#L20>

**@dcl/content-validator**

Implementa las validaciones definidas en el ADR, teniendo en cuenta la fecha de ese ADR en <https://github.com/decentraland/content-validator/blob/main/src/validations/timestamps.ts>. Por ejemplo: <https://github.com/decentraland/content-validator/blob/main/src/validations/items/emotes.ts#L8>

1. Agrega el código para verificar la propiedad del nuevo tipo de entidad en <https://github.com/decentraland/content-validator/tree/main/src/validations/access-checker>
2. Implementa la validationForType para el nuevo tipo, por ejemplo: <https://github.com/decentraland/content-validator/blob/main/src/validations/profile.ts#L112>
3. Aquí necesitarás definir el tamaño máximo por entidad en <https://github.com/decentraland/content-validator/blob/main/src/validations/ADR51.ts>.

**@dcl/urn-resolver**

1. Si la nueva entidad corresponde a una Collection, entonces no hay que añadir nada.
2. Si no, crea un nuevo urn correspondiente a la nueva entidad y defínelo en <https://github.com/decentraland/urn-resolver> añadiendo un resolver en <https://github.com/decentraland/urn-resolver/blob/main/src/resolvers.ts#L23>

**Catalyst: Content Server**

1. No se necesita ningún cambio en la base de datos.
2. Actualiza todas las librerías modificadas detalladas arriba.

**Catalyst: Lambdas Server**

1. Actualiza todas las librerías modificadas detalladas arriba.
2. Comprueba si la sanitización del profile necesita ser actualizada (`/lambdas/profiles` endpoint)
3. Comprueba si el endpoint de erc collections necesita ser actualizado (`/lambdas/collections` endpoint)
4. Crea un endpoint para mostrar esa entidad, por ejemplo `/lambdas/wearables-by-owner`
