Ecossistema open source em evolução

Psalms

Clean conventions. Powerful defaults.

Uma coleção modular de bibliotecas para .NET que elimina código repetitivo, estabelece convenções seguras e acelera o desenvolvimento de APIs e microsserviços.

Visão do ecossistema

Menos repetição. Mais intenção no código.

O Psalms encapsula problemas recorrentes em pacotes independentes e extensíveis. Cada biblioteca pode ser adotada isoladamente, sem obrigar a aplicação a usar o restante do ecossistema.

01

Convenções claras

Padrões compreensíveis e bons valores padrão para reduzir decisões repetidas entre APIs.

02

Extensão sem mistério

Abstrações explícitas e pontos de substituição quando cache, persistência ou templates precisarem evoluir.

03

Componentes independentes

Email, autenticação e dados resolvem responsabilidades separadas e podem ser combinados apenas quando fizer sentido.

“Psalms exists to bring grace to your code. No magic, no unnecessary complexity — just best practices distilled into powerful libraries.”

A proposta não é esconder a aplicação, mas tornar recorrências explícitas, reutilizáveis e fáceis de adaptar.

Pacotes publicados

Três responsabilidades, uma mesma filosofia

Selecione um pacote para explorar o problema resolvido, as decisões arquiteturais e exemplos de integração.

Email workflows e confirmação de comandos

Psalms.AspNetCore.EmailSender

Uma biblioteca para operações que só devem ser executadas depois que o usuário confirma a ação por um link enviado por email.

Dor recorrente

O mesmo fluxo refeito em cada aplicação

Cadastro, reset de senha, alteração de email e aprovações exigem token, expiração, cache, template, envio, desserialização e invalidação após uso.

Decisão arquitetural

O comando vira a unidade do workflow

O IRequest original fica armazenado temporariamente e retorna ao pipeline do MediatR somente após a confirmação.

Arquitetura

Do pedido à execução confirmada

Template resolver

Um template para cada tipo de comando

Cada comando pode implementar IEmailTemplate<TCommand>. O resolver identifica o tipo concreto e procura a implementação correspondente no container de Dependency Injection.

ASP.NET CoreMediatRIDistributedCacheMailKitMimeKitDIHTMLJSON
RegisterUserEmailTemplate.cs
public class RegisterUserEmailTemplate
    : IEmailTemplate<RegisterUserCommand>
{
    public string TemplatePath => "Templates";
    public string EmailType => "confirm-email";
    public string Subject => "Confirm your account";
    public string FrontEndPage => "confirm-email";
}
Registro do template
services.AddScoped<
    IEmailTemplate<RegisterUserCommand>,
    RegisterUserEmailTemplate>();
Enviar para confirmação
await mediator.Send(
    new SendConfirmationEmailCommand(command, email)
);
Confirmar e executar
await mediator.Send(
    new ConfirmEmailCommand(token)
);
Email a partir de HTML
await mediator.Send(
    new SendEmailCommand(
        to: "user@email.com",
        subject: "Welcome",
        htmlPath: "Templates",
        emailType: "welcome"
    )
);

Tokens

Temporários e de uso único

  • GUID: email-confirmation:{guid}
  • Armazenamento em IDistributedCache
  • Expiração padrão de cinco minutos, configurável
  • Remoção antes de executar o comando restaurado

Templates HTML

Templates/welcome.html

O gerador padrão lê arquivos do disco. IEmailHtmlGenerator pode ser substituído por banco de dados, cloud storage, embedded resources ou template engine; essas são extensões possíveis, não integrações incluídas.

Começar

Instalação e registro

Terminal
dotnet add package Psalms.AspNetCore.EmailSender
Program.cs
builder.Services.AddPsalmsEmailSender();

Onde faz sentido

Confirmação de cadastroRedefinição de senhaAlteração de emailAprovação de comandosOperações sensíveisConsentimento prévio

Arquitetura integrada

Como os pacotes podem trabalhar juntos

Um cenário possível para uma API ASP.NET Core. A integração é opcional: cada pacote continua independente e pode ser adotado sozinho.

ClientASP.NET Core APIPsalms.AspNetCore.Auth.JwtPsalms.AspNetCore.EmailSenderMediatR Command HandlerPsalms.EFCore.DataManagementEntity Framework CoreDatabase
  1. JWT

    Autentica o usuário e gerencia access e refresh tokens.

  2. EmailSender

    Armazena o comando sensível e envia a confirmação.

  3. MediatR

    Encaminha o comando restaurado ao handler.

  4. DataManagement

    Repository e Unit of Work persistem a alteração.

Stack

Tecnologias confirmadas no ecossistema

C#.NETASP.NET CoreEntity Framework CoreMediatRJWT BearerASP.NET Core IdentityIDistributedCacheMailKitMimeKitDependency InjectionNuGetHTML templatesTestes automatizados

Evolução contínua

Bibliotecas reais, com espaço para crescer

O Psalms já possui pacotes públicos e código aberto. Novas melhorias podem entrar sem transformar cada biblioteca em uma dependência obrigatória das demais.