Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/samiracavalcanti/desafio-it-talent-backend


https://github.com/samiracavalcanti/desafio-it-talent-backend

Last synced: 13 days ago
JSON representation

Awesome Lists containing this project

README

        

## Projeto de Gerenciamento de Alunos

### Descrição
Este projeto consiste em uma API de gerenciamento de alunos, construída com Node.js, Express, e MySQL. A API permite listar todos os alunos, obter detalhes de um aluno específico e adicionar novos alunos.

### Estrutura do Projeto
```
your-project/
├── node_modules/
├── public/
├── src/
│ ├── database.js
│ ├── index.js
│ └── .env
├── package.json
└── README.md
```

### Dependências
O projeto utiliza as seguintes dependências:
- express
- body-parser
- cors
- mysql2
- dotenv

### Configuração do Banco de Dados
Crie um arquivo `.env` na raiz do projeto com as seguintes variáveis de ambiente:
```
MYSQL_IP=localhost
MYSQL_USER=root
MYSQL_ROOT_PASSWORD=yourpassword
MYSQL_DATABASE=yourdatabase
```

### Configuração do Projeto

#### Instalação
1. Clone o repositório:
```sh
git clone
cd your-project
```

2. Instale as dependências:
```sh
npm install
```

3. Configure as variáveis de ambiente no arquivo `.env` conforme mostrado acima.

#### Estrutura de Arquivos

##### `src/database.js`
```javascript
import mysql from 'mysql2';
import dotenv from 'dotenv';

dotenv.config();

const pool = mysql.createPool({
host: process.env.MYSQL_IP,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_ROOT_PASSWORD,
database: process.env.MYSQL_DATABASE,
}).promise();

export async function getAlunos() {
const result = await pool.query(`SELECT * FROM ALUNOS;`);
return result[0];
}

export async function getAluno(id) {
const result = await pool.query(`
SELECT *
FROM ALUNOS
WHERE id = ?;
`, [id]);
return result[0];
}

export async function createAluno(nome, idade, cidade) {
const result = await pool.query(`
INSERT INTO ALUNOS (nome, idade, cidade)
VALUES (?, ?, ?);
`, [nome, idade, cidade]);
const id = result[0].insertId;
return getAluno(id);
}
```

##### `src/index.js`
```javascript
import express from "express";
import bodyParser from "body-parser";
import cors from "cors";
import { getAluno, getAlunos, createAluno } from './database.js';

const app = express();

app.use(bodyParser.json());
app.use(cors());

app.get("/alunos", async (req, res) => {
const alunos = await getAlunos();
res.send(alunos);
});

app.get("/aluno/:id", async (req, res) => {
const id = req.params.id;
const aluno = await getAluno(id);
res.send(aluno);
});

app.post("/alunos", async (req, res) => {
const { nome, idade, cidade } = req.body;
const aluno = await createAluno(nome, idade, cidade);
res.status(201).send(aluno);
});

app.listen(8080, () => {
console.log('O servidor está executando na porta 8080');
});
```

### Executando o Projeto

1. Certifique-se de que o MySQL está rodando e que o banco de dados especificado no `.env` está criado.

2. Para iniciar o servidor, execute:
```sh
npm start
```

3. O servidor estará rodando na porta 8080. Você pode acessar os seguintes endpoints:
- `GET /alunos`: Retorna todos os alunos.
- `GET /aluno/:id`: Retorna os detalhes de um aluno específico.
- `POST /alunos`: Adiciona um novo aluno. Espera um JSON no corpo da requisição com os campos `nome`, `idade`, e `cidade`.

### Exemplos de Requisições

#### `GET /alunos`
```sh
curl -X GET http://localhost:8080/alunos
```

#### `GET /aluno/:id`
```sh
curl -X GET http://localhost:8080/aluno/1
```

#### `POST /alunos`
```sh
curl -X POST http://localhost:8080/alunos -H "Content-Type: application/json" -d '{"nome":"João", "idade":27, "cidade":"Salvador"}'
```

### Contribuindo
Se você deseja contribuir com o projeto, por favor, siga as instruções abaixo:
1. Faça um fork do projeto.
2. Crie uma nova branch (`git checkout -b feature/nova-feature`).
3. Faça suas alterações e commite (`git commit -am 'Adiciona nova feature'`).
4. Envie para o branch (`git push origin feature/nova-feature`).
5. Abra um Pull Request.

### Licença
Este projeto está licenciado sob a MIT License - veja o arquivo [LICENSE](LICENSE) para mais detalhes.

### Contato
Se você tiver alguma dúvida, sinta-se à vontade para abrir uma issue ou entrar em contato.