Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
4d928b5
Atualiza versões e refatora estrutura de namespaces
eglauko Jul 21, 2025
293e3aa
Atualização de versão e melhorias na estrutura SaveResult
eglauko Jul 21, 2025
54d4699
Atualização de versões e refatoração de código
eglauko Jul 21, 2025
690a78b
Expansão do suporte a contextos de trabalho em múltiplos bancos
eglauko Jul 21, 2025
d6a0883
Atualização de versões e melhorias em testes e configurações
eglauko Jul 22, 2025
04cbbc9
Atualização de versões e melhorias de rotas
eglauko Jul 22, 2025
8592f2b
Atualiza funcionalidades de busca e estrutura de autor
eglauko Jul 22, 2025
0f67f6e
Atualização de versões e melhorias na interface de busca
eglauko Jul 24, 2025
b6401f9
Enhance repository and unit of work functionality
eglauko Jul 24, 2025
758adfb
Upgrade dependencies and enhance metadata
eglauko Jul 25, 2025
f2037f5
Atualização de versões
eglauko Jul 25, 2025
ec4599b
Atualização de versões e refatoração de código
eglauko Jul 25, 2025
ed13f59
Atualização de versão e melhorias na verificação de e-mail
eglauko Jul 28, 2025
6a41ccc
Atualização de versão e melhorias na configuração do projeto
eglauko Jul 28, 2025
73db94f
samples
eglauko Jul 29, 2025
71ea50f
icon2
eglauko Sep 11, 2025
2302589
icon2
eglauko Oct 3, 2025
809c0a3
Update to .NET 10, reorganize solution, and refactor dependencies
eglauko Jan 16, 2026
06d5524
Update Domain and Persist component versions
eglauko Jan 16, 2026
7fc4e24
Add modular EF work context config & update package refs
eglauko Jan 19, 2026
80ae524
Update Persist version and add ConfigureQueries extension
eglauko Jan 19, 2026
0bffd84
Update solution structure and add docs for RoyalCode
eglauko Jan 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/domain-nuget.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
dotnet-version: '10.0.x'
include-prerelease: true

- name: Build and pack Entities
Expand Down
13 changes: 11 additions & 2 deletions .github/workflows/persistence-nuget.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
dotnet-version: '10.0.x'
include-prerelease: true

- name: Build and pack Repositories Abstractions
Expand All @@ -38,6 +38,15 @@ jobs:

- name: Build and pack Work Context EntityFramework
run: dotnet build ./RoyalCode.EnterprisePatterns/RoyalCode.WorkContext.EntityFramework/RoyalCode.WorkContext.EntityFramework.csproj -c Release


- name: Build and pack Work Context PostgreSql
run: dotnet build ./RoyalCode.EnterprisePatterns/RoyalCode.WorkContext.PostgreSql/RoyalCode.WorkContext.PostgreSql.csproj -c Release

- name: Build and pack Work Context Sqlite
run: dotnet build ./RoyalCode.EnterprisePatterns/RoyalCode.WorkContext.Sqlite/RoyalCode.WorkContext.Sqlite.csproj -c Release

- name: Build and pack Work Context SqlServer
run: dotnet build ./RoyalCode.EnterprisePatterns/RoyalCode.WorkContext.SqlServer/RoyalCode.WorkContext.SqlServer.csproj -c Release

- name: Publish
run: dotnet nuget push ./**/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
130 changes: 130 additions & 0 deletions RoyalCode.EnterprisePatterns/.docs/domain.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# RoyalCode Enterprise Patterns – Domínio (Entities e Aggregates)

Este documento descreve as bibliotecas de domínio e foca em como modelar entidades e agregados, separando o conteúdo de persistência (WorkContext/UnitOfWork/Repositories), que está documentado em `.docs/workcontext.md`.

Escopo:
- `RoyalCode.Entities`
- `RoyalCode.Aggregates`

Compatibilidade: múltiplos targets (.NET 8, .NET 9 e .NET 10) via `$(LibTargets)`.

---

## RoyalCode.Entities

Fundação para modelagem de entidades. Fornece contratos e implementações básicas para ID, Code, Guid, estado ativo e exclusão lógica.

Principais tipos
- `IEntity` / `IEntity<TId>`: marca uma entidade e o tipo do seu identificador.
- `Entity<TId>`: base com propriedade `Id` (set protegido).
- `Entity<TId, TCode>`: base com `Id` e `Code`.
- `IHasId<TId>`: expõe `Id` para entidades/DTOs.
- `IHasCode<TCode>`: expõe `Code` (identificador amigável e único, distinto do ID).
- `IHasGuid`: expõe `Guid` global (não substitui o ID; útil para referência cruzada entre bancos/contextos).
- `IActiveState`: expõe `IsActive` para habilitar/desabilitar sem deletar.
- `ISoftDeletable`: expõe `IsDeleted` para exclusão lógica.

Referência rápida de API (como Copilot deve sugerir)
- Criar entidade: `public class Product : Entity<Guid> { /* propriedades */ }`
- Criar DTO associado: `public class ProductDto : IHasId<Guid> { public Guid Id {get;set;} /* ... */ }`
- Entidade com código: `public class Sku : Entity<int, string> { /* Code já incluído */ }`

Quando usar
- Herde de `Entity<TId>` para qualquer entidade de domínio com ID.
- Use `Entity<TId, TCode>` quando existir também um código de negócio único.
- Implemente `IHasGuid`, `IActiveState` e/ou `ISoftDeletable` conforme os requisitos do domínio.

Exemplo básico
```csharp
using RoyalCode.Entities;

public class Person : Entity<int>
{
public string Name { get; set; } = null!;
}
```

Exemplo com `Entity<TId, TCode>`
```csharp
using RoyalCode.Entities;

public class CatalogItem : Entity<Guid, string>
{
public string Name { get; set; } = null!;
// Code é herdado e tem set protegido
public CatalogItem(Guid id, string code, string name)
{
Id = id;
Code = code;
Name = name;
}
}
```

---

## RoyalCode.Aggregates

Modelagem de Agregados (DDD). Define a raiz do agregado e integra a coleta de eventos de domínio.

Principais tipos
- `IAggregateRoot` / `IAggregateRoot<TId>`: marca a raiz do agregado e o tipo do ID.
- `AggregateRoot<TId>`: base que herda de `Entity<TId>` e inclui `IDomainEventCollection? DomainEvents` + método protegido `AddEvent(IDomainEvent)`.
- `AggregateRoot<TId, TCode>`: versão com `Code` além do ID e dos eventos.

Eventos de domínio
- `AggregateRoot<TId>` mantém uma coleção de eventos (`DomainEvents`).
- Use `AddEvent(evt)` para registrar eventos quando invariantes do agregado forem alteradas.
- O despacho/persistência de eventos é responsabilidade das bibliotecas de infraestrutura; aqui apenas coletamos os eventos.

Exemplo
```csharp
using RoyalCode.Aggregates;
using RoyalCode.DomainEvents; // IDomainEvent

public sealed class Order : AggregateRoot<Guid>
{
public string Number { get; private set; }

public Order(string number)
{
Id = Guid.NewGuid();
Number = number;
AddEvent(new OrderCreated(Id, Number));
}
}

public record OrderCreated(Guid OrderId, string Number) : IDomainEvent;
```

Exemplo com `AggregateRoot<TId, TCode>`
```csharp
using RoyalCode.Aggregates;
using RoyalCode.DomainEvents;

public sealed class ProductAggregate : AggregateRoot<Guid, string>
{
public string Name { get; private set; }

public ProductAggregate(string code, string name)
{
Id = Guid.NewGuid();
Code = code;
Name = name;
AddEvent(new ProductCreated(Id, Code));
}
}

public record ProductCreated(Guid ProductId, string Code) : IDomainEvent;
```

---

## Boas práticas de modelagem
- Mantenha invariantes do agregado dentro da raiz (`AggregateRoot`) e dispare eventos com `AddEvent` após mudanças significativas.
- Não exponha `set` público para `Id`/`Code`; proteja modificações via comportamentos.
- Utilize `IHasGuid` quando precisar correlacionar a mesma entidade em múltiplos bancos/contextos.
- Prefira `ISoftDeletable` e `IActiveState` para cenários de (des)ativação e exclusão lógica.

Para integração com persistência, consulte `.docs/workcontext.md`.

Empty file.
Loading
Loading