Este projeto utiliza uma arquitetura de camadas com pacotes separados para cada domínio do sistema, incluindo Endereço, Pessoa e Contatos, Produtos e Estoque, Pagamentos, Pedidos, e Segurança.
Responsável pela gestão de endereços no sistema.
- Classes:
Estado
,Municipio
,ViaCep
,EnderecoViaCepAdapter
,Endereco
- Interfaces:
IEndereco
Gerencia entidades relacionadas a pessoas físicas e jurídicas, além de seus contatos.
- Classes:
Telefone
,Contato
,PessoaFactory
,Pessoa
,PessoaFisica
,PessoaJuridica
- Enums:
TipoPessoa
,SituacaoCPF
,SituacaoCNPJ
Gerencia produtos e estoques.
- Classes:
Produto
,LocalArmazenamento
,Estoque
- Enums:
Metrica
Lida com o processamento e validação de pagamentos.
- Classes:
Pagamento
,PagamentoProcessamentoService
,PagamentoServiceImpl
- Interfaces:
IPagamentoProcessar
,IPagamentoValidar
,IPagamentoNotificar
- Fábricas:
PagamentoProcessarFactory
,PagamentoValidarFactory
,PagamentoNotificarFactory
- Enums:
TipoPagamento
,StatusPagamento
Gerencia pedidos de compra e venda.
- Classes:
ItemPedido
,PedidoVenda
,PedidoCompra
Implementa mecanismos de autenticação e autorização de usuários.
- Classes:
User
,Role
,UserPrincipal
,UserServiceImpl
- Interfaces:
UserDetailsService
,UserRepository
,IPasswordEncoder
- Classes Adicionais:
BCryptPasswordEncoder
,CustomBasicAuthenticationFilter
Este documento descreve os principais casos de uso do sistema, organizados por pacotes, incluindo os componentes de segurança e funcionalidades específicas para gerenciamento de pessoas, endereços, produtos, pagamentos e pedidos.
-
Cadastrar Estado
- O administrador pode cadastrar um novo estado, definindo um
id
,descrição
esigla
. - Classes Envolvidas:
Estado
- O administrador pode cadastrar um novo estado, definindo um
-
Cadastrar Município
- O administrador pode cadastrar um município, associando-o a um estado já existente.
- Classes Envolvidas:
Municipio
,Estado
-
Buscar CEP via API
- O sistema consulta o serviço externo ViaCep para buscar informações detalhadas de um endereço com base no CEP.
- Classes Envolvidas:
ViaCep
,EnderecoViaCepAdapter
-
Cadastrar Endereço Manualmente
- O usuário pode cadastrar um endereço manualmente, fornecendo os detalhes como
rua
,número
,cep
,bairro
e associando-o a um município. - Classes Envolvidas:
Endereco
- O usuário pode cadastrar um endereço manualmente, fornecendo os detalhes como
-
Cadastrar Pessoa Física
- O sistema permite o cadastro de uma pessoa física, utilizando a
PessoaFactory
para criar a instância dePessoaFisica
e preenchendo informações comocpf
,rg
, edata de nascimento
. - Classes Envolvidas:
PessoaFisica
,PessoaFactory
- O sistema permite o cadastro de uma pessoa física, utilizando a
-
Cadastrar Pessoa Jurídica
- Similar ao cadastro de pessoa física, o sistema utiliza a
PessoaFactory
para criar uma instância dePessoaJuridica
, com campos comocnpj
,razão social
eramo de atividade
. - Classes Envolvidas:
PessoaJuridica
,PessoaFactory
- Similar ao cadastro de pessoa física, o sistema utiliza a
-
Gerenciar Contatos de Pessoa
- Um usuário pode adicionar ou remover endereços e telefones para uma pessoa através do
ContatoService
. - Classes Envolvidas:
Contato
,Pessoa
- Um usuário pode adicionar ou remover endereços e telefones para uma pessoa através do
-
Cadastrar Produto
- O administrador pode cadastrar novos produtos no sistema, informando
marca
,modelo
,descrição
,métrica
, entre outros atributos. - Classes Envolvidas:
Produto
- O administrador pode cadastrar novos produtos no sistema, informando
-
Gerenciar Estoque
- O sistema permite atualizar a quantidade em estoque de produtos em locais de armazenamento específicos.
- Classes Envolvidas:
Estoque
,LocalArmazenamento
,Produto
-
Processar Pagamento
- O sistema processa o pagamento de um pedido, de acordo com o tipo de pagamento escolhido pelo cliente (ex: PIX, boleto, cartão, bitcoins).
- Classes Envolvidas:
Pagamento
,IPagamentoProcessar
,PagamentoProcessarFactory
-
Validar Pagamento
- Antes de confirmar um pagamento, o sistema valida as informações fornecidas.
- Classes Envolvidas:
Pagamento
,IPagamentoValidar
,PagamentoValidarFactory
-
Notificar Status de Pagamento
- O sistema envia notificações ao cliente sobre o status do pagamento (pendente, confirmado, cancelado).
- Classes Envolvidas:
Pagamento
,IPagamentoNotificar
,PagamentoNotificarFactory
-
Registrar Pedido de Venda
- O sistema registra um pedido de venda de produtos, associando-o ao cliente e seus itens.
- Classes Envolvidas:
PedidoVenda
,ItemPedido
,Pessoa
,Produto
,Pagamento
-
Registrar Pedido de Compra
- Similar ao pedido de venda, o pedido de compra é registrado com o fornecedor e os itens solicitados.
- Classes Envolvidas:
PedidoCompra
,ItemPedido
,Pessoa
,Produto
,Pagamento
-
Autenticar Usuário
- O sistema autentica um usuário utilizando o nome de usuário e senha, garantindo que a senha seja codificada com o
BCryptPasswordEncoder
. - Classes Envolvidas:
User
,UserPrincipal
,BCryptPasswordEncoder
,UserServiceImpl
- O sistema autentica um usuário utilizando o nome de usuário e senha, garantindo que a senha seja codificada com o
-
Gerenciar Usuários e Papéis
- O administrador pode criar, atualizar ou excluir usuários e atribuir papéis (roles) que definem permissões dentro do sistema.
- Classes Envolvidas:
User
,Role
,UserServiceImpl
,UserRepository
- O sistema implementa camadas de segurança através de serviços como
UserDetailsService
, onde as credenciais dos usuários são armazenadas de forma segura e o acesso aos dados é controlado com base em permissões atribuídas aos papéis dos usuários.
Este documento define os termos e conceitos centrais usados no sistema, representando a Linguagem Ubíqua utilizada tanto por desenvolvedores quanto pelos stakeholders, garantindo uma comunicação clara e coesa entre todos.
- Estado: Representa uma unidade federativa dentro do país. Cada estado possui um
id
,descrição
esigla
. - Município: Refere-se a uma subdivisão administrativa do estado. Cada município está associado a um estado.
- CEP: Código postal utilizado para identificar uma região específica para entrega de correspondências.
- ViaCep: Serviço externo utilizado para obter informações detalhadas de um endereço com base no CEP.
- Endereço: Representa a localização física, composta por elementos como
rua
,número
,bairro
,cep
emunicipio
.
- Pessoa: Entidade abstrata que representa uma pessoa no sistema. Pode ser do tipo
PessoaFisica
ouPessoaJuridica
. - PessoaFisica: Representa um indivíduo, caracterizado por atributos como
cpf
,rg
, edata de nascimento
. - PessoaJuridica: Representa uma entidade empresarial ou organização, identificada por atributos como
cnpj
,razão social
eramo de atividade
. - Contato: Representa a relação entre uma pessoa e seus endereços e telefones.
- Telefone: Número telefônico associado a uma pessoa, que pode ser
residencial
,comercial
, oucelular
.
- Produto: Representa um item ou mercadoria no sistema, com atributos como
marca
,modelo
,descrição
,métrica
, epreço
. - Estoque: Refere-se à quantidade de produtos armazenados em um determinado
LocalArmazenamento
. - LocalArmazenamento: Local físico onde os produtos são armazenados, podendo ser um depósito ou uma loja.
- Pagamento: Representa uma transação financeira realizada por um cliente para adquirir um produto ou serviço.
- IPagamentoProcessar: Interface que define o comportamento para processar um pagamento de acordo com o tipo de pagamento (PIX, boleto, cartão, etc.).
- PagamentoProcessarFactory: Fábrica responsável por instanciar o processo de pagamento correto, baseado no método escolhido.
- IPagamentoValidar: Interface que define a lógica de validação de um pagamento.
- PagamentoValidarFactory: Fábrica que cria a instância de validação de pagamento conforme necessário.
- IPagamentoNotificar: Interface que define o comportamento para notificar o cliente sobre o status do pagamento.
- PagamentoNotificarFactory: Fábrica que cria notificações de pagamento para os clientes.
- PedidoVenda: Pedido de compra de produtos feito por um cliente.
- PedidoCompra: Pedido de aquisição de produtos feito a um fornecedor.
- ItemPedido: Representa um item dentro de um pedido, contendo o
produto
, aquantidade
, e ovalor unitário
.
- Usuário (User): Representa um usuário do sistema, identificado por um
nome de usuário
e umasenha
. - Papel (Role): Define o conjunto de permissões atribuídas a um usuário, como
Administrador
,UsuárioComum
, etc. - BCryptPasswordEncoder: Ferramenta utilizada para criptografar as senhas dos usuários, garantindo a segurança dos dados.
- UserDetailsService: Serviço responsável por carregar os detalhes do usuário a partir do banco de dados, durante a autenticação.
- Autenticação: Processo que verifica a identidade de um usuário com base em suas credenciais (nome de usuário e senha).
- Autorização: Processo de concessão de permissões a usuários para realizar ações dentro do sistema com base em seus papéis.
- Consultar Produtos
- Consulta ViaCEP
- Consultar Estados
- Consulta Municípios
- Consulta Endereços
- Consulta Telefones
- Consulta Estoques
- Consulta Locais de Armazenamento
- Consulta de Pessoas
- Consulta Contatos
- Consulta Pagamentos
- Consulta Itens do Pedido
- Consulta Pedido de Vendas
- Consulta Pedido de Compras
- Breve passeio pelo diagrama de classes do Sistema
- Breve passeio pelo diagrama de classes feito em PlantUML
- Breve passeio pela estrutura do código
- Faça um fork do repositório.
- Crie uma branch:
git checkout -b minha-feature
. - Faça commit:
git commit -m 'Adiciona nova feature'
. - Envie para a branch:
git push origin minha-feature
. - Crie um Pull Request.
Este projeto está sob a licença MIT. Para mais detalhes, veja o arquivo LICENSE.