PaySys é uma abreviação de Payment System (Sistema de Pagamento), o que resume as funcionalidades da aplicação. O sistema foi feito baseado no Desafio Back-end do PicPay, porém suas features não se limitam a um PicPay Simplificado, abrangindo um escopo relativamente maior que foi pensado no uso atual e posterior do projeto. De início, os requisitos da aplicação foram pensados como um desafio para a minha própria evolução, me forçando a fazer um projeto utilizando de diversas boas práticas (como Domain-Driven Design, Test-Driven Design e os princípios SOLID no geral), além de tecnologias nunca antes usadas por mim. Trabalhei por meses nesse projeto e, chegando próximo ao fim do back-end do mesmo, espero este sistema sirva como um dos projetos de meu Portfólio Pessoal.
- C# (linguagem selecionada)
- Entity Framework Core (ORM para o code-first)
- Dapper (consultas)
- Flunt (validações)
- PostgreSQL (banco de dados)
- JWT (autenticação e autorização)
- Argon2id (criptografia)
- Swagger (documentação da API)
- MailKit e MimeKit (envio de e-mails)
- XUnit (testes unitários e de integração)
- Handlebars.Net (templates HTML)
- Next.js (framework React)
- Tailwind CSS (framework CSS)
- Tailwind Merge (une strings tailwind evitando conflitos)
- PostCSS (transforma JS em CSS)
- TypeScript (adição de tipos ao JavaScript)
- ESLint (linter para JavaScript e TypeScript)
- Prettier (formatador de código)
- Font Awesome (ícones)
Nada para ver ainda...
Aqui estão descritas todas as funcionalidades do projeto:
- Listar, listar dados específicos, criar, atualizar e deletar tipos de usuário;
- Criar usuários dos tipos: comuns, lojistas e administradores;
- Listar de forma resumida os dados dos usuário, para cada tipo;
- Listar os dados de um usuário específico, para cada tipo;
- Fazer login gerando um token JWT que será usado para autenticação e autorização;
- Criar e listar status que uma tranferência pode ter;
- Criar e listar categorias as quais uma transferência pode participar;
- Fazer um transferência (pagamento) de uma conta para outra;
- Listar histórico de transferências de um usuário específico;
- Listar dados de uma transferência específica;
- Enviar e-mail de boas-vindas para novos usuários;
- Enviar um e-mail assim que uma tranferência é realizada envolvendo o usuário;
- Transferir dados sensíveis para variáveis de ambiente;
- Adicionar autorização para todas as rotas.
Aqui estão os diagramas de modelagem de banco de dados, tanto conceitual quanto lógico. O modelo físico foi considerado desnecessário para esse projeto.
A organização das tarefas, datas de entregas e atribuições foi feita utilizando a ferramenta Trello.
Antes de fazer a instalação algumas ferramentas e softwares são necessárias para iniciar esse processo posteriormente:
- Um editor de código com suporte a linguagem C#, como: Visual Studio, VS Code ou NeoVim (minha opção);
- Ter .NET 8 ou superior instalado e adicionado ao PATH do sitema, através do site oficial ou de um gerenciador de versões de runtimes como o ASDF;
- O gerenciador de banco de dados PostgreSQL 16 instalado e configurado através do instalador oficial ou de uma imagem docker.
- Ter o Git instalado.
O processo de instalação está brevemente descrito a seguir:
Primeiramente, deve-se clonar o repositório na sua máquina local com o seguinte comando:
git clone https://github.com/MatheusMacedoDev/paysys-backend.git
Depois, deve-se baixar todas as dependências do projeto usando o seguinte comando do .NET CLI na raiz do projeto da API (não de testes):
.NET CLI
dotnet restore
Então, você deverá modificar o arquivo appsettings.json, em especial na parte relativa a string de conexão que deve ser alterada para as configurações, como indicado no trecho a seguir:
"ConnectionStrings": {
"LocalConnection": "Host = localhost; Port = your-database-port; Pooling = true; Database = database-name; User Id = your-user; Password = your-password"
},
Os seus dados devem ser colocadas substituindo os campos acima. Mais detalhes sobre strings de conexão no Entity Framework Core podem ser vistas aqui. Logo em seguida, deve-se executar o seguinte comando que vai gerar o banco de dados que foi especificado na string de conexão. Portanto, se houver algum erro na string de coneção, o comando falhará.
.Net CLI
dotnet ef update database
Por fim, agora é só executar a aplicação usando o seguinte comando
.Net CLI
dotnet watch run