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
Crie o novo tipo de entidade no enum: https://github.com/decentraland/common-schemas/blob/main/src/platform/entity.ts#L19
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
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
Implemente a validationForType para o novo tipo, por exemplo: https://github.com/decentraland/content-validator/blob/main/src/validations/profile.ts#L112
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
Se a nova entidade corresponder a uma Collection, então nada precisa ser adicionado.
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
Nenhuma alteração no banco de dados é necessária.
Atualize todas as bibliotecas modificadas detalhadas acima.
Catalyst: Lambdas Server
Atualize todas as bibliotecas modificadas detalhadas acima.
Verifique se a sanitização de profile precisa ser atualizada (
/lambdas/profilesendpoint)Verifique se o endpoint de erc collections precisa ser atualizado (
/lambdas/collectionsendpoint)Crie um endpoint para mostrar essa entidade, por exemplo
/lambdas/wearables-by-owner
Atualizado