Giter VIP home page Giter VIP logo

prmtoolkit.notificationpattern's Introduction

prmToolkit

NotificationPattern

NotificationPattern é uma classe que nos permite adicionar notificações para qualquer objeto. Ex: Entidades, objetos de valor, serviços e etc.

Installation - ArgumentsValidator

Para instalar, abra o prompt de comando Package Manager Console do seu Visual Studio e digite o comando abaixo:

Para adicionar somente a referencia a dll

Install-Package prmToolkit.NotificationPattern
Package Version Downloads
prmToolkit.NotificationPattern NuGet Nuget

Exemplo de como usar

Atualmente as mensagens das notificações tem suporte aos idiomas pt-BR e en-US. Caso não defina o idioma que quer usar ele irá se basear no idioma local, caso não exista suporte ele assumira o pt-BR.

(Opcional) Para setar o idioma, utilize a linhas abaixo:

Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

Trabalhando com classes

//Crie uma classe que herde de Notifiable para que seja notificavél
public class Customer : Notifiable
{
    public string Name { get; set; }

    public int Age { get; set; }

    public DateTime CreationDate { get; set; }

    public bool Active { get; set; }

    public string   Cpf { get; set; }

    public string   Cnpj { get; set; }

    public IEnumerable<Customer> Customers { get; set; }
}



//Dentro de algum método ou construtor qualquer
public void Metodo_Xpto()
{
    Customer _customer = new Customer();
    _customer.Name = "1234";

    //Adicionando as notificações na sua classe
    new AddNotifications<Customer>(_customer)
        .IfNotContains(x => x.Name, "567") //Se não contém a palavra 567 adicione uma notificação
        .IfNotGuid(x => x.Name); //Se não for um Guid valido adicione uma notificação
}
Levando as notificações para camada superior

Também é possível obter as notificações de uma classe filha para uma classe pai, ou seja, você pode pegar as notificações de objetos filhos e atribuir no pai. Isso é necessário caso você tenha o interesse de pegar as mensagens de uma entidade por exemplo e passar para seu serviço que por sua vez passa para sua api onde irá exibi-las para o usuário.

É o mesmo conceito da Exception, sendo que para ela chegar no topo é necessário fazer uso do método AddNotifications.

public class Pedido : Notifiable
{
    public void AddItem(ItemDoPedido item)
    {
        //Adiciona as notificações de ItemDoPedido no Pedido
        AddNotifications(item.Notifications);
        
        //ou
        AddNotifications(item);
        
        //Também é possível adicionar varios objetos notificaveis de uma so vez.
        //Ex:        
        AddNotifications(objetoNotificavel1, objetoNotificavel2, objetoNotificavel3);
		
		//Também podemos usar o método CopyNotifications
        //Ex:        
        CopyNotifications(objetoNotificavel1, objetoNotificavel2, objetoNotificavel3);
        
        if(item.IsValid()) //Se o item não tem notificações deixa continuar
        _items.Add(item);
        
        //É possível limpar as notificações de um objeto se for necessário
        _item.ClearNotifications();
    }
}
É possível adicionar notificações manualmente
public bool AutenticarUsuario(string username, string password)
{
    if (Username == username && Password == EncryptPassword(password))
        return true;

    //Adicionando notificações manualmente
    AddNotification("User", "Usuário ou senha inválidos");

    return false;
}

Sobre as mensagens

Cada método abaixo já possui sua mensagem padrão no idioma inglês ou português, ou seja, não sendo necessário o desenvolvedor passar uma mensagem personalizada por parametro.

Sem mensagem personalizada
//É possível passar mensagens personalizadas também
public void Metodo_Sem_Mensagem_Personalizada()
{
    Customer _customer = new Customer();
    _customer.Name = "1234";

    //Adicionando as notificações na sua classe
    new AddNotifications<Customer>(_customer).IfNotGuid(x => x.Name); 
    
    //A aplicação irá imprimir
    //O campo 1234 deve ser um Guid válido.
}
Com mensagem personalizada

Caso tenha interesse em personalizar a mensagem, basta passar um parametro a mais, como podemos ver abaixo:

//É possível passar mensagens personalizadas também
public void Metodo_Com_Mensagem_Personalizada()
{
    Customer _customer = new Customer();
    _customer.Name = "1234";

    //Adicionando as notificações na sua classe
    new AddNotifications<Customer>(_customer).IfNotGuid(x => x.Name, "Passe um id do tipo GUID"); 
}

Também é possível passar uma mensagem personalizada através de um resource interno de sua aplicação.

public AdicionarResponse Adicionar(AdicionarRequest request)
{
    if (request == null)
    {
        //Mensagem do resource "Objeto {0} é obrigatório"
        //Utilize o ToFormat ao invés do string.Format para passar o parametro para string, assim seu codigo fica mais limpo
        //Utilize para isso o namespace prmToolkit.NotificationPattern.Extensions

        AddNotification("Adicionar", Message.OBJETO_X_E_OBRIGATORIO.ToFormat("AdicionarRequest"));
        return null;
    }
}

Metodos de validação:

  • IfRequired

  • IfNullOrEmpty

  • IfNullOrWhiteSpace

  • IfNotNull

  • IfLowerThen

  • IfGreaterThan

  • IfLengthNoEqual

  • IfNotEmail

  • IfNotUrl

  • IfGreaterOrEqualsThan

  • IfLowerOrEqualsThan

  • IfNotRange

  • IfRange

  • IfNotContains

  • IfContains

  • IfNotAreEquals

  • IfAreEquals

  • IfTrue

  • IfFalse

  • IfNotCpf

  • IfNotCnpj

  • IfNotGuid

  • IfCollectionIsNull

  • IfCollectionIsNullOrEmpty

  • IfEqualsZero

  • IfNull

  • IfNotNull

  • IfNotNullOrEmpty

  • IfNotDate

  • IfNullOrOrInvalidLength

  • IfLengthGreaterThan

  • IfLengthLowerThan

  • IsValid

  • IsInvalid

  • IfEnumInvalid

VEJA TAMBÉM

Grupo de Estudo no Telegram

Cursos e Treinamentos

Fique ligado, acesse!

Novidades, cupons de descontos e cursos gratuitos

https://t.me/blogilovecode

prmtoolkit.notificationpattern's People

Contributors

albertomonteiro avatar felipeleitao avatar pauloanalista avatar samuelrvg avatar thiagomoises avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

prmtoolkit.notificationpattern's Issues

The entity type 'Notification' requires a primary key to be defined.

Adicionei a validação na minha classe de entidade conforme abaixo, e no momento de gerar atualizar minha base de dados via migration (update-database), foi me retornado a seguinte mensagem: "The entity type 'Notification' requires a primary key to be defined."

using Imperium.Domain.Entities.Base;
using Imperium.Domain.Enums;
using Imperium.Domain.ValueObjects;
using prmToolkit.NotificationPattern;

namespace Imperium.Domain.Entities
{
public class Company : EntityBase
{
public string CompanyName { get; private set; }
public string FantasyName { get; private set; }
public Email Email { get; private set; }
public string CNPJ { get; private set; }
public Address Address { get; private set; }
public EnumStatus Status { get; private set; }

	private Company()
	{
	}

	public Company(string companyName, string fantasyName, Email email, string cnpj)
	{
		CompanyName = companyName;
		FantasyName = fantasyName;
		Email = email;
		CNPJ = cnpj;

		new AddNotifications<Company>(this).IfNotCnpj(x => x.CNPJ);
	}

	public Company(string companyName, string fantasyName, Email email, string cnpj, Address address)
	{
		CompanyName = companyName;
		FantasyName = fantasyName;
		Email = email;
		CNPJ = cnpj;
		Address = address;
		Status = EnumStatus.Pendente;
	}
}

}

using prmToolkit.NotificationPattern;
using System;
using System.ComponentModel.DataAnnotations;

namespace Imperium.Domain.Entities.Base
{
public abstract class EntityBase : Notifiable
{
[Key]
public Guid Id { get; private set; }

	protected EntityBase()
	{
		Id = Guid.NewGuid();
	}
}

}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.