Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file added DER desafiofullstack.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions backend/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# editorconfig.org
root = true

[*]
indent_size = 2
indent_style = space
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false
19 changes: 19 additions & 0 deletions backend/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
HOST=127.0.0.1
PORT=3333
NODE_ENV=development

APP_NAME=AdonisJs
APP_URL=http://${HOST}:${PORT}

CACHE_VIEWS=false

APP_KEY=

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASSWORD=
DB_DATABASE=adonis

HASH_DRIVER=bcrypt
11 changes: 11 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Node modules
node_modules

# Adonis directory for storing tmp files
tmp

# Environment variables, never commit this file
.env

# The development sqlite file
database/*.sqlite
27 changes: 27 additions & 0 deletions backend/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Adonis API application

### Agora na pasta backend rodar o comando `npm install`, após a instalação crie um arquivo .env e cole as sequites configurações:
`HOST=127.0.0.1
PORT=3333
NODE_ENV=development
APP_NAME=AdonisJs
APP_URL=http://${HOST}:${PORT}
CACHE_VIEWS=false
APP_KEY=LlIVOk3e0A1Xyoxe0hQi58APLvRm9SpP
DB_CONNECTION=pg
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=
DB_DATABASE=desafiofullstack
HASH_DRIVER=bcrypt
` .

### Cirei uma banco com nome do desafio. basta configurar para o de sua preferência.
- O arquivo .sql para criar as tabelas está na raiz do projeto.
- Aqui você tem duas opções, a primeira rodar o .sql no banco ou apenas entrar na pasta backend e rodar `npx adonis migration:run`,
que irá criar suas tabelas no banco.
- importante falar que foram usadas duas views com inner join... uma com nome de 'curso' e a outra 'curso_single' do banco para lista os cursos. também está na raiz do projeto o código de consulta.
- Antes de listar ou cadastrar os cursos primeiro crie alguns professores e salas "na mão" nas tabelas para que não ocorra erros nos selects ou algo parecido.
- Depois de conseguir se conectar ao banco e rodar as migrations, no terminal execute `npm run start` para ligar o servidor da API REST.
- Login de teste é : email:`teste@gmail.com` e a senha: `123456`. login correto, vai para página de cursos.
21 changes: 21 additions & 0 deletions backend/ace
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
'use strict'

/*
|--------------------------------------------------------------------------
| Ace Commands
|--------------------------------------------------------------------------
|
| The ace file is just a regular Javascript file but with no extension. You
| can call `node ace` followed by the command name and it just works.
|
| Also you can use `adonis` followed by the command name, since the adonis
| global proxies all the ace commands.
|
*/

const { Ignitor } = require('@adonisjs/ignitor')

new Ignitor(require('@adonisjs/fold'))
.appRoot(__dirname)
.fireAce()
.catch(console.error)
113 changes: 113 additions & 0 deletions backend/app/Controllers/Http/CursoController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
'use strict'


/** @typedef {import('@adonisjs/framework/src/Request')} Request */
/** @typedef {import('@adonisjs/framework/src/Response')} Response */
/** @typedef {import('@adonisjs/framework/src/View')} View */
/**
* Resourceful controller for interacting with cursos
*/
const Database = use('Database')
const Curso = use('App/Models/Curso')
class CursoController {
/**
* Show a list of all cursos.
* GET cursos
*
* @param {object} ctx
* @param {Request} ctx.request
* @param {Response} ctx.response
* @param {View} ctx.view
*/
async index () {
const curso = await Database.select('*').from('curso')
return curso
}

/**
* Render a form to be used for creating a new curso.
* GET cursos/create
*
* @param {object} ctx
* @param {Request} ctx.request
* @param {Response} ctx.response
* @param {View} ctx.view
*
async create ({ request, response, view }) {
} */

/**
* Create/save a new curso.
* POST cursos
*
* @param {object} ctx
* @param {Request} ctx.request
* @param {Response} ctx.response
*/
async store ({ request}) {
const data = request.only(['nome_curso','inicio','fim','sala_id','professor_id'])
const curso = await Curso.create(data)
return curso
}

/**
* Display a single curso.
* GET cursos/:id
*
* @param {object} ctx
* @param {Request} ctx.request
* @param {Response} ctx.response
* @param {View} ctx.view
*/
async show ({ params}) {
//const curso = await Curso.find(params.id).inner
const curso = await Database.select('*').from('curso_single').where('id',params.id)

return curso[0]
}

/**
* Render a form to update an existing curso.
* GET cursos/:id/edit
*
* @param {object} ctx
* @param {Request} ctx.request
* @param {Response} ctx.response
* @param {View} ctx.view
*/
/* async edit ({ params, request, response, view }) {
} */

/**
* Update curso details.
* PUT or PATCH cursos/:id
*
* @param {object} ctx
* @param {Request} ctx.request
* @param {Response} ctx.response
*/
async update ({ params, request}) {
const curso = await Curso.find(params.id)
const data = request.only(['nome_curso','inicio','fim','sala_id','professor_id'])
curso.merge(data)
await curso.save()

return curso
}

/**
* Delete a curso with id.
* DELETE cursos/:id
*
* @param {object} ctx
* @param {Request} ctx.request
* @param {Response} ctx.response
*/
async destroy ({ params}) {
const curso = await Curso.find(params.id)

await curso.delete()
}
}

module.exports = CursoController
11 changes: 11 additions & 0 deletions backend/app/Controllers/Http/ProfessorController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict'
const Database = use('Database')
class ProfessorController {
async index () {
const professor = await Database.select(['id','nome_professor']).from('professores')
return professor
}

}

module.exports = ProfessorController
11 changes: 11 additions & 0 deletions backend/app/Controllers/Http/SalaController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict'
const Database = use('Database')

class SalaController {
async index () {
const salas = await Database.select(['id','numero_sala']).from('salas')
return salas
}
}

module.exports = SalaController
22 changes: 22 additions & 0 deletions backend/app/Controllers/Http/UserController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
'use strict'
const Database = use('Database')
class UserController {

async store ({request, response}) {
const userFake = {
email: 'teste@gmail.com',
senha:'123456'
}
const {email: email, senha: senha} = request.only(['email','senha'])

if(userFake.email == email && userFake.senha == senha){
return response.status(200).send({message: true})
}else{
return response.status(401).send({message: false})
}
}


}

module.exports = UserController
17 changes: 17 additions & 0 deletions backend/app/Middleware/ConvertEmptyStringsToNull.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'use strict'

class ConvertEmptyStringsToNull {
async handle ({ request }, next) {
if (Object.keys(request.body).length) {
request.body = Object.assign(
...Object.keys(request.body).map(key => ({
[key]: request.body[key] !== '' ? request.body[key] : null
}))
)
}

await next()
}
}

module.exports = ConvertEmptyStringsToNull
9 changes: 9 additions & 0 deletions backend/app/Models/Curso.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict'

/** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
const Model = use('Model')

class Curso extends Model {
}

module.exports = Curso
10 changes: 10 additions & 0 deletions backend/app/Models/Professor.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
'use strict'

/** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
const Model = use('Model')

class Professor extends Model {

}

module.exports = Professor
9 changes: 9 additions & 0 deletions backend/app/Models/Sala.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict'

/** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
const Model = use('Model')

class Sala extends Model {
}

module.exports = Sala
16 changes: 16 additions & 0 deletions backend/app/Models/Traits/NoTimestamp.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
'use strict'

class NoTimestamp {
register (Model) {
Object.defineProperties(Model, {
createdAtColumn: {
get: () => null,
},
updatedAtColumn: {
get: () => null,
}
})
}
}

module.exports = NoTimestamp
9 changes: 9 additions & 0 deletions backend/app/Models/User.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict'

const Model = use('Model')

class User extends Model {

}

module.exports = User
Loading