{"id":21601839,"url":"https://github.com/pauloanalista/prmtoolkit.notificationpattern","last_synced_at":"2025-06-25T08:38:50.458Z","repository":{"id":54247296,"uuid":"90088063","full_name":"pauloanalista/prmToolkit.NotificationPattern","owner":"pauloanalista","description":"prmToolkit.NotificationPattern é uma classe que nos permite adicionar notificações para nossas entidades e objetos de valor.","archived":false,"fork":false,"pushed_at":"2021-11-05T11:26:57.000Z","size":2895,"stargazers_count":20,"open_issues_count":0,"forks_count":12,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-12T20:33:51.047Z","etag":null,"topics":["entidades","fluent","fluentvalidation","notification","notifications","objetos-de-valor","pattner","prmtoolkit","validations","validator"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pauloanalista.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-02T23:34:28.000Z","updated_at":"2023-09-18T19:39:41.000Z","dependencies_parsed_at":"2022-08-13T10:00:25.372Z","dependency_job_id":null,"html_url":"https://github.com/pauloanalista/prmToolkit.NotificationPattern","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pauloanalista/prmToolkit.NotificationPattern","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pauloanalista%2FprmToolkit.NotificationPattern","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pauloanalista%2FprmToolkit.NotificationPattern/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pauloanalista%2FprmToolkit.NotificationPattern/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pauloanalista%2FprmToolkit.NotificationPattern/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pauloanalista","download_url":"https://codeload.github.com/pauloanalista/prmToolkit.NotificationPattern/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pauloanalista%2FprmToolkit.NotificationPattern/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261837598,"owners_count":23217460,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["entidades","fluent","fluentvalidation","notification","notifications","objetos-de-valor","pattner","prmtoolkit","validations","validator"],"created_at":"2024-11-24T19:11:03.921Z","updated_at":"2025-06-25T08:38:50.425Z","avatar_url":"https://github.com/pauloanalista.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# prmToolkit\n\n# NotificationPattern\nNotificationPattern é uma classe que nos permite adicionar notificações para qualquer objeto. Ex: Entidades, objetos de valor, serviços e etc.\n\n### Installation - ArgumentsValidator\n\nPara instalar, abra o prompt de comando Package Manager Console do seu Visual Studio e digite o comando abaixo:\n\nPara adicionar somente a referencia a dll\n```sh\nInstall-Package prmToolkit.NotificationPattern\n```\n| Package |  Version | Downloads |\n| ------- | ----- | ----- |\n| `prmToolkit.NotificationPattern` | [![NuGet](https://img.shields.io/nuget/v/prmToolkit.NotificationPattern.svg)](https://nuget.org/packages/prmToolkit.NotificationPattern) | [![Nuget](https://img.shields.io/nuget/dt/prmToolkit.NotificationPattern.svg)](https://nuget.org/packages/prmToolkit.NotificationPattern) |\n\n### Exemplo de como usar\nAtualmente as mensagens das notificações tem suporte aos idiomas pt-BR e en-US.\nCaso 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.\n\n(Opcional) Para setar o idioma, utilize a linhas abaixo:\n```sh\nThread.CurrentThread.CurrentCulture = new CultureInfo(\"pt-BR\");\nThread.CurrentThread.CurrentUICulture = new CultureInfo(\"en-US\");\n```\n\n#### Trabalhando com classes\n```csharp\n//Crie uma classe que herde de Notifiable para que seja notificavél\npublic class Customer : Notifiable\n{\n    public string Name { get; set; }\n\n    public int Age { get; set; }\n\n    public DateTime CreationDate { get; set; }\n\n    public bool Active { get; set; }\n\n    public string   Cpf { get; set; }\n\n    public string   Cnpj { get; set; }\n\n    public IEnumerable\u003cCustomer\u003e Customers { get; set; }\n}\n\n\n\n//Dentro de algum método ou construtor qualquer\npublic void Metodo_Xpto()\n{\n    Customer _customer = new Customer();\n    _customer.Name = \"1234\";\n\n    //Adicionando as notificações na sua classe\n    new AddNotifications\u003cCustomer\u003e(_customer)\n        .IfNotContains(x =\u003e x.Name, \"567\") //Se não contém a palavra 567 adicione uma notificação\n        .IfNotGuid(x =\u003e x.Name); //Se não for um Guid valido adicione uma notificação\n}\n```\n\n\n##### Levando as notificações para camada superior\nTambé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.\n\nÉ o mesmo conceito da Exception, sendo que para ela chegar no topo é necessário fazer uso do método AddNotifications.\n\n```csharp\npublic class Pedido : Notifiable\n{\n    public void AddItem(ItemDoPedido item)\n    {\n        //Adiciona as notificações de ItemDoPedido no Pedido\n        AddNotifications(item.Notifications);\n        \n        //ou\n        AddNotifications(item);\n        \n        //Também é possível adicionar varios objetos notificaveis de uma so vez.\n        //Ex:        \n        AddNotifications(objetoNotificavel1, objetoNotificavel2, objetoNotificavel3);\n\t\t\n\t\t//Também podemos usar o método CopyNotifications\n        //Ex:        \n        CopyNotifications(objetoNotificavel1, objetoNotificavel2, objetoNotificavel3);\n        \n        if(item.IsValid()) //Se o item não tem notificações deixa continuar\n        _items.Add(item);\n        \n        //É possível limpar as notificações de um objeto se for necessário\n        _item.ClearNotifications();\n    }\n}\n```\n\n##### É possível adicionar notificações manualmente\n\n```csharp\npublic bool AutenticarUsuario(string username, string password)\n{\n    if (Username == username \u0026\u0026 Password == EncryptPassword(password))\n        return true;\n\n    //Adicionando notificações manualmente\n    AddNotification(\"User\", \"Usuário ou senha inválidos\");\n\n    return false;\n}\n```\n#### Sobre as mensagens\nCada 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.\n\n##### Sem mensagem personalizada\n\n```csharp\n//É possível passar mensagens personalizadas também\npublic void Metodo_Sem_Mensagem_Personalizada()\n{\n    Customer _customer = new Customer();\n    _customer.Name = \"1234\";\n\n    //Adicionando as notificações na sua classe\n    new AddNotifications\u003cCustomer\u003e(_customer).IfNotGuid(x =\u003e x.Name); \n    \n    //A aplicação irá imprimir\n    //O campo 1234 deve ser um Guid válido.\n}\n```\n\n##### Com mensagem personalizada\nCaso tenha interesse em personalizar a mensagem, basta passar um parametro a mais, como podemos ver abaixo:\n\n```csharp\n//É possível passar mensagens personalizadas também\npublic void Metodo_Com_Mensagem_Personalizada()\n{\n    Customer _customer = new Customer();\n    _customer.Name = \"1234\";\n\n    //Adicionando as notificações na sua classe\n    new AddNotifications\u003cCustomer\u003e(_customer).IfNotGuid(x =\u003e x.Name, \"Passe um id do tipo GUID\"); \n}\n```\n\nTambém é possível passar uma mensagem personalizada através de um resource interno de sua aplicação.\n\n```csharp\npublic AdicionarResponse Adicionar(AdicionarRequest request)\n{\n    if (request == null)\n    {\n        //Mensagem do resource \"Objeto {0} é obrigatório\"\n        //Utilize o ToFormat ao invés do string.Format para passar o parametro para string, assim seu codigo fica mais limpo\n        //Utilize para isso o namespace prmToolkit.NotificationPattern.Extensions\n\n        AddNotification(\"Adicionar\", Message.OBJETO_X_E_OBRIGATORIO.ToFormat(\"AdicionarRequest\"));\n        return null;\n    }\n}\n```\n\n### Metodos de validação:\n\n- IfRequired\n\n- IfNullOrEmpty \n\n- IfNullOrWhiteSpace \n\n- IfNotNull \n\n- IfLowerThen \n\n- IfGreaterThan \n\n- IfLengthNoEqual \n\n- IfNotEmail \n\n- IfNotUrl \n\n- IfGreaterOrEqualsThan \n\n- IfLowerOrEqualsThan \n\n- IfNotRange \n\n- IfRange \n\n- IfNotContains \n\n- IfContains \n\n- IfNotAreEquals \n\n- IfAreEquals \n\n- IfTrue \n\n- IfFalse \n\n- IfNotCpf \n\n- IfNotCnpj \n\n- IfNotGuid \n\n- IfCollectionIsNull \n\n- IfCollectionIsNullOrEmpty \n\n- IfEqualsZero \n\n- IfNull \n\n- IfNotNull \n\n- IfNotNullOrEmpty \n\n- IfNotDate \n\n- IfNullOrOrInvalidLength \n\n- IfLengthGreaterThan \n\n- IfLengthLowerThan \n\n- IsValid \n\n- IsInvalid \n\n- IfEnumInvalid\n\n\n# VEJA TAMBÉM\n## Grupo de Estudo no Telegram\n- [Participe gratuitamente do grupo de estudo](https://olha.la/ilovecode-telegram)\n\n## Cursos e Treinamentos\n- [Cursos Indicados](https://olha.la/cursos)\n\n## Fique ligado, acesse!\n- [Blog ILoveCode](https://ilovecode.com.br)\n\n## Novidades, cupons de descontos e cursos gratuitos\nhttps://t.me/blogilovecode\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpauloanalista%2Fprmtoolkit.notificationpattern","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpauloanalista%2Fprmtoolkit.notificationpattern","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpauloanalista%2Fprmtoolkit.notificationpattern/lists"}