ientityitem.md•4.03 kB
### IEntityItem
Uma entidade é uma instância de um schema, que representa uma instância específica de um tipo de objeto no sistema. No contexto da plataforma, uma entidade pode ser um time, estrutura organizacional, categorias, etc.
~~~csharp
namespace Api.DigitalPages.Interfaces.Models
{
/// <summary>
/// Uma entidade é uma instância de um schema, que representa uma instância
/// específica de um tipo de objeto no sistema. No contexto da plataforma,
/// uma entidade pode ser um time, estrutura organizacional, categorias, etc.
/// </summary>
public interface IEntityItem : IBaseModelV3<IEntitySchema>, IDataPosition
{
/// <summary>
/// Nome atribuído a entidade.
/// </summary>
string Name { get; set; }
/// <summary>
/// Atributos customizados da entidade.
/// </summary>
Dictionary<string, object> Data { get; set; }
/// <summary>
/// Membros atribuídos a entidade.
/// </summary>
List<IEntityMember> Members { get; set; }
/// <summary>
/// Permissões que devem ser atribuídas ao membros da entidade.
/// </summary>
RoleType Roles { get; set; }
}
/// <summary>
/// Interface base utilizada para objetos com necessidade de posicionamento em um matrix.
/// </summary>
public interface IDataPosition
{
/// <summary>
/// Representa a posição vertical da entidade em uma matriz.
/// Quanto menor o número da linha, mais acima a entidade estará na hierarquia.
/// </summary>
int Row { get; set; }
/// <summary>
/// Representa a posição horizontal da entidade em uma matriz.
/// Quanto menor o número da coluna, mais à esquerda a entidade estará na hierarquia.
/// </summary>
int Column { get; set; }
}
}
~~~
**Flexibilidade:**
As entidades podem ser altamente flexíveis devido à natureza dos schemas. Cada entidade pode ter uma estrutura de dados única, com base nas propriedades definidas no schema associado. Isso permite que as entidades sejam adaptadas a uma ampla variedade de contextos e necessidades, proporcionando uma flexibilidade significativa na modelagem de dados.
**Uso Detalhado de row e column:**
row: Representa a posição vertical da entidade em uma matriz. Quanto menor o número da linha, mais acima a entidade estará na hierarquia.
column: Representa a posição horizontal da entidade em uma matriz. Quanto menor o número da coluna, mais à esquerda a entidade estará na hierarquia.
Por exemplo, se uma entidade tem row=0 e column=0, significa que está no canto superior esquerdo da matriz. Se outra entidade tem row=1 e column=0, estará diretamente abaixo da primeira entidade. Se a mesma entidade altera sua column para 1, estará à direita da primeira entidade, indicando uma relação de pai-filho entre as duas entidades. Este padrão continua para níveis mais profundos na hierarquia, permitindo uma organização estruturada de entidades.
**Exemplo:**

No exemplo podemos notar que **Desenvolvimento** **row=0** e **column=0**, e **Backend** **row=1** e **Column=1** e assim para as demais entidades cadastradas. Ficando visualmente claro que **C#** é filho de **Backend** que por sua vez é filho de **Desenvolvimento** e irmão de **Frontend** que possui um filho **Javascript**.
Seguindo esse racional, o sistema não tem limite de hierarquia dos elementos não comprometendo o desempenho ao entregar os dados para o usuário.
**Serialização do modelo em JSON:**
```json
{
"uid": "c69b9543-7606-ef11-96f5-00224821b633",
"name": "Item 1",
"row": 0,
"column": 0,
"data": {
"Cor": "#00ffff",
"Valor": 12312
},
"schema_uid": "7c1e35b6-7506-ef11-96f5-00224821b633",
"roles": "Inherited",
"created_at": "2024-04-29T22:17:29.1522811Z",
"updated_at": "2024-04-29T22:17:29.1518379Z"
}
```