Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pierrialexandervidmar/sistema_agenda
Projeto realizado para o teste backend da Magazord
https://github.com/pierrialexandervidmar/sistema_agenda
apache axios composer docker doctrine jquery nodejs php8 postgresql reactjs tailwindcss
Last synced: 30 days ago
JSON representation
Projeto realizado para o teste backend da Magazord
- Host: GitHub
- URL: https://github.com/pierrialexandervidmar/sistema_agenda
- Owner: pierrialexandervidmar
- Created: 2024-10-16T21:13:16.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2024-10-21T09:50:44.000Z (3 months ago)
- Last Synced: 2024-10-24T18:04:27.285Z (3 months ago)
- Topics: apache, axios, composer, docker, doctrine, jquery, nodejs, php8, postgresql, reactjs, tailwindcss
- Language: PHP
- Homepage:
- Size: 1.65 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Projeto Agenda de Contatos (PHP + Doctrine)
Este projeto consiste em uma `API` e `views` para o gerenciamento de uma agenda de contatos, desenvolvido com PHP, Doctrine e Docker. E adicionalmente foi incluida uma interface `frontend em ReactJS` que irá consumir as rotas da API.
A aplicação permite realizar operações CRUD (Create, Read, Update, Delete) para gerenciar contatos, utilizando um banco de dados PostgreSQL.A estrutura da aplicação é baseada em uma `arquitetura em camadas` (Layered Architecture), composta por Controller, Service, Entity e Repository. Embora seja uma aplicação pequena, o objetivo é demonstrar uma forma eficaz de separação de responsabilidades, facilitando a manutenção futura e tornando-a escalável.
Outro aspecto importante é o arquivo Container.php, que gerencia as `injeções de dependência`, simplificando a manutenção e a organização do código.
A aplicação inclui uma estrutura de views e rotas de APIs. Os recursos da API abrangem todas as operações CRUD e oferecem múltiplas maneiras de consumir dados (GET). O `sistema de roteamento` é isolado para views e APIs, o que facilita a manutenção e a inclusão de novos recursos no futuro, utilizando os arquivos routesAPI.php e routesWeb.php.
## Tecnologias Utilizadas
- PHP 8.3
- Doctrine ORM
- Apache
- Composer
- JQuery 3.7
- Http-foundation
- Docker & Docker Compose
- PostgreSQL
- PgAdmin
- ReactJS
- React Router Dom
- Axios
- Tailwind CSS## Pré-requisitos
Antes de começar, verifique se você possui o Docker e o Docker Compose instalados em sua máquina.
## Como Baixar o Projeto
Para baixar o projeto, utilize o comando git clone
```bash
git clone [email protected]:pierrialexandervidmar/sistema_agenda.git
cd sistema_agenda
```Na primeira execução:
```bash
docker compose up --build -d
```Nas demais pode executar apenas:
```bash
docker compose up -d
```### Criar o banco de dados a partir das entidades Doctrine:
Após os containers estarem em execução, execute no terminal:```bash
sudo docker compose exec php-apache php cli-config.php orm:schema-tool:update --complete
```
Se ocorrer algum bloqueio, execute este:
```bash
sudo docker compose exec php-apache php cli-config.php orm:schema-tool:update --force --complete
```Esse comando vai criar o banco de dados a partir das entidades configuradas no Doctrine.
## Acesso ao Banco de Dados
### Conectando ao PgAdmin
Acesse o PgAdmin pelo navegador em http://localhost:5050.
Faça login usando as credenciais:
- Email: [email protected]
- Senha: adminCrie um novo servidor no PgAdmin:
1. Clique com o botão direito em "Servers" e selecione "Create" > "Server...".
2. Na aba "General", insira um nome (exemplo: Postgres Docker).
3. Na aba "Connection", use as seguintes informações:
4. Host: postgres
5. Port: 5432
- Username: root
- Password: Senha!123
4. Clique em "Save".Após criar o servidor, você verá o banco de dados `agenda` na árvore de navegação do PgAdmin.
## Acessos da Aplicação
### A aplicação possui duas interfaces
A View renderizada pelo servidor PHP:
```bash
http://localhost:8080/
```E o Frontend ReactJS consumindo a API:
```bash
http://localhost:5173/
```## Acesso a API
URL Base da API:
```bash
http://localhost:8080/api
```### Rotas da API
A aplicação oferece várias rotas para gerenciar contatos e pessoas. As operações disponíveis seguem os princípios do CRUD (Create, Read, Update, Delete), com endpoints para criação, consulta, atualização e exclusão de registros. Abaixo estão os detalhes de cada rota.Obs.: Na raiz do projeto contém o arquivo `Insomnia_Requests.json`, pode importar ele no Insomnia e executar as requests para teste.
### Contatos
1. **Criar Contato**
- **Endpoint**: `/api/contatos`
- **Método HTTP**: `POST`
- **Controller**: `ContatoController::criar`
- **Descrição**: Cria um novo contato.
- **Payload**:
```json
{
"tipo": 0,
"descricao": "4899995555",
"idPessoa": 14
}
// Tipo 0 para telefone e tipo 1 para email.
```2. **Listar Contatos**
- **Endpoint**: `/api/contatos`
- **Método HTTP**: `GET`
- **Descrição**: Retorna uma lista de todos os contatos cadastrados.3. **Listar Contatos com Pessoas**
- **Endpoint**: `/api/contatos/pessoas`
- **Método HTTP**: `GET`
- **Controller**: `ContatoController::listarComPessoa`
- **Descrição**: Retorna uma lista de contatos com suas respectivas pessoas relacionadas.4. **Obter Contato por ID**
- **Endpoint**: `/api/contatos/{id}`
- **Método HTTP**: `GET`
- **Controller**: `ContatoController::obter`
- **Descrição**: Retorna um contato específico com base no ID fornecido.5. **Obter Contato com Pessoa por ID**
- **Endpoint**: `/api/contatos/pessoas/{id}`
- **Método HTTP**: `GET`
- **Controller**: `ContatoController::obterComPessoa`
- **Descrição**: Retorna um contato e sua respectiva pessoa com base no ID fornecido.6. **Atualizar Contato**
- **Endpoint**: `/api/contatos/{id}`
- **Método HTTP**: `PUT`
- **Controller**: `ContatoController::atualizar`
- **Descrição**: Atualiza as informações de um contato específico.
- **Payload**:
```json
{
"tipo": 0,
"descricao": "4796969622",
"idPessoa": 9
}
// Tipo 0 para telefone e tipo 1 para email.
```7. **Deletar Contato**
- **Endpoint**: `/api/contatos/{id}`
- **Método HTTP**: `DELETE`
- **Controller**: `ContatoController::deletar`
- **Descrição**: Remove um contato do sistema com base no ID fornecido.### Pessoas
1. **Criar Pessoa**
- **Endpoint**: `/api/pessoas`
- **Método HTTP**: `POST`
- **Controller**: `PessoaController::criar`
- **Descrição**: Cria uma nova pessoa.
- **Payload**:
```json
{
"nome": "Maristela Santos",
"cpf": "83736329059"
}
```2. **Listar Pessoas**
- **Endpoint**: `/api/pessoas`
- **Método HTTP**: `GET`
- **Controller**: `PessoaController::listar`
- **Descrição**: Retorna uma lista de todas as pessoas cadastradas.3. **Obter Pessoa por ID**
- **Endpoint**: `/api/pessoas/{id}`
- **Método HTTP**: `GET`
- **Controller**: `PessoaController::obter`
- **Descrição**: Retorna uma pessoa específica com base no ID fornecido.4. **Obter Pessoa com Contatos por ID**
- **Endpoint**: `/api/pessoas/contatos/{id}`
- **Método HTTP**: `GET`
- **Controller**: `PessoaController::obterComContato`
- **Descrição**: Retorna uma pessoa e seus contatos associados com base no ID fornecido.5. **Atualizar Pessoa**
- **Endpoint**: `/api/pessoas/{id}`
- **Método HTTP**: `PUT`
- **Controller**: `PessoaController::atualizar`
- **Descrição**: Atualiza as informações de uma pessoa específica.
- **Payload**:
```json
{
"nome": "Maristela Santos",
"cpf": "83736329059"
}
```6. **Deletar Pessoa**
- **Endpoint**: `/api/pessoas/{id}`
- **Método HTTP**: `DELETE`
- **Controller**: `PessoaController::deletar`
- **Descrição**: Remove uma pessoa do sistema com base no ID fornecido.![sistema_agenda](https://github.com/pierrialexandervidmar/sistema_agenda/blob/main/frontend/public/frontend-react.png)