https://github.com/ewertondrigues02/sistema-de-gestao-de-vendas
  
  
    sistema completo de gestão de vendas, desenvolvido como um projeto de estudo e prática de boas práticas de programação e tecnologias modernas. Ele implementa funcionalidades de CRUD (Create, Read, Update, Delete) para as entidades Cliente, Produto e Vendas, além de incluir diversos conceitos importantes de arquitetura e desenvolvimento. 
    https://github.com/ewertondrigues02/sistema-de-gestao-de-vendas
  
        Last synced: 5 months ago 
        JSON representation
    
sistema completo de gestão de vendas, desenvolvido como um projeto de estudo e prática de boas práticas de programação e tecnologias modernas. Ele implementa funcionalidades de CRUD (Create, Read, Update, Delete) para as entidades Cliente, Produto e Vendas, além de incluir diversos conceitos importantes de arquitetura e desenvolvimento.
- Host: GitHub
 - URL: https://github.com/ewertondrigues02/sistema-de-gestao-de-vendas
 - Owner: ewertondrigues02
 - License: mit
 - Created: 2025-01-11T22:01:04.000Z (10 months ago)
 - Default Branch: master
 - Last Pushed: 2025-02-15T21:21:37.000Z (9 months ago)
 - Last Synced: 2025-02-15T22:24:56.039Z (9 months ago)
 - Size: 53.7 KB
 - Stars: 0
 - Watchers: 1
 - Forks: 0
 - Open Issues: 0
 - 
            Metadata Files:
            
- Readme: README.md
 - License: LICENSE
 
 
Awesome Lists containing this project
README
          
# Sistema de Gestão de Vendas: CRUD Completo com JPA, Hibernate, PostgreSQL e Testes Avançados
# CRUD Cliente, Produto e Vendas
Este projeto implementa um sistema CRUD completo para **Clientes**, **Produtos** e **Vendas**, utilizando tecnologias como **JPA**, **PostgreSQL**, **Docker**, **Hibernate**, com testes unitários e de integração, mocks, e Javadocs detalhados. O projeto segue boas práticas de arquitetura, como o uso de classes abstratas, DAOs, Services, e interfaces.
## Tecnologias Utilizadas
- **Java 21**
- **Spring Data**
- **JPA (Hibernate)**
- **PostgreSQL**
- **Docker**
- **JUnit 4 (Testes)**
- **Mockito (Mocks)**
## Estrutura do Projeto
O projeto está estruturado com as seguintes camadas e componentes:
- **Entidades**: Representação das tabelas no banco de dados (Cliente, Produto, Venda).
- **Interfaces**: Para garantir a implementação consistente das classes.
- **DAOs**: Responsáveis pela persistência e interação com o banco de dados via JPA.
- **Services**: Contêm a lógica de negócios, utilizando os DAOs para acessar os dados.
- **Testes**: Testes unitários e de integração para garantir o correto funcionamento do sistema.
- **Mocks**: Utilização de Mockito para simular dependências externas durante os testes.
- **Javadocs**: Documentação do código.
## Funcionalidades
- **CRUD para Cliente**: Cadastro, leitura, atualização e exclusão de clientes.
- **CRUD para Produto**: Cadastro, leitura, atualização e exclusão de produtos.
- **CRUD para Vendas**: Cadastro, leitura, atualização e exclusão de vendas.
- **Testes**: Cobertura completa de testes unitários e de integração.
- **Mocks**: Mocks para dependências externas, garantindo testes isolados.
- **Javadocs**: Documentação gerada automaticamente para todas as classes e métodos.
## Como Rodar o Projeto
1. **Clonar o repositório**:
   ```bash
   git clone https://github.com/ewertondrigues/sistema-de-gestao-de-vendas-crud-completo-com-jpa-hibernate-postgre-sql-e-testes-avan-ados.git
   cd project-name
   ```
2. **Configurar o Docker**:
   O projeto usa **Docker** para rodar o banco de dados PostgreSQL. Para iniciar o container do banco, execute:
   ```bash
   docker-compose up -d
   ```
3. **Configurar Banco de Dados**:
   No arquivo `application.properties`, configure as credenciais de acesso ao banco de dados:
   ```properties
   spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
   spring.datasource.username=postgres
   spring.datasource.password=password
   ```
4. **Rodar a Aplicação**:
   Para rodar a aplicação, execute o seguinte comando:
   ```bash
   mvn spring-boot:run
   ```
5. **Executar os Testes**:
   Para rodar os testes unitários e de integração, utilize o comando:
   ```bash
   mvn test
   ```
## Estrutura e Arquitetura
### `Classes Abstratas`
As classes **Cliente**, **Produto** e **Venda** herdam de classes abstratas, facilitando a reutilização de código e mantendo a consistência no modelo de dados.
### `DAO (Data Access Object)`
Cada entidade possui um **DAO** dedicado que abstrai o acesso ao banco de dados, utilizando **JPA** para persistência de dados.
### `Service`
A camada de **Service** contém a lógica de negócios e interage com os DAOs para realizar as operações de CRUD.
### `Interfaces`
Cada classe de serviço e DAO implementa uma interface correspondente. Isso garante flexibilidade e consistência no design do projeto, além de facilitar a extensibilidade.
### Exemplo de Implementação
#### `ClienteService.java`
```java
@Service
public class ClienteService {
    @Autowired
    private ClienteDAO clienteDAO;
    public Cliente criarCliente(Cliente cliente) {
        return clienteDAO.save(cliente);
    }
    public Cliente buscarClientePorId(Long id) {
        return clienteDAO.findById(id).orElseThrow(() -> new EntityNotFoundException("Cliente não encontrado"));
    }
    // Outros métodos de CRUD
}
```
#### `ClienteServiceTest.java` (Testes Unitários)
```java
@RunWith(SpringRunner.class)
@SpringBootTest
public class ClienteServiceTest {
    @MockBean
    private ClienteDAO clienteDAO;
    @Autowired
    private ClienteService clienteService;
    @Test
    public void testCriarCliente() {
        Cliente cliente = new Cliente("John", "john@example.com");
        Mockito.when(clienteDAO.save(Mockito.any(Cliente.class))).thenReturn(cliente);
        Cliente resultado = clienteService.criarCliente(cliente);
        assertNotNull(resultado);
        assertEquals("John", resultado.getNome());
    }
    // Testes para outros métodos
}
```
### `Mocking com Mockito`
No exemplo acima, **Mockito** é utilizado para mockar o comportamento do **ClienteDAO** durante os testes, permitindo que o **ClienteService** seja testado de forma isolada.
## Testes
### Testes Unitários
Testes unitários são implementados para verificar o funcionamento correto de cada método nas camadas de serviço e DAO.
### Testes de Integração
Testes de integração são realizados para garantir a interação correta entre as camadas e o banco de dados real ou um banco embutido.
### Mocks
**Mockito** é utilizado para criar mocks de dependências externas durante os testes, permitindo que as unidades sejam testadas de forma independente.
## Documentação Javadoc
A documentação Javadoc está disponível para todas as classes e métodos. Para gerar a documentação, execute o seguinte comando:
```bash
mvn javadoc:javadoc
```
A documentação gerada estará disponível em `target/site/apidocs`.
## Licença
Este projeto está licenciado sob a [MIT License](LICENSE).