Skip to content
Merged
Changes from all commits
Commits
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
161 changes: 161 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# InvoiceReminder

Sistema para envio automático de lembretes de pagamento de boletos bancários.

## Índice

- [Sobre o Projeto](#sobre-o-projeto)
- [Funcionalidades](#funcionalidades)
- [Tecnologias Utilizadas](#tecnologias-utilizadas)
- [Pré-requisitos](#pré-requisitos)
- [Instalação](#instalação)
- [Configuração](#configuração)
- [Como Usar](#como-usar)
- [Contribuição](#contribuição)
- [Licença](#licença)
- [Contato](#contato)

---

## Sobre o Projeto

O **InvoiceReminder** é um sistema desenvolvido em C# para automatizar o envio de lembretes referentes a pagamentos de boletos bancários (invoices). Ele pode ser utilizado por empresas ou profissionais autônomos que desejam organizar e automatizar o processo de cobrança/reminder, evitando atrasos e otimizando o fluxo de caixa.

## Funcionalidades

- Cadastro de clientes e notas fiscais
- Agendamento de lembretes automáticos via Telegram chat bot
- Personalização de mensagens de lembrete
- Relatórios de notas fiscais pendentes e lembretes enviados
- Suporte a múltiplos usuários
- Interface Rest API

## Tecnologias Utilizadas

- **Linguagem:** C#
- **Framework:** .NET Core 9
- **Autenticação:** JSON Web Token
- **Banco de Dados:** PostgreSQL
- **Solução de ORM:** Entity Framework Core 9 e Dapper
- **Serviços Externos:** Google Api, iText, Telegram.Bot
- **Agendamento de Tarefas:** Quartz.net
- **Testes Unitários:** MSTest, NSubstitute e Shouldly

## Pré-requisitos

- [.NET SDK](https://dotnet.microsoft.com/download) (versão recomendada: 9.0 ou superior)
- [PostgreSQL](https://www.postgresql.org/download/) (versão recomendada: 16 ou superior)
- [Google OAuth Client](https://console.cloud.google.com/) para gerar chave de integração com o sistema de autenticação sem senha
- Criar um chat bot do Telegram através da interação com @BotFather
- Acesso à internet para recuperação de e-mails e posterior envio de mensagens

## Instalação

Clone o repositório:

```bash
git clone https://github.com/jldsilva/InvoiceReminder.git
cd InvoiceReminder
```

Restaure os pacotes NuGet e compile o projeto:

```bash
dotnet restore
dotnet build
```

## Configuração

Antes de executar, configure os parâmetros de banco de dados e outros no arquivo de configuração (exemplo: `appsettings.json`):

```json
{
"ProviderName": "Npgsql",
"appKeys": {
"googleOauthClientId": "CLIENT_ID",
"googleOauthClientSecret": "CLIENT_SECRET",
"telegramBotToken": "BOT_TOKEN"
},
"ConnectionStrings": {
"DatabaseConnection": "CONNECTION_STRING"
},
"JwtOptions": {
"Issuer": "ISSUER",
"Audience": "AUDIENCE",
"SecretKey": "SECRET_KEY"
}
}
```

> **Nota:** Nunca compartilhe suas credenciais em repositórios públicos dê preferência ao recurso de user secrets do Visual Studio ou VS Code.

## Como Usar

Execute o projeto:

```bash
dotnet run
```

Em ambiente development, a interface Rest API Scalar estará disponível para uso.
Siga as instruções exibidas na tela para cadastrar clientes, notas fiscais e configurar os lembretes.

### Exemplo de uso (CLI):

```bash
# Adicionar cliente
curl https://localhost:7104/api/user \
--request POST \
--header 'Content-Type: application/json' \
--data '{
"id": "",
"name": null,
"email": null,
"password": null
}'

# Adicionar um scan de boleto
curl https://localhost:7104/api/scan_email \
--request POST \
--header 'Content-Type: application/json' \
--data '{
"id": "",
"userId": "",
"invoiceType": 1,
"beneficiary": null,
"description": null,
"senderEmailAddress": null,
"attachmentFileName": null
}'

# Adicionar um job_schedule
curl https://localhost:7104/api/job_schedule \
--request POST \
--header 'Content-Type: application/json' \
--data '{
"id": "",
"userId": "",
"cronExpression": null
}'
```

## Contribuição

Contribuições são bem-vindas! Para contribuir:

1. Faça um fork do projeto
2. Crie uma branch com sua feature (`git checkout -b feature/nova-feature`)
3. Commit suas alterações (`git commit -m 'Adiciona nova feature'`)
4. Push para a branch (`git push origin feature/nova-feature`)
5. Abra um Pull Request

## Licença

Este projeto está sob licença [MIT](LICENSE).

## Contato

Feito por [jldsilva](https://github.com/jldsilva) - Entre em contato para dúvidas ou sugestões!

---