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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
api/node_modules/
Binary file added DER.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
64 changes: 35 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,35 @@
# Desafio Celso Lisboa para FullStack

### Cenário

**Como** Coordenador Acadêmico de uma Instituição de Ensino
**Eu preciso** realizar a gestão dos cursos oferecidos pela Instituição, com seus respectivos professores, salas e horários
**Para** que o setor de Marketing possa vender os cursos online.

### Segue instruções para realizar o desafio

1. Faça um fork deste repositório.
2. Baseado no cenário acima, modele e crie o esquema do banco de dados para armazenar as informações normalizadas.
* Comite a imagem em jpg ou png do DER e o script do DDL.
3. Desenvolva uma API REST para realizar as operações necessárias com o banco de dados criado.
4. Baseado nas imagens `wireframe/1-login-mobile.png` e `wireframe/2-login-desktop.png`, crie a tela de login da aplicação.
* Considere apenas uma validação simples por e-mail e senha.
* Não existe a necessidade de CRUD de usuário, recuperação de senha ou outra operação mais complexa.
5. Baseado nas imagens `wireframe/3-cursos-mobile.png` e `wireframe/4-cursos-desktop.png`, crie a tela de visualização e deleção de cursos.
* Deve conter as informações de horário, professor e sala.
6. Baseado nas imagens `wireframe/5-detalhe-mobile.png` e `wireframe/6-detalhe-desktop.png`, crie a tela de criação e alteração de cursos.
* Os campos de professor e sala deverão ser um multi-select.
* Não existe a necessidade de CRUD de professor e sala.
7. Realizar um Pull Request para este repositório, com instruções necessárias para instalação e instânciação dos sistemas.

### O que será avaliado

1. Fidelidade às instruções e ao cenário.
2. Clean Code e boas práticas.
3. Boas práticas de versionamento.
# Desafio Full Stack Celso Lisboa

## Pré-requisitos

[NodeJS](https://nodejs.org/en/)
[PostgreSQL](https://www.postgresql.org/)

```shellscript
psql
CREATE USER test;
ALTER USER test WITH ENCRYPTED PASSWORD 'test';
CREATE DATABASE desafio_fullstack;
```

## Instalação API

```shellscript
npm install
npm install -g jest eslint db-migrate db-migrate-pg
```

## Executar API

`cd api/ && npm start`

## Instalação Client

```shellscript
npm install
npm install -g @angular/cli@8.2.2
```

## Executar API

`cd client/ && npm start`
5 changes: 5 additions & 0 deletions api/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
PORT=3000
DB_HOST=localhost
DB_USER=postgres
DB_PASSWORD=test
DB_DATABASE=desafio_fullstack
16 changes: 16 additions & 0 deletions api/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module.exports = {
env: {
commonjs: true,
es2021: true,
node: true,
jest: true
},
extends: [
'standard'
],
parserOptions: {
ecmaVersion: 12
},
rules: {
}
}
28 changes: 28 additions & 0 deletions api/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
## Pré-requisitos

[NodeJS](https://nodejs.org/en/)
[PostgreSQL](https://www.postgresql.org/)

```shellscript
psql
CREATE USER test;
ALTER USER test WITH ENCRYPTED PASSWORD 'test';
CREATE DATABASE desafio_fullstack;
```

## Instalação

```shellscript
npm install
```

## Testes

`npm test`

## Lint
`npm run lint`

## Executar

`npm start`
10 changes: 10 additions & 0 deletions api/database.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"dev": {
"driver": "pg",
"user": "test",
"password": "test",
"host": "localhost",
"database": "desafio_fullstack",
"port": "5432"
}
}
44 changes: 44 additions & 0 deletions api/migrations/20210511023759-table-courses.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
exports.up = function(db, callback) {
db.createTable('courses', {
id: {
type: 'uuid',
notNull: true,
primaryKey: true,
defaultValue : new String('gen_random_uuid()')
},
name: {
type: 'string',
notNull: true
},
teachers: {
type: 'string',
notNull: true
},
rooms: {
type: 'string',
notNull: true
},
start_at: {
type: 'time',
notNull: true
},
end_at: {
type: 'time',
notNull: true
},
created_at: {
type: 'datetime',
notNull: true,
defaultValue : new String('now()')
},
disabled: {
type: 'boolean',
notNull: true,
defaultValue: false
}
}, callback)
}

exports.down = function(db, callback) {
db.dropTable('courses', callback)
}
14 changes: 14 additions & 0 deletions api/migrations/20210511030911-insert-courses.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
exports.up = function(db, callback) {
db.runSql(`
INSERT INTO courses (id, name, teachers, rooms, start_at, end_at, disabled)
VALUES ('510f6df2-0fb4-58a5-93eb-cb6fc18c9221', 'Biologia', 'Afonso,Leandro', 'B1,B2', '08:00', '10:00', false),
('c26550e7-3629-5ba0-97a3-c96de4000227', 'Gestão', 'Maria,Gabriela', 'G1,G2', '08:00', '10:00', false),
('f3bdf11a-436c-53c3-80af-24ba56048375', 'História', 'Gabriela,Leandro', 'H1,H2', '08:00', '10:00', true);
`, callback)
}

exports.down = function(db, callback) {
db.runSql(`
DELETE FROM courses;
`,callback)
}
Loading