Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<<<<<<< HEAD
# Logs
logs
*.log
Expand Down Expand Up @@ -102,3 +103,28 @@ dist

# TernJS port file
.tern-port
=======
.DS_Store
node_modules
/dist


# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
>>>>>>> grupoa/main
22 changes: 22 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<<<<<<< HEAD
GrupoA Educação - Full Stack Web Developer
===================

Expand Down Expand Up @@ -118,3 +119,24 @@ Abaixo alguns mockoups de interface como um guia para a criação do front-end.
- Quais requisitos obrigatórios que não foram entregues
4. Informe ao recrutador quando concluir o desafio junto com o link do repositório
5. Após revisão do projeto junto com a equipe de desevolvimento deixe seu repositório privado
=======
# grupoa

## Project setup
```
npm install
```

### Compiles and hot-reloads for development
```
npm run serve
```

### Compiles and minifies for production
```
npm run build
```

### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
>>>>>>> grupoa/main
49 changes: 49 additions & 0 deletions backend/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const express = require('express')
const app = express()
const morgan = require('morgan')

const rotaCadastros = require('./routes/cadastros')
const rotaAlunos = require('./routes/alunos')
const rotaUsuarios = require('./routes/usuarios')

// o morgan executa um callback para dar proseguimento ao projeto
app.use(morgan('dev'));

// definindo cabeçario
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header(
'Access-Control-Allow-Header',
'Origin, X-Requested-With, Content-Type, Accept, Authorization'
)

// o OPTIONS é muito usado quando implementar frontend para consumir a API
if (req.method === 'OPTIONS') {
req.header('Access-Control-Allow-Methods', 'GET, PUT, POST, PATCH, DELETE');
return res.status(200).send({});
}

next();
})

app.use('/cadastros', rotaCadastros)
app.use('/alunos', rotaAlunos)
app.use('/usuarios', rotaUsuarios)

// tratamento de erro se não econtrar nenhuma rota
app.use((req, res, next) => {
const erro = new Error('Rota não encontrada!')
erro.status = 404;
next(erro)
})

app.use((error, req, res, next) => {
res.status(error.status || 500)
return res.send({
erro: {
mensagem: error.message
}
})
})

module.exports = app;
131 changes: 131 additions & 0 deletions backend/controllers/alunos-controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
const mysql = require('../mysql').pool

exports.getAlunos = (req, res, next) =>{
mysql.getConnection((error, conn) => {
if (error) { return res.status(500).send({ error: error }) }
conn.query (
'SELECT * FROM alunos;',
(error, result, fields) => {
if (error) { return res.status(500).send({ error: error }) }
const response = {
quantidade: result.length,
alunos: result.map(aluno => {
return {
id_aluno: aluno.id_aluno,
quantidade: aluno.quantidade,
cadastro: {
id_cadastro: aluno.id_cadastro,
nome: aluno.nome,
email: aluno.email,
ra: aluno.ra,
cpf: aluno.cpf
},
request: {
tipo: 'GET',
descricao: 'Retorna os detalhes de um aluno específico',
url: 'http//localhost:3000/alunos/' + aluno.id_aluno
}
}
})
}
return res.status(200).send(response)
}
)
})
}

exports.postAlunos = (req, res, next) =>{

mysql.getConnection((error, conn) => {
if (error) { return res.status(500).send({ error: error })}
conn.query('SELECT * FROM cadastros WHERE id_cadastro = ?',
[req.body.id_cadastro],
(error, result, field) => {
if (error) { return res.status(500).send({ error : error })}
if (result.length === 0) {
return res.status(404).send({
mensagem : 'Não foi encontrado Aluno com esse ID'
})
}
conn.query (
'INSERT INTO alunos (id_cadastro, quantidade) VALUES (?, ?);',
[req.body.id_cadastro, req.body.quantidade],
(error, result, field) => {
conn.release();
if (error) { return res.status(500).send({ error: error }) }
const response = {
mensagem: 'Aluno inserido com sucesso',
alunoCriado : {
id_aluno: result.id_aluno,
id_cadastro: req.body.cadastro,
quantidade: req.body.quantidade,
request: {
tipo: 'GET',
descricao: 'Retorna todos os alunos',
url: 'http//localhost:3000/alunos'
}
}
}
return res.status(200).send(response)
}
)
})
})
}

exports.getUmAluno = (req, res, next) =>{
mysql.getConnection((error, conn) => {
if (error) { return res.status(500).send({ error: error }) }
conn.query (
'SELECT * FROM alunos WHERE id_aluno = ?;',
[req.params.id_aluno],
(error, result, fields) => {
if (error) { return res.status(500).send({ error: error }) }
if (result.length == 0) {
return res.status(404).send({
mensagem: 'Não foi encontrado aluno com este ID'
})
}
const response = {
aluno : {
id_aluno: result[0].id_aluno,
id_cadastro: result[0].id_cadastro,
quantidade: result[0].quantidade,
request: {
tipo: 'GET',
descricao: 'Retorna todos os alunos',
url: 'http//localhost:3000/alunos'
}
}
}
return res.status(200).send({ response: result })
}
)
})
}

exports.deleteAluno = (req, res, next) =>{
mysql.getConnection((error, conn) => {
if (error) { return res.status(500).send({ error: error }) }
conn.query(
`DELETE FROM alunos WHERE id_aluno = ?`, [req.body.id_aluno],
(error, result, field) => {
conn.release()
if (error) { return res.status(500).send({ error: error }) }
const response = {
mensagem: 'Aluno excluído com sucesso!',
request: {
tipo: 'POST',
descricao: 'Insere um aluno',
url: 'http://localhost:3000/alunos',
body: {
id_cadastro: 'Number',
quantidade: 'Number'
}
}
}
return res.status(202).send(response)
}
)
})
}
Loading